From cb5279f10ede4beda2d53ed02b88dbb12b3a1fd4 Mon Sep 17 00:00:00 2001 From: Nicholas Hayes <0xC0000054@users.noreply.github.com> Date: Wed, 4 Oct 2023 11:17:15 -0600 Subject: [PATCH] Read legacy files with a DDS_HEADER size of 24 (#400) --- DirectXTex/DirectXTexDDS.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/DirectXTex/DirectXTexDDS.cpp b/DirectXTex/DirectXTexDDS.cpp index 32eef41..bdb50bd 100644 --- a/DirectXTex/DirectXTexDDS.cpp +++ b/DirectXTex/DirectXTexDDS.cpp @@ -341,9 +341,17 @@ namespace auto pHeader = reinterpret_cast(static_cast(pSource) + sizeof(uint32_t)); // Verify header to validate DDS file - if (pHeader->size != sizeof(DDS_HEADER)) + if (flags & DDS_FLAGS_PERMISSIVE) { - return E_FAIL; + if (pHeader->size != 24 /* Known variant */ + && pHeader->size != sizeof(DDS_HEADER)) + { + return HRESULT_E_NOT_SUPPORTED; + } + } + else if (pHeader->size != sizeof(DDS_HEADER)) + { + return HRESULT_E_NOT_SUPPORTED; } if (flags & DDS_FLAGS_PERMISSIVE) @@ -368,7 +376,8 @@ namespace if ((pHeader->ddspf.flags & DDS_FOURCC) && (MAKEFOURCC('D', 'X', '1', '0') == pHeader->ddspf.fourCC)) { - if (pHeader->ddspf.size != sizeof(DDS_PIXELFORMAT)) + if (pHeader->size != sizeof(DDS_HEADER) + || pHeader->ddspf.size != sizeof(DDS_PIXELFORMAT)) { // We do not accept legacy DX9 'known variants' for modern "DX10" extension header files. return E_FAIL;