Commit 8eca9d8fd988d6834f3d59554277ff1d9f05d8c9

Authored by m-holger
Committed by Jay Berkenbilt
1 parent 07db3200

Fix QPDFObjectHandle::isOrHasName

Ensure isOrHasName returns true if object is an array and the name is
present anywhere in the array.
libqpdf/QPDFObjectHandle.cc
@@ -1055,9 +1055,21 @@ QPDFObjectHandle::getDictAsMap() @@ -1055,9 +1055,21 @@ QPDFObjectHandle::getDictAsMap()
1055 bool 1055 bool
1056 QPDFObjectHandle::isOrHasName(std::string const& value) 1056 QPDFObjectHandle::isOrHasName(std::string const& value)
1057 { 1057 {
1058 - return isNameAndEquals(value) ||  
1059 - (isArray() && (getArrayNItems() > 0) &&  
1060 - getArrayItem(0).isNameAndEquals(value)); 1058 + if (isNameAndEquals(value))
  1059 + {
  1060 + return true;
  1061 + }
  1062 + else if (isArray())
  1063 + {
  1064 + for (auto& item: aitems())
  1065 + {
  1066 + if (item.isNameAndEquals(value))
  1067 + {
  1068 + return true;
  1069 + }
  1070 + }
  1071 + }
  1072 + return false;
1061 } 1073 }
1062 1074
1063 void 1075 void
qpdf/test_driver.cc
@@ -3128,6 +3128,15 @@ static void test_82(QPDF& pdf, char const* arg2) @@ -3128,6 +3128,15 @@ static void test_82(QPDF& pdf, char const* arg2)
3128 assert(stream.isStreamOfType("/ObjStm")); 3128 assert(stream.isStreamOfType("/ObjStm"));
3129 assert(! stream.isStreamOfType("/Test")); 3129 assert(! stream.isStreamOfType("/Test"));
3130 assert(! pdf.getObjectByID(2,0).isStreamOfType("/Pages")); 3130 assert(! pdf.getObjectByID(2,0).isStreamOfType("/Pages"));
  3131 + auto array = QPDFObjectHandle::parse("[/Blah /Blaah /Blaaah]");
  3132 + assert(array.isOrHasName("/Blah"));
  3133 + assert(array.isOrHasName("/Blaaah"));
  3134 + assert(! array.isOrHasName("/Blaaaah"));
  3135 + assert(array.getArrayItem(0).isOrHasName("/Blah"));
  3136 + assert(! array.getArrayItem(1).isOrHasName("/Blah"));
  3137 + array = QPDFObjectHandle::parse("[]");
  3138 + assert(! array.isOrHasName("/Blah"));
  3139 + assert(! str.isOrHasName("/Marvin"));
3131 } 3140 }
3132 3141
3133 void runtest(int n, char const* filename1, char const* arg2) 3142 void runtest(int n, char const* filename1, char const* arg2)