aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF_Dictionary.cc
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2024-02-10 13:03:28 +0100
committerm-holger <m-holger@kubitscheck.org>2024-02-16 11:52:44 +0100
commit431987475b392daf4094570565881e1ebfc9528a (patch)
treef0e6fc17e4abd1a6908d2b799847949b6f4cdfd7 /libqpdf/QPDF_Dictionary.cc
parente2737ab646bff6aa07ba72e0cc15cc955d9afcc0 (diff)
downloadqpdf-431987475b392daf4094570565881e1ebfc9528a.tar.zst
Add new method QPDF_Name::analyzeJSONEncoding
Provide a custom method to check whether a name is valid utf8. Integrate checking for characters that need to be escaped in JSON.
Diffstat (limited to 'libqpdf/QPDF_Dictionary.cc')
-rw-r--r--libqpdf/QPDF_Dictionary.cc31
1 files changed, 13 insertions, 18 deletions
diff --git a/libqpdf/QPDF_Dictionary.cc b/libqpdf/QPDF_Dictionary.cc
index 53d78a2b..ca7fa04a 100644
--- a/libqpdf/QPDF_Dictionary.cc
+++ b/libqpdf/QPDF_Dictionary.cc
@@ -77,15 +77,11 @@ QPDF_Dictionary::getJSON(int json_version)
if (json_version == 1) {
j.addDictionaryMember(
QPDF_Name::normalizeName(iter.first), iter.second.getJSON(json_version));
+ } else if (auto res = QPDF_Name::analyzeJSONEncoding(iter.first); res.first) {
+ j.addDictionaryMember(iter.first, iter.second.getJSON(json_version));
} else {
- bool has_8bit_chars;
- bool is_valid_utf8;
- bool is_utf16;
- QUtil::analyze_encoding(iter.first, has_8bit_chars, is_valid_utf8, is_utf16);
- std::string key = !has_8bit_chars || is_valid_utf8
- ? iter.first
- : "n:" + QPDF_Name::normalizeName(iter.first);
- j.addDictionaryMember(key, iter.second.getJSON(json_version));
+ j.addDictionaryMember(
+ "n:" + QPDF_Name::normalizeName(iter.first), iter.second.getJSON(json_version));
}
}
}
@@ -100,18 +96,17 @@ QPDF_Dictionary::writeJSON(int json_version, JSON::Writer& p)
if (!iter.second.isNull()) {
p.writeNext();
if (json_version == 1) {
- p << "\"" << JSON::Writer::encode_string(QPDF_Name::normalizeName(iter.first)) << "\": ";
- } else {
- bool has_8bit_chars;
- bool is_valid_utf8;
- bool is_utf16;
- QUtil::analyze_encoding(iter.first, has_8bit_chars, is_valid_utf8, is_utf16);
- if (!has_8bit_chars || is_valid_utf8) {
- p << "\"" << JSON::Writer::encode_string(iter.first) << "\": ";
+ p << "\"" << JSON::Writer::encode_string(QPDF_Name::normalizeName(iter.first))
+ << "\": ";
+ } else if (auto res = QPDF_Name::analyzeJSONEncoding(iter.first); res.first) {
+ if (res.second) {
+ p << "\"" << iter.first << "\": ";
} else {
- p << "\"n:" << JSON::Writer::encode_string(QPDF_Name::normalizeName(iter.first))
- << "\": ";
+ p << "\"" << JSON::Writer::encode_string(iter.first) << "\": ";
}
+ } else {
+ p << "\"n:" << JSON::Writer::encode_string(QPDF_Name::normalizeName(iter.first))
+ << "\": ";
}
iter.second.writeJSON(json_version, p);
}