summaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFObjectHandle.cc
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2013-03-03 21:48:31 +0100
committerJay Berkenbilt <ejb@ql.org>2013-03-05 19:35:46 +0100
commit119f2a4b684aae7cec8841412a5fc89bcbae404d (patch)
tree46b9247b59b4f9b07ecae4b14991f4840db9a89e /libqpdf/QPDFObjectHandle.cc
parent7be97b3e80bdb856c9d1fe720f9ee14a8063b5fa (diff)
downloadqpdf-119f2a4b684aae7cec8841412a5fc89bcbae404d.tar.zst
Add method to terminate content stream parsing
Diffstat (limited to 'libqpdf/QPDFObjectHandle.cc')
-rw-r--r--libqpdf/QPDFObjectHandle.cc19
1 files changed, 18 insertions, 1 deletions
diff --git a/libqpdf/QPDFObjectHandle.cc b/libqpdf/QPDFObjectHandle.cc
index e6f53d08..0c6b0a9d 100644
--- a/libqpdf/QPDFObjectHandle.cc
+++ b/libqpdf/QPDFObjectHandle.cc
@@ -23,6 +23,16 @@
#include <stdlib.h>
#include <ctype.h>
+class TerminateParsing
+{
+};
+
+void
+QPDFObjectHandle::ParserCallbacks::terminateParsing()
+{
+ throw TerminateParsing();
+}
+
QPDFObjectHandle::QPDFObjectHandle() :
initialized(false),
objid(0),
@@ -728,7 +738,14 @@ QPDFObjectHandle::parseContentStream(QPDFObjectHandle stream_or_array,
throw std::logic_error(
"QPDFObjectHandle: parseContentStream called on non-stream");
}
- parseContentStream_internal(stream, callbacks);
+ try
+ {
+ parseContentStream_internal(stream, callbacks);
+ }
+ catch (TerminateParsing&)
+ {
+ return;
+ }
}
callbacks->handleEOF();
}