CodeQL recommendations (#580)

This commit is contained in:
Chuck Walbourn 2025-02-11 17:04:57 -08:00 committed by GitHub
parent cfd5f27126
commit 3e8137e481
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 99 additions and 47 deletions

View File

@ -32,7 +32,9 @@ namespace
const uint8_t* sptr = xbox.GetPointer();
const uint8_t* endPtr = sptr + layout.SizeBytes;
for (uint32_t item = 0; item < nimages; ++item)
assert((nimages > 0) && (nimages <= UINT32_MAX));
for (size_t item = 0; item < nimages; ++item)
{
const Image* img = result[item];
if (!img || !img->pixels)
@ -49,9 +51,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<uint32_t>(level), element, 0, static_cast<uint32_t>(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<uint32_t>(level), x, 0, static_cast<uint32_t>(item), 0);
#endif
if (offset == size_t(-1))
return E_FAIL;
@ -83,7 +85,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 +152,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 +166,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<uint32_t>(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<uint32_t>(item), 0);
#endif
if (offset == size_t(-1))
return E_FAIL;
@ -199,7 +201,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 +212,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 +316,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<UINT>(metadata.width);
desc.MipLevels = static_cast<UINT>(metadata.mipLevels);
@ -348,13 +355,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<const Image*> 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 +373,7 @@ HRESULT Xbox::Detile(
images.push_back(img);
}
hr = Detile1D(xbox, level, computer.Get(), layout, &images[0], images.size());
hr = Detile1D(xbox, static_cast<uint32_t>(level), computer.Get(), layout, &images[0], images.size());
}
else
{
@ -377,7 +384,7 @@ HRESULT Xbox::Detile(
return E_FAIL;
}
hr = Detile1D(xbox, level, computer.Get(), layout, &img, 1);
hr = Detile1D(xbox, static_cast<uint32_t>(level), computer.Get(), layout, &img, 1);
}
if (FAILED(hr))
@ -391,6 +398,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<UINT>(metadata.width);
desc.Height = static_cast<UINT>(metadata.height);
@ -427,13 +440,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<const Image*> 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 +458,7 @@ HRESULT Xbox::Detile(
images.push_back(img);
}
hr = Detile2D(xbox, level, computer.Get(), &images[0], images.size());
hr = Detile2D(xbox, static_cast<uint32_t>(level), computer.Get(), &images[0], images.size());
}
else
{
@ -456,7 +469,7 @@ HRESULT Xbox::Detile(
return E_FAIL;
}
hr = Detile2D(xbox, level, computer.Get(), &img, 1);
hr = Detile2D(xbox, static_cast<uint32_t>(level), computer.Get(), &img, 1);
}
if (FAILED(hr))
@ -470,6 +483,13 @@ HRESULT Xbox::Detile(
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;
XG_TEXTURE3D_DESC desc = {};
desc.Width = static_cast<UINT>(metadata.width);
desc.Height = static_cast<UINT>(metadata.height);
@ -504,10 +524,10 @@ HRESULT Xbox::Detile(
if (FAILED(hr))
return hr;
uint32_t d = static_cast<uint32_t>(metadata.depth);
auto d = static_cast<uint32_t>(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 +536,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<uint32_t>(level), computer.Get(), image.GetImages()[index]);
if (FAILED(hr))
{
image.Release();

View File

@ -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<uint32_t>(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<uint32_t>(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<uint32_t>(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<uint32_t>(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];
@ -444,15 +444,39 @@ HRESULT Xbox::Tile(
XboxImage& xbox,
XboxTileMode mode)
{
if (!srcImages
|| !nimages
|| 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
@ -533,13 +557,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<const Image*> 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 +575,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<uint32_t>(level), computer.Get(), layout, xbox);
}
else
{
@ -563,7 +587,7 @@ HRESULT Xbox::Tile(
}
const Image* images = &srcImages[index];
hr = Tile1D(&images, 1, level, computer.Get(), layout, xbox);
hr = Tile1D(&images, 1, static_cast<uint32_t>(level), computer.Get(), layout, xbox);
}
if (FAILED(hr))
@ -617,13 +641,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<const Image*> 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 +659,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<uint32_t>(level), computer.Get(), xbox);
}
else
{
@ -647,7 +671,7 @@ HRESULT Xbox::Tile(
}
const Image* images = &srcImages[index];
hr = Tile2D(&images, 1, level, computer.Get(), xbox);
hr = Tile2D(&images, 1, static_cast<uint32_t>(level), computer.Get(), xbox);
}
if (FAILED(hr))
@ -699,10 +723,10 @@ HRESULT Xbox::Tile(
if (FAILED(hr))
return hr;
uint32_t d = static_cast<uint32_t>(metadata.depth);
auto d = static_cast<uint32_t>(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 +735,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<uint32_t>(level), computer.Get(), xbox);
if (FAILED(hr))
{
xbox.Release();

View File

@ -25,6 +25,7 @@ pr:
- build/*.in
- build/DirectXTex-GitHub-CMake-Xbox-Dev17.yml
- DirectXTex/Shaders/CompileShaders.cmd
- Auxiliary/*Xbox*
resources:
repositories:

View File

@ -26,6 +26,7 @@ pr:
- build/*.cmake
- build/SetupBWOI.*
- DirectXTex/Shaders/CompileShaders.cmd
- Auxiliary/*Xbox*
resources:
repositories:

View File

@ -24,6 +24,9 @@ pr:
- build/*.cmake
- build/*.in
- build/DirectXTex-GitHub-WSL-11.yml
- Auxiliary/*EXR*
- Auxiliary/*JPEG*
- Auxiliary/*PNG*
resources:
repositories:

View File

@ -24,6 +24,9 @@ pr:
- build/*.cmake
- build/*.in
- build/DirectXTex-GitHub-WSL-13.yml
- Auxiliary/*EXR*
- Auxiliary/*JPEG*
- Auxiliary/*PNG*
resources:
repositories: