Module: wine Branch: master Commit: 3bf32809b0dae5973d2185795044809c5af33550 URL: https://source.winehq.org/git/wine.git/?a=commit;h=3bf32809b0dae5973d2185795...
Author: Sergio Gómez Del Real sdelreal@codeweavers.com Date: Tue Jan 23 08:47:24 2018 +0000
ole32: Prevent adding additional cache entries to static class caches.
Signed-off-by: Sergio Gómez Del Real sdelreal@codeweavers.com Signed-off-by: Huw Davies huw@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ole32/datacache.c | 2 ++ dlls/ole32/tests/ole2.c | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+)
diff --git a/dlls/ole32/datacache.c b/dlls/ole32/datacache.c index 8c5df32..60ddd38 100644 --- a/dlls/ole32/datacache.c +++ b/dlls/ole32/datacache.c @@ -2453,6 +2453,8 @@ static HRESULT WINAPI DataCache_Cache( return CACHE_S_SAMECACHE; }
+ if (This->clsid_static) return DV_E_FORMATETC; + hr = DataCache_CreateEntry(This, &fmt_cpy, advf, FALSE, &cache_entry);
if (SUCCEEDED(hr)) diff --git a/dlls/ole32/tests/ole2.c b/dlls/ole32/tests/ole2.c index 7fcb1aa..d83ca00 100644 --- a/dlls/ole32/tests/ole2.c +++ b/dlls/ole32/tests/ole2.c @@ -2426,6 +2426,29 @@ static void test_data_cache_cache(void)
IDataObject_Release( data ); IOleCache2_Release( cache ); + + /* tests for a static class cache */ + hr = CreateDataCache( NULL, &CLSID_Picture_Dib, &IID_IOleCache2, (void **)&cache ); + + fmt.cfFormat = CF_DIB; + fmt.dwAspect = DVASPECT_CONTENT; + fmt.tymed = TYMED_HGLOBAL; + hr = IOleCache2_Cache( cache, &fmt, 0, &conn ); + ok( hr == CACHE_S_SAMECACHE, "got %08x\n", hr ); + + /* aspect other than DVASPECT_CONTENT should fail */ + fmt.dwAspect = DVASPECT_THUMBNAIL; + hr = IOleCache2_Cache( cache, &fmt, 0, &conn ); + ok( FAILED(hr), "got %08x\n", hr ); + + /* try caching another clip format */ + fmt.dwAspect = DVASPECT_CONTENT; + fmt.cfFormat = CF_METAFILEPICT; + fmt.tymed = TYMED_MFPICT; + hr = IOleCache2_Cache( cache, &fmt, 0, &conn ); + ok( FAILED(hr), "got %08x\n", hr ); + + IOleCache2_Release( cache ); }
/* The CLSID_Picture_ classes automatically create appropriate cache entries */