2
1
mirror of https://github.com/qpdf/qpdf.git synced 2025-01-03 15:17:29 +00:00

Fix bounds error in utf16_to_utf8 conversion

This commit is contained in:
Jay Berkenbilt 2019-06-21 17:36:59 -04:00
parent 2320714339
commit a35d4ce9cc
3 changed files with 7 additions and 1 deletions

View File

@ -1955,7 +1955,7 @@ QUtil::utf16_to_utf8(std::string const& val)
} }
// If the string has an odd number of bytes, the last byte is // If the string has an odd number of bytes, the last byte is
// ignored. // ignored.
for (size_t i = start; i < len; i += 2) for (size_t i = start; i + 1 < len; i += 2)
{ {
// Convert from UTF16-BE. If we get a malformed // Convert from UTF16-BE. If we get a malformed
// codepoint, this code will generate incorrect output // codepoint, this code will generate incorrect output

View File

@ -53,6 +53,8 @@ HAGOOGAMAGOOGLE: 0
0xdead -> ff fd 0xdead -> ff fd
0x7fffffff -> ff fd 0x7fffffff -> ff fd
0x80000000 -> ff fd 0x80000000 -> ff fd
π
π
---- utf8_to_ascii ---- utf8_to_ascii
¿Does π have fingers? ¿Does π have fingers?
?Does ? have fingers? ?Does ? have fingers?

View File

@ -238,6 +238,10 @@ void to_utf16_test()
print_utf16(0xdeadUL); print_utf16(0xdeadUL);
print_utf16(0x7fffffffUL); print_utf16(0x7fffffffUL);
print_utf16(0x80000000UL); print_utf16(0x80000000UL);
std::string s(QUtil::utf8_to_utf16("\xcf\x80"));
std::cout << QUtil::utf16_to_utf8(s) << std::endl;
std::cout << QUtil::utf16_to_utf8(s + ".") << std::endl;
} }
void utf8_to_ascii_test() void utf8_to_ascii_test()