Commit 3237ef70fb77ce323394de1e2793abdb5ae85384
1 parent
d11622b6
Add new method Pl_Buffer::getString
Showing
6 changed files
with
21 additions
and
14 deletions
include/qpdf/Pl_Buffer.hh
| ... | ... | @@ -64,6 +64,10 @@ class QPDF_DLL_CLASS Pl_Buffer: public Pipeline |
| 64 | 64 | QPDF_DLL |
| 65 | 65 | void getMallocBuffer(unsigned char** buf, size_t* len); |
| 66 | 66 | |
| 67 | + // Same as getBuffer but returns the result as a string. | |
| 68 | + QPDF_DLL | |
| 69 | + std::string getString(); | |
| 70 | + | |
| 67 | 71 | private: |
| 68 | 72 | class QPDF_DLL_PRIVATE Members |
| 69 | 73 | { | ... | ... |
libqpdf/Pl_Buffer.cc
| ... | ... | @@ -53,6 +53,17 @@ Pl_Buffer::getBuffer() |
| 53 | 53 | return b; |
| 54 | 54 | } |
| 55 | 55 | |
| 56 | +std::string | |
| 57 | +Pl_Buffer::getString() | |
| 58 | +{ | |
| 59 | + if (!m->ready) { | |
| 60 | + throw std::logic_error("Pl_Buffer::getString() called when not ready"); | |
| 61 | + } | |
| 62 | + auto s = std::move(m->data); | |
| 63 | + m->data.clear(); | |
| 64 | + return s; | |
| 65 | +} | |
| 66 | + | |
| 56 | 67 | std::shared_ptr<Buffer> |
| 57 | 68 | Pl_Buffer::getBufferSharedPointer() |
| 58 | 69 | { | ... | ... |
libqpdf/QPDFAcroFormDocumentHelper.cc
| ... | ... | @@ -584,8 +584,7 @@ QPDFAcroFormDocumentHelper::adjustDefaultAppearances( |
| 584 | 584 | ResourceReplacer rr(dr_map, rf.getNamesByResourceType()); |
| 585 | 585 | Pl_Buffer buf_pl("filtered DA"); |
| 586 | 586 | da_stream.filterAsContents(&rr, &buf_pl); |
| 587 | - auto buf = buf_pl.getBufferSharedPointer(); | |
| 588 | - std::string new_da(reinterpret_cast<char*>(buf->getBuffer()), buf->getSize()); | |
| 587 | + std::string new_da = buf_pl.getString(); | |
| 589 | 588 | obj.replaceKey("/DA", QPDFObjectHandle::newString(new_da)); |
| 590 | 589 | } |
| 591 | 590 | ... | ... |
libqpdf/QPDFObjectHandle.cc
| ... | ... | @@ -1708,8 +1708,7 @@ QPDFObjectHandle::pipeContentStreams( |
| 1708 | 1708 | need_newline = (lc.getLastChar() != static_cast<unsigned char>('\n')); |
| 1709 | 1709 | QTC::TC("qpdf", "QPDFObjectHandle need_newline", need_newline ? 0 : 1); |
| 1710 | 1710 | } |
| 1711 | - std::unique_ptr<Buffer> b(buf.getBuffer()); | |
| 1712 | - p->write(b->getBuffer(), b->getSize()); | |
| 1711 | + p->writeString(buf.getString()); | |
| 1713 | 1712 | p->finish(); |
| 1714 | 1713 | } |
| 1715 | 1714 | ... | ... |
libqpdf/QPDFWriter.cc
| ... | ... | @@ -1579,10 +1579,7 @@ QPDFWriter::unparseObject( |
| 1579 | 1579 | m->cur_data_key.length()); |
| 1580 | 1580 | pl.writeString(val); |
| 1581 | 1581 | pl.finish(); |
| 1582 | - auto buf = bufpl.getBufferSharedPointer(); | |
| 1583 | - val = QPDF_String( | |
| 1584 | - std::string(reinterpret_cast<char*>(buf->getBuffer()), buf->getSize())) | |
| 1585 | - .unparse(true); | |
| 1582 | + val = QPDF_String(bufpl.getString()).unparse(true); | |
| 1586 | 1583 | } else { |
| 1587 | 1584 | auto tmp_ph = QUtil::make_unique_cstr(val); |
| 1588 | 1585 | char* tmp = tmp_ph.get(); | ... | ... |
libqpdf/QPDF_encryption.cc
| ... | ... | @@ -229,13 +229,11 @@ process_with_aes( |
| 229 | 229 | aes.writeString(data); |
| 230 | 230 | } |
| 231 | 231 | aes.finish(); |
| 232 | - auto bufp = buffer.getBufferSharedPointer(); | |
| 233 | 232 | if (outlength == 0) { |
| 234 | - outlength = bufp->getSize(); | |
| 233 | + return buffer.getString(); | |
| 235 | 234 | } else { |
| 236 | - outlength = std::min(outlength, bufp->getSize()); | |
| 235 | + return buffer.getString().substr(0, outlength); | |
| 237 | 236 | } |
| 238 | - return {reinterpret_cast<char*>(bufp->getBuffer()), outlength}; | |
| 239 | 237 | } |
| 240 | 238 | |
| 241 | 239 | static std::string |
| ... | ... | @@ -1021,8 +1019,7 @@ QPDF::decryptString(std::string& str, QPDFObjGen const& og) |
| 1021 | 1019 | key.length()); |
| 1022 | 1020 | pl.writeString(str); |
| 1023 | 1021 | pl.finish(); |
| 1024 | - auto buf = bufpl.getBufferSharedPointer(); | |
| 1025 | - str = std::string(reinterpret_cast<char*>(buf->getBuffer()), buf->getSize()); | |
| 1022 | + str = bufpl.getString(); | |
| 1026 | 1023 | } else { |
| 1027 | 1024 | QTC::TC("qpdf", "QPDF_encryption rc4 decode string"); |
| 1028 | 1025 | size_t vlen = str.length(); | ... | ... |