aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDF_Stream.cc
diff options
context:
space:
mode:
authorm-holger <m-holger@kubitscheck.org>2023-11-17 18:09:15 +0100
committerm-holger <m-holger@kubitscheck.org>2023-11-26 13:22:36 +0100
commit4c71c8680a8aed21e356d23d9828ebb37d052342 (patch)
tree67ecb112b5ff22be074ab3faea4d92a19fc4484f /libqpdf/QPDF_Stream.cc
parent3237ef70fb77ce323394de1e2793abdb5ae85384 (diff)
downloadqpdf-4c71c8680a8aed21e356d23d9828ebb37d052342.tar.zst
Refactor QPDF_Stream::getStreamJSON
Diffstat (limited to 'libqpdf/QPDF_Stream.cc')
-rw-r--r--libqpdf/QPDF_Stream.cc25
1 files changed, 12 insertions, 13 deletions
diff --git a/libqpdf/QPDF_Stream.cc b/libqpdf/QPDF_Stream.cc
index 45d6fb70..a43d91ff 100644
--- a/libqpdf/QPDF_Stream.cc
+++ b/libqpdf/QPDF_Stream.cc
@@ -216,29 +216,28 @@ QPDF_Stream::getStreamJSON(
auto dict = this->stream_dict;
JSON result = JSON::makeDictionary();
if (json_data != qpdf_sj_none) {
- std::shared_ptr<Buffer> buf;
+ Pl_Discard discard;
+ Pl_Buffer buf_pl{"stream data"};
+ // buf_pl contains valid data and is ready for retrieval of the data.
+ bool buf_pl_ready = false;
bool filtered = false;
bool filter = (decode_level != qpdf_dl_none);
for (int attempt = 1; attempt <= 2; ++attempt) {
- Pl_Discard discard;
- std::shared_ptr<Pl_Buffer> buf_pl;
- Pipeline* data_pipeline = nullptr;
+ Pipeline* data_pipeline = &discard;
if (json_data == qpdf_sj_file) {
// We need to capture the data to write
- buf_pl = std::make_shared<Pl_Buffer>("stream data");
- data_pipeline = buf_pl.get();
- } else {
- data_pipeline = &discard;
+ data_pipeline = &buf_pl;
}
bool succeeded =
pipeStreamData(data_pipeline, &filtered, 0, decode_level, false, (attempt == 1));
- if ((!succeeded) || (filter && (!filtered))) {
+ if (!succeeded || (filter && !filtered)) {
// Try again
filter = false;
decode_level = qpdf_dl_none;
+ buf_pl.getString(); // reset buf_pl
} else {
- if (buf_pl.get()) {
- buf = buf_pl->getBufferSharedPointer();
+ if (json_data == qpdf_sj_file) {
+ buf_pl_ready = true;
}
break;
}
@@ -252,10 +251,10 @@ QPDF_Stream::getStreamJSON(
}
if (json_data == qpdf_sj_file) {
result.addDictionaryMember("datafile", JSON::makeString(data_filename));
- if (!buf.get()) {
+ if (!buf_pl_ready) {
throw std::logic_error("QPDF_Stream: failed to get stream data in json file mode");
}
- p->write(buf->getBuffer(), buf->getSize());
+ p->writeString(buf_pl.getString());
} else if (json_data == qpdf_sj_inline) {
result.addDictionaryMember(
"data", JSON::makeBlob(StreamBlobProvider(this, decode_level)));