From 942a2c3f689b46107538d49a67dbf74c76e672b8 Mon Sep 17 00:00:00 2001 From: m-holger Date: Wed, 4 Jan 2023 11:17:01 +0000 Subject: [PATCH] Add new function QUtil::hex_encode_char --- include/qpdf/QUtil.hh | 13 +++++++++++++ libqpdf/QPDF_Name.cc | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) 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(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; }