2
1
mirror of https://github.com/qpdf/qpdf.git synced 2024-12-23 03:18:59 +00:00

Allow testing for subtype without specifying type in isDictionaryOfType etc

Accept empty string as type parameter in
QPDFObjectHandle::isDictionaryOfType and isStreamOfType
to allow for dictionaries with optional type.
This commit is contained in:
m-holger 2022-01-26 01:28:53 +00:00 committed by Jay Berkenbilt
parent 823926f8bf
commit 710d2e54f0
3 changed files with 7 additions and 12 deletions

View File

@ -507,15 +507,9 @@ bool
QPDFObjectHandle::isDictionaryOfType(std::string const& type, QPDFObjectHandle::isDictionaryOfType(std::string const& type,
std::string const& subtype) std::string const& subtype)
{ {
if (isDictionary() && getKey("/Type").isNameAndEquals(type)) return isDictionary() &&
{ (type.empty() || getKey("/Type").isNameAndEquals(type)) &&
return (subtype == "") || (subtype.empty() || getKey("/Subtype").isNameAndEquals(subtype));
(hasKey("/Subtype") && getKey("/Subtype").isNameAndEquals(subtype));
}
else
{
return false;
}
} }
bool bool

View File

@ -724,7 +724,7 @@ static void test25(char const* infile,
assert(qpdf_oh_is_dictionary_of_type(qpdf, new_dict, "/Test", "/Marvin")); assert(qpdf_oh_is_dictionary_of_type(qpdf, new_dict, "/Test", "/Marvin"));
assert(! qpdf_oh_is_dictionary_of_type(qpdf, new_dict, "/Test2", "")); assert(! qpdf_oh_is_dictionary_of_type(qpdf, new_dict, "/Test2", ""));
assert(! qpdf_oh_is_dictionary_of_type(qpdf, new_dict, "/Test", "/M")); assert(! qpdf_oh_is_dictionary_of_type(qpdf, new_dict, "/Test", "/M"));
assert(! qpdf_oh_is_dictionary_of_type(qpdf, new_dict, "", "")); assert(qpdf_oh_is_dictionary_of_type(qpdf, new_dict, "", ""));
qpdf_oh new_array = qpdf_oh_new_array(qpdf); qpdf_oh new_array = qpdf_oh_new_array(qpdf);
qpdf_oh_replace_or_remove_key( qpdf_oh_replace_or_remove_key(
qpdf, new_dict, "/A", qpdf_oh_new_null(qpdf)); qpdf, new_dict, "/A", qpdf_oh_new_null(qpdf));

View File

@ -3110,11 +3110,12 @@ static void test_82(QPDF& pdf, char const* arg2)
assert(dict.isDictionaryOfType( "/Test", "")); assert(dict.isDictionaryOfType( "/Test", ""));
assert(dict.isDictionaryOfType("/Test")); assert(dict.isDictionaryOfType("/Test"));
assert(dict.isDictionaryOfType("/Test", "/Marvin")); assert(dict.isDictionaryOfType("/Test", "/Marvin"));
assert(dict.isDictionaryOfType("", "/Marvin"));
assert(dict.isDictionaryOfType("", ""));
assert(! dict.isDictionaryOfType("/Test2", "")); assert(! dict.isDictionaryOfType("/Test2", ""));
assert(! dict.isDictionaryOfType("/Test2", "/Marvin")); assert(! dict.isDictionaryOfType("/Test2", "/Marvin"));
assert(! dict.isDictionaryOfType("/Test", "/M")); assert(! dict.isDictionaryOfType("/Test", "/M"));
assert(! dict.isDictionaryOfType("", "/Marvin")); assert(! name.isDictionaryOfType("", ""));
assert(! dict.isDictionaryOfType("", ""));
dict = QPDFObjectHandle::parse("<</A 1 /Type null /Subtype /Marvin>>"); dict = QPDFObjectHandle::parse("<</A 1 /Type null /Subtype /Marvin>>");
assert(! dict.isDictionaryOfType("/Test")); assert(! dict.isDictionaryOfType("/Test"));
dict = QPDFObjectHandle::parse("<</A 1 /Type (Test) /Subtype /Marvin>>"); dict = QPDFObjectHandle::parse("<</A 1 /Type (Test) /Subtype /Marvin>>");