diff options
author | Lei Zhang <thestig@chromium.org> | 2018-09-21 18:11:47 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-09-21 18:11:47 +0000 |
commit | 8e54f192f977824744cd14f04b6f35b79e0c42be (patch) | |
tree | 749b6a2b446eadeab251155b65e2c93443370b18 /fpdfsdk/fpdf_ppo.cpp | |
parent | 214982c4d02a720c3b1b3de121cddc62189b8848 (diff) | |
download | pdfium-8e54f192f977824744cd14f04b6f35b79e0c42be.tar.xz |
Fix destruction order with CPDF_StreamAcc.
Commit d39389f6 changed CPDF_StreamAcc to use MaybeOwned, so now callers
have to destroy it more carefully, so CPDF_StreamAcc does not end up
with a dangling pointer.
BUG=chromium:887626
Change-Id: Id5e7af96aad6270c444485c1574182da5dbd9ebf
Reviewed-on: https://pdfium-review.googlesource.com/42893
Reviewed-by: Tom Sepez <tsepez@chromium.org>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Diffstat (limited to 'fpdfsdk/fpdf_ppo.cpp')
-rw-r--r-- | fpdfsdk/fpdf_ppo.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/fpdfsdk/fpdf_ppo.cpp b/fpdfsdk/fpdf_ppo.cpp index 6313e43f29..4e47a00694 100644 --- a/fpdfsdk/fpdf_ppo.cpp +++ b/fpdfsdk/fpdf_ppo.cpp @@ -711,16 +711,18 @@ uint32_t CPDF_NPageToOneExporter::MakeXObject( const CPDF_Stream* pStream = pSrcContentArray->GetStreamAt(i); auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pStream); pAcc->LoadAllDataFiltered(); - ByteString bsStream(pAcc->GetData(), pAcc->GetSize()); - bsSrcContentStream += bsStream; + bsSrcContentStream += ByteString(pAcc->GetData(), pAcc->GetSize()); bsSrcContentStream += "\n"; } pNewXObject->SetDataAndRemoveFilter(bsSrcContentStream.AsRawSpan()); } else { - const CPDF_Stream* pStream = pSrcContentObj->AsStream(); - auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pStream); - pAcc->LoadAllDataFiltered(); - ByteString bsStream(pAcc->GetData(), pAcc->GetSize()); + ByteString bsStream; + { + const CPDF_Stream* pStream = pSrcContentObj->AsStream(); + auto pAcc = pdfium::MakeRetain<CPDF_StreamAcc>(pStream); + pAcc->LoadAllDataFiltered(); + bsStream = ByteString(pAcc->GetData(), pAcc->GetSize()); + } pNewXObject->SetDataAndRemoveFilter(bsStream.AsRawSpan()); } return pNewXObject->GetObjNum(); |