aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2023-01-04 12:17:01 +0100
committerJay Berkenbilt <jberkenbilt@users.noreply.github.com>2023-01-07 00:42:12 +0100
commit942a2c3f689b46107538d49a67dbf74c76e672b8 (patch)
treead5b7294b726e99b14570dad8eb0414924728e20
parent1326ff7f79a199ce7e9bbecb1a3dab5580d20815 (diff)
downloadqpdf-942a2c3f689b46107538d49a67dbf74c76e672b8.tar.zst
Add new function QUtil::hex_encode_char
-rw-r--r--include/qpdf/QUtil.hh13
-rw-r--r--libqpdf/QPDF_Name.cc2
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;
}