Fix buffer overflow in ForceAscii when processing unaligned pointers #9
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
There is a bug in
ForceAscii()at line 208 ofsrc/nbytes.cppthat causes a heap/stack buffer overflow when the source pointer is unaligned.Root Cause
When
srcis unaligned (src_unalign > 0) and bothsrcanddsthave the same alignment offset, the code calculates:The variable
unalignrepresents the number of bytes processed to align the pointers, butlenis incorrectly decremented bysrc_unaligninstead ofunalign.On a 64-bit system (
bytes_per_word = 8), ifsrc_unalign = 2:unalign = 8 - 2 = 6bytes are processedlenis only decremented by 2 instead of 6len4 bytes larger than the actual remaining dataFix
Change line 208 from:
to:
How to Reproduce
Build with AddressSanitizer and run the test:
Test case:
ASAN output: