From 0704e5be237affec09d4797c55920cfc9e0de76d Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Fri, 7 Feb 2025 18:16:19 -0800 Subject: [PATCH 1/6] CodeQL recommendations --- Auxiliary/DirectXTexXboxDetile.cpp | 58 +++++++++++++++++++----------- Auxiliary/DirectXTexXboxTile.cpp | 42 +++++++++++----------- 2 files changed, 59 insertions(+), 41 deletions(-) diff --git a/Auxiliary/DirectXTexXboxDetile.cpp b/Auxiliary/DirectXTexXboxDetile.cpp index afae310b..00fb4f8a 100644 --- a/Auxiliary/DirectXTexXboxDetile.cpp +++ b/Auxiliary/DirectXTexXboxDetile.cpp @@ -32,7 +32,7 @@ namespace const uint8_t* sptr = xbox.GetPointer(); const uint8_t* endPtr = sptr + layout.SizeBytes; - for (uint32_t item = 0; item < nimages; ++item) + for (size_t item = 0; item < nimages; ++item) { const Image* img = result[item]; if (!img || !img->pixels) @@ -49,9 +49,9 @@ namespace { #if defined(_GAMING_XBOX_SCARLETT) || defined(_USE_SCARLETT) const UINT64 element = (packed) ? (x >> 1) : x; - const size_t offset = computer->GetTexelElementOffsetBytes(0, level, element, 0, item, 0, nullptr); + const size_t offset = computer->GetTexelElementOffsetBytes(0, static_cast(level), element, 0, static_cast(item), 0, nullptr); #else - const size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, item, 0); + const size_t offset = computer->GetTexelElementOffsetBytes(0, static_cast(level), x, 0, static_cast(item), 0); #endif if (offset == size_t(-1)) return E_FAIL; @@ -83,7 +83,7 @@ namespace _In_reads_(nimages) const Image** result, size_t nimages) { - if (!nimages) + if (!nimages || nimages > UINT32_MAX) return E_INVALIDARG; if (!xbox.GetPointer() || !computer || !result || !result[0]) @@ -150,7 +150,7 @@ namespace return E_FAIL; // Perform detiling - for (uint32_t item = 0; item < nimages; ++item) + for (size_t item = 0; item < nimages; ++item) { const Image* img = result[item]; if (!img || !img->pixels) @@ -164,9 +164,9 @@ namespace for (size_t x = 0; x < img->width; ++x) { #if defined(_GAMING_XBOX_SCARLETT) || defined(_USE_SCARLETT) - size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, item, 0, nullptr); + size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, static_cast(item), 0, nullptr); #else - size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, item, 0); + size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, static_cast(item), 0); #endif if (offset == size_t(-1)) return E_FAIL; @@ -199,7 +199,7 @@ namespace _In_reads_(nimages) const Image** result, size_t nimages) { - if (!nimages) + if (!nimages || nimages > UINT32_MAX) return E_INVALIDARG; if (!xbox.GetPointer() || !computer || !result || !result[0]) @@ -210,7 +210,7 @@ namespace uint8_t* baseAddr = xbox.GetPointer(); const auto& metadata = xbox.GetMetadata(); - for (uint32_t item = 0; item < nimages; ++item) + for (size_t item = 0; item < nimages; ++item) { const Image* img = result[item]; if (!img || !img->pixels) @@ -314,6 +314,11 @@ HRESULT Xbox::Detile( { case TEX_DIMENSION_TEXTURE1D: { + if (metadata.width > D3D11_REQ_TEXTURE1D_U_DIMENSION + || metadata.mipLevels > D3D11_REQ_MIP_LEVELS + || metadata.arraySize > D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) + return E_INVALIDARG; + XG_TEXTURE1D_DESC desc = {}; desc.Width = static_cast(metadata.width); desc.MipLevels = static_cast(metadata.mipLevels); @@ -348,13 +353,13 @@ HRESULT Xbox::Detile( if (FAILED(hr)) return hr; - for (uint32_t level = 0; level < metadata.mipLevels; ++level) + for (size_t level = 0; level < metadata.mipLevels; ++level) { if (metadata.arraySize > 1) { std::vector images; images.reserve(metadata.arraySize); - for (uint32_t item = 0; item < metadata.arraySize; ++item) + for (size_t item = 0; item < metadata.arraySize; ++item) { const Image* img = image.GetImage(level, item, 0); if (!img) @@ -366,7 +371,7 @@ HRESULT Xbox::Detile( images.push_back(img); } - hr = Detile1D(xbox, level, computer.Get(), layout, &images[0], images.size()); + hr = Detile1D(xbox, static_cast(level), computer.Get(), layout, &images[0], images.size()); } else { @@ -377,7 +382,7 @@ HRESULT Xbox::Detile( return E_FAIL; } - hr = Detile1D(xbox, level, computer.Get(), layout, &img, 1); + hr = Detile1D(xbox, static_cast(level), computer.Get(), layout, &img, 1); } if (FAILED(hr)) @@ -391,6 +396,12 @@ HRESULT Xbox::Detile( case TEX_DIMENSION_TEXTURE2D: { + if (metadata.width > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION + || metadata.height > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION + || metadata.mipLevels > D3D11_REQ_MIP_LEVELS + || metadata.arraySize > D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) + return E_INVALIDARG; + XG_TEXTURE2D_DESC desc = {}; desc.Width = static_cast(metadata.width); desc.Height = static_cast(metadata.height); @@ -427,13 +438,13 @@ HRESULT Xbox::Detile( if (FAILED(hr)) return hr; - for (uint32_t level = 0; level < metadata.mipLevels; ++level) + for (size_t level = 0; level < metadata.mipLevels; ++level) { if (metadata.arraySize > 1) { std::vector images; images.reserve(metadata.arraySize); - for (uint32_t item = 0; item < metadata.arraySize; ++item) + for (size_t item = 0; item < metadata.arraySize; ++item) { const Image* img = image.GetImage(level, item, 0); if (!img) @@ -445,7 +456,7 @@ HRESULT Xbox::Detile( images.push_back(img); } - hr = Detile2D(xbox, level, computer.Get(), &images[0], images.size()); + hr = Detile2D(xbox, static_cast(level), computer.Get(), &images[0], images.size()); } else { @@ -456,7 +467,7 @@ HRESULT Xbox::Detile( return E_FAIL; } - hr = Detile2D(xbox, level, computer.Get(), &img, 1); + hr = Detile2D(xbox, static_cast(level), computer.Get(), &img, 1); } if (FAILED(hr)) @@ -470,6 +481,13 @@ HRESULT Xbox::Detile( case TEX_DIMENSION_TEXTURE3D: { + if (metadata.width > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION + || metadata.height > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION + || metadata.depth > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION + || metadata.mipLevels > D3D11_REQ_MIP_LEVELS + || metadata.arraySize != 1) + return E_INVALIDARG; + XG_TEXTURE3D_DESC desc = {}; desc.Width = static_cast(metadata.width); desc.Height = static_cast(metadata.height); @@ -504,10 +522,10 @@ HRESULT Xbox::Detile( if (FAILED(hr)) return hr; - uint32_t d = static_cast(metadata.depth); + auto d = static_cast(metadata.depth); size_t index = 0; - for (uint32_t level = 0; level < metadata.mipLevels; ++level) + for (size_t level = 0; level < metadata.mipLevels; ++level) { if ((index + d) > image.GetImageCount()) { @@ -516,7 +534,7 @@ HRESULT Xbox::Detile( } // Relies on the fact that slices are contiguous - hr = Detile3D(xbox, level, computer.Get(), image.GetImages()[index]); + hr = Detile3D(xbox, static_cast(level), computer.Get(), image.GetImages()[index]); if (FAILED(hr)) { image.Release(); diff --git a/Auxiliary/DirectXTexXboxTile.cpp b/Auxiliary/DirectXTexXboxTile.cpp index 93d25ab4..7a5f7c30 100644 --- a/Auxiliary/DirectXTexXboxTile.cpp +++ b/Auxiliary/DirectXTexXboxTile.cpp @@ -34,7 +34,7 @@ namespace uint8_t* dptr = xbox.GetPointer(); const uint8_t* endPtr = dptr + layout.SizeBytes; - for (uint32_t item = 0; item < nimages; ++item) + for (size_t item = 0; item < nimages; ++item) { const Image* img = images[item]; @@ -52,9 +52,9 @@ namespace { #if defined(_GAMING_XBOX_SCARLETT) || defined(_USE_SCARLETT) UINT64 element = (packed) ? (x >> 1) : x; - size_t offset = computer->GetTexelElementOffsetBytes(0, level, element, 0, item, 0, nullptr); + size_t offset = computer->GetTexelElementOffsetBytes(0, level, element, 0, static_cast(item), 0, nullptr); #else - size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, item, 0); + size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, static_cast(item), 0); #endif if (offset == size_t(-1)) return E_FAIL; @@ -169,7 +169,7 @@ namespace const XG_RESOURCE_LAYOUT& layout, const XboxImage& xbox) { - if (!nimages) + if (!nimages || nimages > UINT32_MAX) return E_INVALIDARG; if (!images || !images[0] || !computer || !xbox.GetPointer()) @@ -230,7 +230,7 @@ namespace memset(tiled, 0, sizeof(XMVECTOR) * tiledPixels); // Perform tiling - for (uint32_t item = 0; item < nimages; ++item) + for (size_t item = 0; item < nimages; ++item) { const Image* img = images[item]; @@ -248,9 +248,9 @@ namespace for (size_t x = 0; x < img->width; ++x) { #if defined(_GAMING_XBOX_SCARLETT) || defined(_USE_SCARLETT) - size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, item, 0, nullptr); + size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, static_cast(item), 0, nullptr); #else - size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, item, 0); + size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, static_cast(item), 0); #endif if (offset == size_t(-1)) return E_FAIL; @@ -285,7 +285,7 @@ namespace _In_ XGTextureAddressComputer* computer, const XboxImage& xbox) { - if (!nimages) + if (!nimages || nimages > UINT32_MAX) return E_INVALIDARG; if (!images || !images[0] || !computer || !xbox.GetPointer()) @@ -294,7 +294,7 @@ namespace uint8_t* baseAddr = xbox.GetPointer(); const auto& metadata = xbox.GetMetadata(); - for (uint32_t item = 0; item < nimages; ++item) + for (size_t item = 0; item < nimages; ++item) { const Image* img = images[item]; @@ -445,7 +445,7 @@ HRESULT Xbox::Tile( XboxTileMode mode) { if (!srcImages - || !nimages + || !nimages || nimages > UINT32_MAX || metadata.width > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION || metadata.height > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION || metadata.depth > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION @@ -533,13 +533,13 @@ HRESULT Xbox::Tile( if (FAILED(hr)) return hr; - for (uint32_t level = 0; level < metadata.mipLevels; ++level) + for (size_t level = 0; level < metadata.mipLevels; ++level) { if (metadata.arraySize > 1) { std::vector images; images.reserve(metadata.arraySize); - for (uint32_t item = 0; item < metadata.arraySize; ++item) + for (size_t item = 0; item < metadata.arraySize; ++item) { const size_t index = metadata.ComputeIndex(level, item, 0); if (index >= nimages) @@ -551,7 +551,7 @@ HRESULT Xbox::Tile( images.push_back(&srcImages[index]); } - hr = Tile1D(&images[0], images.size(), level, computer.Get(), layout, xbox); + hr = Tile1D(&images[0], images.size(), static_cast(level), computer.Get(), layout, xbox); } else { @@ -563,7 +563,7 @@ HRESULT Xbox::Tile( } const Image* images = &srcImages[index]; - hr = Tile1D(&images, 1, level, computer.Get(), layout, xbox); + hr = Tile1D(&images, 1, static_cast(level), computer.Get(), layout, xbox); } if (FAILED(hr)) @@ -617,13 +617,13 @@ HRESULT Xbox::Tile( if (FAILED(hr)) return hr; - for (uint32_t level = 0; level < metadata.mipLevels; ++level) + for (size_t level = 0; level < metadata.mipLevels; ++level) { if (metadata.arraySize > 1) { std::vector images; images.reserve(metadata.arraySize); - for (uint32_t item = 0; item < metadata.arraySize; ++item) + for (size_t item = 0; item < metadata.arraySize; ++item) { const size_t index = metadata.ComputeIndex(level, item, 0); if (index >= nimages) @@ -635,7 +635,7 @@ HRESULT Xbox::Tile( images.push_back(&srcImages[index]); } - hr = Tile2D(&images[0], images.size(), level, computer.Get(), xbox); + hr = Tile2D(&images[0], images.size(), static_cast(level), computer.Get(), xbox); } else { @@ -647,7 +647,7 @@ HRESULT Xbox::Tile( } const Image* images = &srcImages[index]; - hr = Tile2D(&images, 1, level, computer.Get(), xbox); + hr = Tile2D(&images, 1, static_cast(level), computer.Get(), xbox); } if (FAILED(hr)) @@ -699,10 +699,10 @@ HRESULT Xbox::Tile( if (FAILED(hr)) return hr; - uint32_t d = static_cast(metadata.depth); + auto d = static_cast(metadata.depth); size_t index = 0; - for (uint32_t level = 0; level < metadata.mipLevels; ++level) + for (size_t level = 0; level < metadata.mipLevels; ++level) { if ((index + d) > nimages) { @@ -711,7 +711,7 @@ HRESULT Xbox::Tile( } // Relies on the fact that slices are contiguous - hr = Tile3D(srcImages[index], level, computer.Get(), xbox); + hr = Tile3D(srcImages[index], static_cast(level), computer.Get(), xbox); if (FAILED(hr)) { xbox.Release(); From e26346728ff164cdbd91614db486f4c4643e9f49 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Mon, 10 Feb 2025 11:20:20 -0800 Subject: [PATCH 2/6] Code review --- Auxiliary/DirectXTexXboxDetile.cpp | 4 ++-- Auxiliary/DirectXTexXboxTile.cpp | 38 ++++++++++++++++++++++++------ 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Auxiliary/DirectXTexXboxDetile.cpp b/Auxiliary/DirectXTexXboxDetile.cpp index 00fb4f8a..482b58ea 100644 --- a/Auxiliary/DirectXTexXboxDetile.cpp +++ b/Auxiliary/DirectXTexXboxDetile.cpp @@ -481,8 +481,8 @@ HRESULT Xbox::Detile( case TEX_DIMENSION_TEXTURE3D: { - if (metadata.width > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION - || metadata.height > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION + if (metadata.width > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION + || metadata.height > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION || metadata.depth > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION || metadata.mipLevels > D3D11_REQ_MIP_LEVELS || metadata.arraySize != 1) diff --git a/Auxiliary/DirectXTexXboxTile.cpp b/Auxiliary/DirectXTexXboxTile.cpp index 7a5f7c30..ecd8b5b9 100644 --- a/Auxiliary/DirectXTexXboxTile.cpp +++ b/Auxiliary/DirectXTexXboxTile.cpp @@ -444,15 +444,39 @@ HRESULT Xbox::Tile( XboxImage& xbox, XboxTileMode mode) { - if (!srcImages - || !nimages || nimages > UINT32_MAX - || metadata.width > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION - || metadata.height > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION - || metadata.depth > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION - || metadata.arraySize > D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION - || metadata.mipLevels > D3D11_REQ_MIP_LEVELS) + if (!srcImages || !nimages || nimages > UINT32_MAX) return E_INVALIDARG; + switch (metadata.dimension) + { + case TEX_DIMENSION_TEXTURE1D: + if (metadata.width > D3D11_REQ_TEXTURE1D_U_DIMENSION + || metadata.mipLevels > D3D11_REQ_MIP_LEVELS + || metadata.arraySize > D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) + return E_INVALIDARG; + break; + + case TEX_DIMENSION_TEXTURE2D: + if (metadata.width > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION + || metadata.height > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION + || metadata.mipLevels > D3D11_REQ_MIP_LEVELS + || metadata.arraySize > D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION) + return E_INVALIDARG; + break; + + case TEX_DIMENSION_TEXTURE3D: + if (metadata.width > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION + || metadata.height > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION + || metadata.depth > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION + || metadata.mipLevels > D3D11_REQ_MIP_LEVELS + || metadata.arraySize != 1) + return E_INVALIDARG; + break; + + default: + return HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED); + } + xbox.Release(); if (metadata.format == DXGI_FORMAT_R1_UNORM From 91d4dbe881c8e4de8ae908f466fdff59224da792 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Mon, 10 Feb 2025 11:25:15 -0800 Subject: [PATCH 3/6] YAML tweaks --- build/DirectXTex-GitHub-CMake-Xbox-Dev17.yml | 1 + build/DirectXTex-GitHub-GDK-Dev17.yml | 1 + build/DirectXTex-GitHub-WSL-11.yml | 3 +++ build/DirectXTex-GitHub-WSL-13.yml | 3 +++ 4 files changed, 8 insertions(+) diff --git a/build/DirectXTex-GitHub-CMake-Xbox-Dev17.yml b/build/DirectXTex-GitHub-CMake-Xbox-Dev17.yml index 1a247088..fde88d36 100644 --- a/build/DirectXTex-GitHub-CMake-Xbox-Dev17.yml +++ b/build/DirectXTex-GitHub-CMake-Xbox-Dev17.yml @@ -25,6 +25,7 @@ pr: - build/*.in - build/DirectXTex-GitHub-CMake-Xbox-Dev17.yml - DirectXTex/Shaders/CompileShaders.cmd + - Auxiliary/*Xbox* resources: repositories: diff --git a/build/DirectXTex-GitHub-GDK-Dev17.yml b/build/DirectXTex-GitHub-GDK-Dev17.yml index 56d54fed..be7eb76b 100644 --- a/build/DirectXTex-GitHub-GDK-Dev17.yml +++ b/build/DirectXTex-GitHub-GDK-Dev17.yml @@ -26,6 +26,7 @@ pr: - build/*.cmake - build/SetupBWOI.* - DirectXTex/Shaders/CompileShaders.cmd + - Auxiliary/*Xbox* resources: repositories: diff --git a/build/DirectXTex-GitHub-WSL-11.yml b/build/DirectXTex-GitHub-WSL-11.yml index efe995cb..a20e5380 100644 --- a/build/DirectXTex-GitHub-WSL-11.yml +++ b/build/DirectXTex-GitHub-WSL-11.yml @@ -24,6 +24,9 @@ pr: - build/*.cmake - build/*.in - build/DirectXTex-GitHub-WSL-11.yml + - Auxiliary/*EXR* + - Auxiliary/*JPEG* + - Auxiliary/*PNG* resources: repositories: diff --git a/build/DirectXTex-GitHub-WSL-13.yml b/build/DirectXTex-GitHub-WSL-13.yml index b872b0ff..4e783b8e 100644 --- a/build/DirectXTex-GitHub-WSL-13.yml +++ b/build/DirectXTex-GitHub-WSL-13.yml @@ -24,6 +24,9 @@ pr: - build/*.cmake - build/*.in - build/DirectXTex-GitHub-WSL-13.yml + - Auxiliary/*EXR* + - Auxiliary/*JPEG* + - Auxiliary/*PNG* resources: repositories: From 6f419d92b82322712a65b76da56e63606c23bb51 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Tue, 11 Feb 2025 09:39:36 -0800 Subject: [PATCH 4/6] Add assert --- Auxiliary/DirectXTexXboxDetile.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Auxiliary/DirectXTexXboxDetile.cpp b/Auxiliary/DirectXTexXboxDetile.cpp index 482b58ea..dc0dd54f 100644 --- a/Auxiliary/DirectXTexXboxDetile.cpp +++ b/Auxiliary/DirectXTexXboxDetile.cpp @@ -32,6 +32,8 @@ namespace const uint8_t* sptr = xbox.GetPointer(); const uint8_t* endPtr = sptr + layout.SizeBytes; + assert((nimages > 0) && (nimages > UINT32_MAX)); + for (size_t item = 0; item < nimages; ++item) { const Image* img = result[item]; From d41464d3f9f843c9fd282261b2f0376c07a1b441 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Tue, 11 Feb 2025 14:25:42 -0800 Subject: [PATCH 5/6] Code review feedback\ --- Auxiliary/DirectXTexXboxDetile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Auxiliary/DirectXTexXboxDetile.cpp b/Auxiliary/DirectXTexXboxDetile.cpp index dc0dd54f..2fde1cb9 100644 --- a/Auxiliary/DirectXTexXboxDetile.cpp +++ b/Auxiliary/DirectXTexXboxDetile.cpp @@ -32,7 +32,7 @@ namespace const uint8_t* sptr = xbox.GetPointer(); const uint8_t* endPtr = sptr + layout.SizeBytes; - assert((nimages > 0) && (nimages > UINT32_MAX)); + assert((nimages > 0) && (nimages < UINT32_MAX)); for (size_t item = 0; item < nimages; ++item) { From f26de8ed107029027b96d621407f2456f2946878 Mon Sep 17 00:00:00 2001 From: Chuck Walbourn Date: Tue, 11 Feb 2025 14:27:45 -0800 Subject: [PATCH 6/6] Code review feedback --- Auxiliary/DirectXTexXboxDetile.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Auxiliary/DirectXTexXboxDetile.cpp b/Auxiliary/DirectXTexXboxDetile.cpp index 2fde1cb9..29807839 100644 --- a/Auxiliary/DirectXTexXboxDetile.cpp +++ b/Auxiliary/DirectXTexXboxDetile.cpp @@ -32,7 +32,7 @@ namespace const uint8_t* sptr = xbox.GetPointer(); const uint8_t* endPtr = sptr + layout.SizeBytes; - assert((nimages > 0) && (nimages < UINT32_MAX)); + assert((nimages > 0) && (nimages <= UINT32_MAX)); for (size_t item = 0; item < nimages; ++item) {