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