Fix two out-of-bounds read issues when handling truncated UTF-8 input (#1005)
authorfrankslin <frankslin@users.noreply.github.com>
Tue, 13 Jan 2026 00:51:38 +0000 (16:51 -0800)
committerAdrian Bunk <bunk@debian.org>
Sat, 20 Jun 2026 16:41:39 +0000 (19:41 +0300)
commitf088d8adbde428dd21699925e33fba2befcbe122
tree5711a99ff0910f31415d58fe67e6f8f6279b738a
parent96d1c0879104367e1371f34559712f51d27f6ca3
Fix two out-of-bounds read issues when handling truncated UTF-8 input (#1005)

Two independent out-of-bounds read issues were identified in OpenCC's UTF-8
processing logic when handling malformed or truncated UTF-8 sequences.

1) MaxMatchSegmentation:
   NextCharLength() could return a value larger than the remaining input size.
   The previous logic subtracted this value from a size_t length counter,
   potentially causing underflow and subsequent out-of-bounds reads.

2) Conversion:
   Similar length handling could allow reads past the end of the input buffer
   during dictionary matching, potentially propagating unintended bytes to the
   conversion output.

This patch fixes both issues by:
- Explicitly tracking the end of the input buffer
- Recomputing remaining length on each iteration
- Clamping matched character and key lengths to the remaining buffer size
- Preventing reads past the null terminator

The changes preserve existing behavior for valid UTF-8 input and add test
coverage for truncated UTF-8 sequences.

These issues may have security implications when processing untrusted input
and are classified as heap out-of-bounds reads (CWE-125).

Co-authored-by: Claude <noreply@anthropic.com>
Gbp-Pq: Name 0001-Fix-two-out-of-bounds-read-issues-when-handling-trun.patch
src/Conversion.cpp
src/ConversionTest.cpp
src/MaxMatchSegmentation.cpp
src/MaxMatchSegmentationTest.cpp