diff options
author | m-holger <m-holger@kubitscheck.org> | 2023-01-04 12:17:01 +0100 |
---|---|---|
committer | Jay Berkenbilt <jberkenbilt@users.noreply.github.com> | 2023-01-07 00:42:12 +0100 |
commit | 942a2c3f689b46107538d49a67dbf74c76e672b8 (patch) | |
tree | ad5b7294b726e99b14570dad8eb0414924728e20 | |
parent | 1326ff7f79a199ce7e9bbecb1a3dab5580d20815 (diff) | |
download | qpdf-942a2c3f689b46107538d49a67dbf74c76e672b8.tar.zst |
Add new function QUtil::hex_encode_char
-rw-r--r-- | include/qpdf/QUtil.hh | 13 | ||||
-rw-r--r-- | libqpdf/QPDF_Name.cc | 2 |
2 files changed, 14 insertions, 1 deletions
diff --git a/include/qpdf/QUtil.hh b/include/qpdf/QUtil.hh index 6d9d18ae..27521a70 100644 --- a/include/qpdf/QUtil.hh +++ b/include/qpdf/QUtil.hh @@ -210,6 +210,11 @@ namespace QUtil QPDF_DLL std::string hex_encode(std::string const&); + // Returns lower-case hex-encoded version of the char including a leading + // "#". + QPDF_DLL + inline std::string hex_encode_char(char); + // Returns a string that is the result of decoding the input // string. The input string may consist of mixed case hexadecimal // digits. Any characters that are not hexadecimal digits will be @@ -583,4 +588,12 @@ QUtil::is_number(char const* p) return found_digit; } +inline std::string +QUtil::hex_encode_char(char c) +{ + static auto constexpr hexchars = "0123456789abcdef"; + return { + '#', hexchars[static_cast<unsigned char>(c) >> 4], hexchars[c & 0x0f]}; +} + #endif // QUTIL_HH diff --git a/libqpdf/QPDF_Name.cc b/libqpdf/QPDF_Name.cc index 353cf311..1587bcf4 100644 --- a/libqpdf/QPDF_Name.cc +++ b/libqpdf/QPDF_Name.cc @@ -38,7 +38,7 @@ QPDF_Name::normalizeName(std::string const& name) // invalid #. result += "#"; } else if (strchr("#()<>[]{}/%", ch) || (ch < 33) || (ch > 126)) { - result += "#" + QUtil::hex_encode(std::string(&ch, 1)); + result += QUtil::hex_encode_char(ch); } else { result += ch; } |