aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2021-01-11 16:50:39 +0100
committerJay Berkenbilt <ejb@ql.org>2021-01-11 16:50:44 +0100
commitfc88837d4b04c8b766c973206303c3d3af334b92 (patch)
tree00e749865f3f58d0eaf353becfeedf837acade5c /libqpdf
parent6fe7b704c7dfb517e4de20fb25536fab1de83d56 (diff)
downloadqpdf-fc88837d4b04c8b766c973206303c3d3af334b92.tar.zst
Treat /EmbeddedFiles as a proper name tree
If we ever had an encrypted file with different filters for attachments and either the /EmbeddedFiles name tree was deep or some of the file specs didn't have /Type, we would have overlooked those as attachment streams. The code now properly handles /EmbeddedFiles as a name tree.
Diffstat (limited to 'libqpdf')
-rw-r--r--libqpdf/QPDF.cc18
1 files changed, 7 insertions, 11 deletions
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index 34f15706..647e94c2 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -18,6 +18,7 @@
#include <qpdf/FileInputSource.hh>
#include <qpdf/BufferInputSource.hh>
#include <qpdf/OffsetInputSource.hh>
+#include <qpdf/QPDFNameTreeObjectHelper.hh>
#include <qpdf/QPDFExc.hh>
#include <qpdf/QPDF_Null.hh>
@@ -3004,22 +3005,17 @@ QPDF::findAttachmentStreams()
{
return;
}
- QPDFObjectHandle embeddedFiles = names.getKey("/EmbeddedFiles");
- if (! embeddedFiles.isDictionary())
+ QPDFObjectHandle embedded_files = names.getKey("/EmbeddedFiles");
+ if (! embedded_files.isDictionary())
{
return;
}
- names = embeddedFiles.getKey("/Names");
- if (! names.isArray())
+ QPDFNameTreeObjectHelper ef_tree(embedded_files);
+ auto ef_tree_map = ef_tree.getAsMap();
+ for (auto& i: ef_tree_map)
{
- return;
- }
- for (int i = 0; i < names.getArrayNItems(); ++i)
- {
- QPDFObjectHandle item = names.getArrayItem(i);
+ QPDFObjectHandle item = i.second;
if (item.isDictionary() &&
- item.getKey("/Type").isName() &&
- (item.getKey("/Type").getName() == "/Filespec") &&
item.getKey("/EF").isDictionary() &&
item.getKey("/EF").getKey("/F").isStream())
{