Skip to content

Commit 3e8137e

Browse files
authored
CodeQL recommendations (#580)
1 parent cfd5f27 commit 3e8137e

6 files changed

+99
-47
lines changed

Auxiliary/DirectXTexXboxDetile.cpp

+40-20
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ namespace
3232
const uint8_t* sptr = xbox.GetPointer();
3333
const uint8_t* endPtr = sptr + layout.SizeBytes;
3434

35-
for (uint32_t item = 0; item < nimages; ++item)
35+
assert((nimages > 0) && (nimages <= UINT32_MAX));
36+
37+
for (size_t item = 0; item < nimages; ++item)
3638
{
3739
const Image* img = result[item];
3840
if (!img || !img->pixels)
@@ -49,9 +51,9 @@ namespace
4951
{
5052
#if defined(_GAMING_XBOX_SCARLETT) || defined(_USE_SCARLETT)
5153
const UINT64 element = (packed) ? (x >> 1) : x;
52-
const size_t offset = computer->GetTexelElementOffsetBytes(0, level, element, 0, item, 0, nullptr);
54+
const size_t offset = computer->GetTexelElementOffsetBytes(0, static_cast<uint32_t>(level), element, 0, static_cast<uint32_t>(item), 0, nullptr);
5355
#else
54-
const size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, item, 0);
56+
const size_t offset = computer->GetTexelElementOffsetBytes(0, static_cast<uint32_t>(level), x, 0, static_cast<uint32_t>(item), 0);
5557
#endif
5658
if (offset == size_t(-1))
5759
return E_FAIL;
@@ -83,7 +85,7 @@ namespace
8385
_In_reads_(nimages) const Image** result,
8486
size_t nimages)
8587
{
86-
if (!nimages)
88+
if (!nimages || nimages > UINT32_MAX)
8789
return E_INVALIDARG;
8890

8991
if (!xbox.GetPointer() || !computer || !result || !result[0])
@@ -150,7 +152,7 @@ namespace
150152
return E_FAIL;
151153

152154
// Perform detiling
153-
for (uint32_t item = 0; item < nimages; ++item)
155+
for (size_t item = 0; item < nimages; ++item)
154156
{
155157
const Image* img = result[item];
156158
if (!img || !img->pixels)
@@ -164,9 +166,9 @@ namespace
164166
for (size_t x = 0; x < img->width; ++x)
165167
{
166168
#if defined(_GAMING_XBOX_SCARLETT) || defined(_USE_SCARLETT)
167-
size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, item, 0, nullptr);
169+
size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, static_cast<uint32_t>(item), 0, nullptr);
168170
#else
169-
size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, item, 0);
171+
size_t offset = computer->GetTexelElementOffsetBytes(0, level, x, 0, static_cast<uint32_t>(item), 0);
170172
#endif
171173
if (offset == size_t(-1))
172174
return E_FAIL;
@@ -199,7 +201,7 @@ namespace
199201
_In_reads_(nimages) const Image** result,
200202
size_t nimages)
201203
{
202-
if (!nimages)
204+
if (!nimages || nimages > UINT32_MAX)
203205
return E_INVALIDARG;
204206

205207
if (!xbox.GetPointer() || !computer || !result || !result[0])
@@ -210,7 +212,7 @@ namespace
210212
uint8_t* baseAddr = xbox.GetPointer();
211213
const auto& metadata = xbox.GetMetadata();
212214

213-
for (uint32_t item = 0; item < nimages; ++item)
215+
for (size_t item = 0; item < nimages; ++item)
214216
{
215217
const Image* img = result[item];
216218
if (!img || !img->pixels)
@@ -314,6 +316,11 @@ HRESULT Xbox::Detile(
314316
{
315317
case TEX_DIMENSION_TEXTURE1D:
316318
{
319+
if (metadata.width > D3D11_REQ_TEXTURE1D_U_DIMENSION
320+
|| metadata.mipLevels > D3D11_REQ_MIP_LEVELS
321+
|| metadata.arraySize > D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION)
322+
return E_INVALIDARG;
323+
317324
XG_TEXTURE1D_DESC desc = {};
318325
desc.Width = static_cast<UINT>(metadata.width);
319326
desc.MipLevels = static_cast<UINT>(metadata.mipLevels);
@@ -348,13 +355,13 @@ HRESULT Xbox::Detile(
348355
if (FAILED(hr))
349356
return hr;
350357

351-
for (uint32_t level = 0; level < metadata.mipLevels; ++level)
358+
for (size_t level = 0; level < metadata.mipLevels; ++level)
352359
{
353360
if (metadata.arraySize > 1)
354361
{
355362
std::vector<const Image*> images;
356363
images.reserve(metadata.arraySize);
357-
for (uint32_t item = 0; item < metadata.arraySize; ++item)
364+
for (size_t item = 0; item < metadata.arraySize; ++item)
358365
{
359366
const Image* img = image.GetImage(level, item, 0);
360367
if (!img)
@@ -366,7 +373,7 @@ HRESULT Xbox::Detile(
366373
images.push_back(img);
367374
}
368375

369-
hr = Detile1D(xbox, level, computer.Get(), layout, &images[0], images.size());
376+
hr = Detile1D(xbox, static_cast<uint32_t>(level), computer.Get(), layout, &images[0], images.size());
370377
}
371378
else
372379
{
@@ -377,7 +384,7 @@ HRESULT Xbox::Detile(
377384
return E_FAIL;
378385
}
379386

380-
hr = Detile1D(xbox, level, computer.Get(), layout, &img, 1);
387+
hr = Detile1D(xbox, static_cast<uint32_t>(level), computer.Get(), layout, &img, 1);
381388
}
382389

383390
if (FAILED(hr))
@@ -391,6 +398,12 @@ HRESULT Xbox::Detile(
391398

392399
case TEX_DIMENSION_TEXTURE2D:
393400
{
401+
if (metadata.width > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION
402+
|| metadata.height > D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION
403+
|| metadata.mipLevels > D3D11_REQ_MIP_LEVELS
404+
|| metadata.arraySize > D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION)
405+
return E_INVALIDARG;
406+
394407
XG_TEXTURE2D_DESC desc = {};
395408
desc.Width = static_cast<UINT>(metadata.width);
396409
desc.Height = static_cast<UINT>(metadata.height);
@@ -427,13 +440,13 @@ HRESULT Xbox::Detile(
427440
if (FAILED(hr))
428441
return hr;
429442

430-
for (uint32_t level = 0; level < metadata.mipLevels; ++level)
443+
for (size_t level = 0; level < metadata.mipLevels; ++level)
431444
{
432445
if (metadata.arraySize > 1)
433446
{
434447
std::vector<const Image*> images;
435448
images.reserve(metadata.arraySize);
436-
for (uint32_t item = 0; item < metadata.arraySize; ++item)
449+
for (size_t item = 0; item < metadata.arraySize; ++item)
437450
{
438451
const Image* img = image.GetImage(level, item, 0);
439452
if (!img)
@@ -445,7 +458,7 @@ HRESULT Xbox::Detile(
445458
images.push_back(img);
446459
}
447460

448-
hr = Detile2D(xbox, level, computer.Get(), &images[0], images.size());
461+
hr = Detile2D(xbox, static_cast<uint32_t>(level), computer.Get(), &images[0], images.size());
449462
}
450463
else
451464
{
@@ -456,7 +469,7 @@ HRESULT Xbox::Detile(
456469
return E_FAIL;
457470
}
458471

459-
hr = Detile2D(xbox, level, computer.Get(), &img, 1);
472+
hr = Detile2D(xbox, static_cast<uint32_t>(level), computer.Get(), &img, 1);
460473
}
461474

462475
if (FAILED(hr))
@@ -470,6 +483,13 @@ HRESULT Xbox::Detile(
470483

471484
case TEX_DIMENSION_TEXTURE3D:
472485
{
486+
if (metadata.width > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION
487+
|| metadata.height > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION
488+
|| metadata.depth > D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION
489+
|| metadata.mipLevels > D3D11_REQ_MIP_LEVELS
490+
|| metadata.arraySize != 1)
491+
return E_INVALIDARG;
492+
473493
XG_TEXTURE3D_DESC desc = {};
474494
desc.Width = static_cast<UINT>(metadata.width);
475495
desc.Height = static_cast<UINT>(metadata.height);
@@ -504,10 +524,10 @@ HRESULT Xbox::Detile(
504524
if (FAILED(hr))
505525
return hr;
506526

507-
uint32_t d = static_cast<uint32_t>(metadata.depth);
527+
auto d = static_cast<uint32_t>(metadata.depth);
508528

509529
size_t index = 0;
510-
for (uint32_t level = 0; level < metadata.mipLevels; ++level)
530+
for (size_t level = 0; level < metadata.mipLevels; ++level)
511531
{
512532
if ((index + d) > image.GetImageCount())
513533
{
@@ -516,7 +536,7 @@ HRESULT Xbox::Detile(
516536
}
517537

518538
// Relies on the fact that slices are contiguous
519-
hr = Detile3D(xbox, level, computer.Get(), image.GetImages()[index]);
539+
hr = Detile3D(xbox, static_cast<uint32_t>(level), computer.Get(), image.GetImages()[index]);
520540
if (FAILED(hr))
521541
{
522542
image.Release();

0 commit comments

Comments
 (0)