From 3bf32809b0dae5973d2185795044809c5af33550 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sergio=20G=C3=B3mez=20Del=20Real?= Date: Tue, 23 Jan 2018 08:47:24 +0000 Subject: [PATCH] ole32: Prevent adding additional cache entries to static class caches. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Sergio Gómez Del Real Signed-off-by: Huw Davies Signed-off-by: Alexandre Julliard --- 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 8c5df32f6e7..60ddd386bad 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 7fcb1aa1e07..d83ca00a665 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 */