Ziqing Hui : windowscodecs: Return fail for unsupported format in DdsDecoder_Initialize().

Alexandre Julliard julliard at winehq.org
Fri Jul 17 16:30:45 CDT 2020


Module: wine
Branch: master
Commit: f98a32ad471e95ab2c70563b24d5a0a1368439ad
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=f98a32ad471e95ab2c70563b24d5a0a1368439ad

Author: Ziqing Hui <zhui at codeweavers.com>
Date:   Wed Jul 15 22:01:14 2020 +0800

windowscodecs: Return fail for unsupported format in DdsDecoder_Initialize().

Signed-off-by: Ziqing Hui <zhui at codeweavers.com>
Signed-off-by: Esme Povirk <esme at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/windowscodecs/ddsformat.c       | 18 +++++++++++++++++-
 dlls/windowscodecs/tests/ddsformat.c |  3 ---
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/dlls/windowscodecs/ddsformat.c b/dlls/windowscodecs/ddsformat.c
index f7b5201321..bbd30a90d2 100644
--- a/dlls/windowscodecs/ddsformat.c
+++ b/dlls/windowscodecs/ddsformat.c
@@ -626,10 +626,26 @@ static HRESULT WINAPI DdsDecoder_Initialize(IWICBitmapDecoder *iface, IStream *p
                                             WICDecodeOptions cacheOptions)
 {
     DdsDecoder *This = impl_from_IWICBitmapDecoder(iface);
+    HRESULT hr;
 
     TRACE("(%p,%p,%x)\n", iface, pIStream, cacheOptions);
 
-    return IWICWineDecoder_Initialize(&This->IWICWineDecoder_iface, pIStream, cacheOptions);
+    EnterCriticalSection(&This->lock);
+
+    hr = IWICWineDecoder_Initialize(&This->IWICWineDecoder_iface, pIStream, cacheOptions);
+    if (FAILED(hr)) goto end;
+
+    if (!This->info.compressed || This->info.dimension == WICDdsTextureCube) {
+        IStream_Release(pIStream);
+        This->stream = NULL;
+        This->initialized = FALSE;
+        hr = WINCODEC_ERR_BADHEADER;
+    }
+
+end:
+    LeaveCriticalSection(&This->lock);
+
+    return hr;
 }
 
 static HRESULT WINAPI DdsDecoder_GetContainerFormat(IWICBitmapDecoder *iface,
diff --git a/dlls/windowscodecs/tests/ddsformat.c b/dlls/windowscodecs/tests/ddsformat.c
index ecf7de0bc4..32a854fbb0 100644
--- a/dlls/windowscodecs/tests/ddsformat.c
+++ b/dlls/windowscodecs/tests/ddsformat.c
@@ -237,7 +237,6 @@ static HRESULT init_decoder(IWICBitmapDecoder *decoder, IWICStream *stream, HRES
     if (index == -1) {
         ok(hr == S_OK, "Decoder initialize failed, hr %#x\n", hr);
     } else {
-        todo_wine_if(wine_init)
         ok(hr == expected, "Test %u: Expected hr %#x, got %#x\n", index, expected, hr);
     }
 
@@ -251,10 +250,8 @@ static HRESULT init_decoder(IWICBitmapDecoder *decoder, IWICStream *stream, HRES
         if (hr == S_OK) {
             hr = IWICWineDecoder_Initialize(wine_decoder, (IStream*)stream, WICDecodeMetadataCacheOnDemand);
             if (index == -1)  {
-                todo_wine
                 ok(hr == S_OK, "Initialize failed, hr %#x\n", hr);
             } else {
-                todo_wine
                 ok(hr == S_OK, "Test %u: Initialize failed, hr %#x\n", index, hr);
             }
 




More information about the wine-cvs mailing list