zero reserved2 field before writing dds header by sahvx655-wq · Pull Request #654 · ARM-software/astc-encoder · GitHub
Skip to content

zero reserved2 field before writing dds header#654

Merged
solidpixel merged 1 commit into
ARM-software:mainfrom
sahvx655-wq:dds-header-reserved2-init
Jul 1, 2026
Merged

zero reserved2 field before writing dds header#654
solidpixel merged 1 commit into
ARM-software:mainfrom
sahvx655-wq:dds-header-reserved2-init

Conversation

@sahvx655-wq

Copy link
Copy Markdown
Contributor

store_dds_uncompressed_image sets every field of the on-stack dds_header individually, but the trailing reserved2 word is never assigned. Since the whole struct is then serialised with file.write(&hdr, sizeof(dds_header)), those four bytes come straight from uninitialised stack memory. I spotted it while auditing the header writers after the recent DDS/KTX store fixes: caps3, caps4 and the reserved1 array are all explicitly zeroed, but reserved2 sits just past caps4 and was missed. A build with -ftrivial-auto-var-init=pattern makes it obvious, the field lands in the output file as 0xAAAAAAAA.

Every uncompressed .dds we write therefore leaks four bytes of encoder stack at file offset 124, and the container is non-conformant because the spec requires that word to be zero. The fix assigns hdr.reserved2 = 0 next to the existing caps3/caps4 zeroing, keeping the field-by-field style of the function. After the change a round-tripped .dds carries a zero reserved2 and the unit tests stay green.

@solidpixel solidpixel merged commit 0397313 into ARM-software:main Jul 1, 2026
17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants