DxCapsViewer icon indicating copy to clipboard operation
DxCapsViewer copied to clipboard

Fix: Incorrect usage of sizeof (used on C string pointers)

Open Demonese opened this issue 1 year ago • 1 comments

Summary:

For const char FOO[] = "foo", FOO is a C array.

But for const char* BAR = "bar", BAR is a pointer.

sizeof(BAR) always equals pointer size.

After:

const char D3D10_NOTE[] = "Most Direct3D 10 features are required. Tool only shows optional features.";
const char D3D10_NOTE1[] = "Most Direct3D 10.1 features are required. Tool only shows optional features.";
const char D3D11_NOTE[] = "Most Direct3D 11 features are required. Tool only shows optional features.";
const char D3D11_NOTE1[] = "Most Direct3D 11.1 features are required. Tool only shows optional features.";
const char D3D11_NOTE2[] = "Most Direct3D 11.2 features are required. Tool only shows optional features.";
const char D3D11_NOTE3[] = "Most Direct3D 11.3 features are required. Tool only shows optional features.";
const char D3D11_NOTE4[] = "Most Direct3D 11.x features are required. Tool only shows optional features.";
const char _10L9_NOTE[] = "Most 10level9 features are required. Tool only shows optional features.";
const char SEE_D3D10[] = "See Direct3D 10 node for device details.";
const char SEE_D3D10_1[] = "See Direct3D 10.1 node for device details.";
const char SEE_D3D11[] = "See Direct3D 11 node for device details.";
const char SEE_D3D11_1[] = "See Direct3D 11.1 node for device details.";

const char FL_NOTE[] = "This feature summary is derived from hardware feature level";

static_assert(sizeof(D3D10_NOTE) < 80, "String too long");
static_assert(sizeof(D3D10_NOTE1) < 80, "String too long");
static_assert(sizeof(D3D11_NOTE) < 80, "String too long");
static_assert(sizeof(D3D11_NOTE1) < 80, "String too long");
static_assert(sizeof(D3D11_NOTE2) < 80, "String too long");
static_assert(sizeof(D3D11_NOTE3) < 80, "String too long");
static_assert(sizeof(D3D11_NOTE4) < 80, "String too long");
static_assert(sizeof(_10L9_NOTE) < 80, "String too long");
static_assert(sizeof(SEE_D3D10) < 80, "String too long");
static_assert(sizeof(SEE_D3D10_1) < 80, "String too long");
static_assert(sizeof(SEE_D3D11) < 80, "String too long");
static_assert(sizeof(SEE_D3D11_1) < 80, "String too long");

Before:

const char* D3D10_NOTE = "Most Direct3D 10 features are required. Tool only shows optional features.";
const char* D3D10_NOTE1 = "Most Direct3D 10.1 features are required. Tool only shows optional features.";
const char* D3D11_NOTE = "Most Direct3D 11 features are required. Tool only shows optional features.";
const char* D3D11_NOTE1 = "Most Direct3D 11.1 features are required. Tool only shows optional features.";
const char* D3D11_NOTE2 = "Most Direct3D 11.2 features are required. Tool only shows optional features.";
const char* D3D11_NOTE3 = "Most Direct3D 11.3 features are required. Tool only shows optional features.";
const char* D3D11_NOTE4 = "Most Direct3D 11.x features are required. Tool only shows optional features.";
const char* _10L9_NOTE = "Most 10level9 features are required. Tool only shows optional features.";
const char* SEE_D3D10 = "See Direct3D 10 node for device details.";
const char* SEE_D3D10_1 = "See Direct3D 10.1 node for device details.";
const char* SEE_D3D11 = "See Direct3D 11 node for device details.";
const char* SEE_D3D11_1 = "See Direct3D 11.1 node for device details.";

const char* FL_NOTE = "This feature summary is derived from hardware feature level";

static_assert(sizeof(D3D10_NOTE) < 80, "String too long");
static_assert(sizeof(D3D10_NOTE1) < 80, "String too long");
static_assert(sizeof(D3D11_NOTE) < 80, "String too long");
static_assert(sizeof(D3D11_NOTE1) < 80, "String too long");
static_assert(sizeof(D3D11_NOTE2) < 80, "String too long");
static_assert(sizeof(D3D11_NOTE3) < 80, "String too long");
static_assert(sizeof(D3D11_NOTE4) < 80, "String too long");
static_assert(sizeof(_10L9_NOTE) < 80, "String too long");
static_assert(sizeof(SEE_D3D10) < 80, "String too long");
static_assert(sizeof(SEE_D3D10_1) < 80, "String too long");
static_assert(sizeof(SEE_D3D11) < 80, "String too long");
static_assert(sizeof(SEE_D3D11_1) < 80, "String too long");

Demonese avatar Dec 26 '24 11:12 Demonese

The previous workflows failed because of vcpkg. So I rebased the branch.

Demonese avatar Feb 19 '25 01:02 Demonese