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
6 changed files with 99 additions and 47 deletions

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();