summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2022-02-06 03:13:04 +0100
committerJay Berkenbilt <jberkenbilt@users.noreply.github.com>2022-02-06 17:21:15 +0100
commit83710603402229090dd5b1eefdebed044efe8d87 (patch)
treef11693ed7d9f2dc0ea57bd712d362481b730ce4b
parent2ed5f49a795d91faddc723bbbb561e485094e23a (diff)
downloadqpdf-83710603402229090dd5b1eefdebed044efe8d87.tar.zst
Add method QPDFObjectHandle::getKeyIfDict
-rw-r--r--include/qpdf/QPDFObjectHandle.hh2
-rw-r--r--libqpdf/QPDFObjectHandle.cc6
-rw-r--r--qpdf/qtest/qpdf/object-types-os.out2
-rw-r--r--qpdf/qtest/qpdf/object-types.out2
-rw-r--r--qpdf/test_driver.cc3
5 files changed, 15 insertions, 0 deletions
diff --git a/include/qpdf/QPDFObjectHandle.hh b/include/qpdf/QPDFObjectHandle.hh
index 262a84b8..59e58544 100644
--- a/include/qpdf/QPDFObjectHandle.hh
+++ b/include/qpdf/QPDFObjectHandle.hh
@@ -810,6 +810,8 @@ class QPDFObjectHandle
// returned.
QPDF_DLL
QPDFObjectHandle getKey(std::string const&);
+ QPDF_DLL
+ QPDFObjectHandle getKeyIfDict(std::string const&);
// Return all keys. Keys with null values are treated as if
// they are not present. This is as per the PDF spec.
QPDF_DLL
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc
index 2e9bf48b..eeb17fae 100644
--- a/libqpdf/QPDFObjectHandle.cc
+++ b/libqpdf/QPDFObjectHandle.cc
@@ -1150,6 +1150,12 @@ QPDFObjectHandle::getKey(std::string const& key)
return result;
}
+QPDFObjectHandle
+QPDFObjectHandle::getKeyIfDict(std::string const& key)
+{
+ return isNull() ? newNull() : getKey(key);
+}
+
std::set<std::string>
QPDFObjectHandle::getKeys()
{
diff --git a/qpdf/qtest/qpdf/object-types-os.out b/qpdf/qtest/qpdf/object-types-os.out
index 26fcf369..5aedc1ee 100644
--- a/qpdf/qtest/qpdf/object-types-os.out
+++ b/qpdf/qtest/qpdf/object-types-os.out
@@ -20,6 +20,7 @@ WARNING: object-types-os.pdf object stream 1, object 7 0 at offset 429: operatio
WARNING: object-types-os.pdf object stream 1, object 7 0 at offset 429: operation for dictionary attempted on object of type integer: ignoring key removal/replacement request
WARNING: object-types-os.pdf object stream 1, object 7 0 at offset 429: operation for dictionary attempted on object of type integer: ignoring key replacement request
WARNING: object-types-os.pdf object stream 1, object 7 0 at offset 429: operation for dictionary attempted on object of type integer: returning null for attempted key retrieval
+WARNING: object-types-os.pdf object stream 1, object 7 0 at offset 429: operation for dictionary attempted on object of type integer: returning null for attempted key retrieval
WARNING: object-types-os.pdf object stream 1, object 7 0 at offset 429: operation for inlineimage attempted on object of type integer: returning empty data
WARNING: object-types-os.pdf object stream 1, object 7 0 at offset 362: operation for integer attempted on object of type dictionary: returning 0
WARNING: object-types-os.pdf object stream 1, object 7 0 at offset 429: operation for name attempted on object of type integer: returning dummy name
@@ -32,6 +33,7 @@ One error
WARNING: object-types-os.pdf object stream 1, object 7 0 at offset 385: operation for string attempted on object of type name: returning empty string
One error
WARNING: object-types-os.pdf object stream 1, object 7 0 at offset 362 -> dictionary key /Quack: operation for string attempted on object of type null: returning empty string
+WARNING: object-types-os.pdf object stream 1, object 7 0 at offset 362 -> dictionary key /Quack: operation for string attempted on object of type null: returning empty string
Two errors
WARNING: object-types-os.pdf object stream 1, object 7 0 at offset 384: returning null for out of bounds array access
WARNING: object-types-os.pdf object stream 1, object 7 0 at offset 384 -> null returned from invalid array access: operation for string attempted on object of type null: returning empty string
diff --git a/qpdf/qtest/qpdf/object-types.out b/qpdf/qtest/qpdf/object-types.out
index b707a957..01a8e7c7 100644
--- a/qpdf/qtest/qpdf/object-types.out
+++ b/qpdf/qtest/qpdf/object-types.out
@@ -20,6 +20,7 @@ WARNING: object-types.pdf, object 8 0 at offset 669: operation for dictionary at
WARNING: object-types.pdf, object 8 0 at offset 669: operation for dictionary attempted on object of type integer: ignoring key removal/replacement request
WARNING: object-types.pdf, object 8 0 at offset 669: operation for dictionary attempted on object of type integer: ignoring key replacement request
WARNING: object-types.pdf, object 8 0 at offset 669: operation for dictionary attempted on object of type integer: returning null for attempted key retrieval
+WARNING: object-types.pdf, object 8 0 at offset 669: operation for dictionary attempted on object of type integer: returning null for attempted key retrieval
WARNING: object-types.pdf, object 8 0 at offset 669: operation for inlineimage attempted on object of type integer: returning empty data
WARNING: object-types.pdf, object 8 0 at offset 687: operation for integer attempted on object of type dictionary: returning 0
WARNING: object-types.pdf, object 8 0 at offset 669: operation for name attempted on object of type integer: returning dummy name
@@ -32,6 +33,7 @@ One error
WARNING: object-types.pdf, object 8 0 at offset 724: operation for string attempted on object of type name: returning empty string
One error
WARNING: object-types.pdf, object 8 0 at offset 687 -> dictionary key /Quack: operation for string attempted on object of type null: returning empty string
+WARNING: object-types.pdf, object 8 0 at offset 687 -> dictionary key /Quack: operation for string attempted on object of type null: returning empty string
Two errors
WARNING: object-types.pdf, object 8 0 at offset 717: returning null for out of bounds array access
WARNING: object-types.pdf, object 8 0 at offset 717 -> null returned from invalid array access: operation for string attempted on object of type null: returning empty string
diff --git a/qpdf/test_driver.cc b/qpdf/test_driver.cc
index 2031313a..75fcb29a 100644
--- a/qpdf/test_driver.cc
+++ b/qpdf/test_driver.cc
@@ -1568,6 +1568,8 @@ static void test_42(QPDF& pdf, char const* arg2)
integer.replaceOrRemoveKey("/Potato", null);
integer.replaceOrRemoveKey("/Potato", QPDFObjectHandle::newInteger(1));
integer.replaceKey("/Potato", QPDFObjectHandle::newInteger(1));
+ null.getKeyIfDict("/Integer").getKeyIfDict("/Potato").assertNull();
+ qtest.getKey("/Integer").getKeyIfDict("/Potato");
qtest.getKey("/Integer").getKey("/Potato");
assert(integer.getInlineImageValue().empty());
assert(0 == dictionary.getIntValue());
@@ -1582,6 +1584,7 @@ static void test_42(QPDF& pdf, char const* arg2)
assert(array.getArrayItem(0).getStringValue().empty());
std::cerr << "One error\n";
assert(dictionary.getKey("/Quack").getStringValue().empty());
+ assert(dictionary.getKeyIfDict("/Quack").getStringValue().empty());
assert(array.getArrayItem(1).isDictionary());
assert(array.getArrayItem(1).getKey("/K").isArray());
assert(array.getArrayItem(1).getKey("/K").getArrayItem(0).isName());