diff options
author | m-holger <m-holger@kubitscheck.org> | 2024-02-10 13:03:28 +0100 |
---|---|---|
committer | m-holger <m-holger@kubitscheck.org> | 2024-02-16 11:52:44 +0100 |
commit | 431987475b392daf4094570565881e1ebfc9528a (patch) | |
tree | f0e6fc17e4abd1a6908d2b799847949b6f4cdfd7 /libqpdf/QPDF_Dictionary.cc | |
parent | e2737ab646bff6aa07ba72e0cc15cc955d9afcc0 (diff) | |
download | qpdf-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.cc | 31 |
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); } |