Skip to content

Fix misaligned memory access in UTF-16/UTF-32 buffer conversion#699

Open
MarkLee131 wants to merge 1 commit intozeux:masterfrom
MarkLee131:master
Open

Fix misaligned memory access in UTF-16/UTF-32 buffer conversion#699
MarkLee131 wants to merge 1 commit intozeux:masterfrom
MarkLee131:master

Conversation

@MarkLee131
Copy link
Copy Markdown

Fix #698:
convert_buffer_generic() casts the input void* directly to uint16_t*/uint32_t* without checking alignment. When the buffer is not naturally aligned, this is undefined behavior and crashes on strict-alignment architectures (e.g. SIGBUS on some ARM configs).

Fix by copying to an aligned temporary buffer when misalignment is detected. The copy only happens for misaligned inputs, so there is no overhead in the common case. Uses the existing auto_deleter RAII pattern already used elsewhere in the codebase.

Similar to the SPARC64 alignment fix in v1.7 (commit bd7a8fa).

convert_buffer_generic() casts the input void* directly to
uint16_t*/uint32_t* without checking alignment. When the buffer
is not naturally aligned, this is undefined behavior and crashes
on strict-alignment architectures (e.g. SIGBUS on some ARM configs).

Fix by copying to an aligned temporary buffer when misalignment is
detected. The copy only happens for misaligned inputs, so there is
no overhead in the common case. Uses the existing auto_deleter RAII
pattern already used elsewhere in the codebase.

Similar to the SPARC64 alignment fix in v1.7 (commit bd7a8fa).
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.

Misaligned memory access in UTF-16/UTF-32 decoding (UB, crashes on strict-alignment archs)

1 participant