diff options
author | Caolán McNamara <caolanm@redhat.com> | 2011-07-15 23:23:27 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2011-07-18 12:22:55 +0100 |
commit | fa50c1dc103e0adce9d905e5efef9fba225a8350 (patch) | |
tree | 08201059999308d252b6efd6501f8e4d5158941e /sw | |
parent | c492226383082aef1345b1e131c5b0e970106219 (diff) |
defer allocating dest until we know the source exists
Diffstat (limited to 'sw')
-rw-r--r-- | sw/source/filter/ww8/ww8scan.cxx | 19 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8scan.hxx | 4 |
2 files changed, 14 insertions, 9 deletions
diff --git a/sw/source/filter/ww8/ww8scan.cxx b/sw/source/filter/ww8/ww8scan.cxx index e48bd6da2030..ffaa1c197bf7 100644 --- a/sw/source/filter/ww8/ww8scan.cxx +++ b/sw/source/filter/ww8/ww8scan.cxx @@ -1590,7 +1590,7 @@ void WW8ScannerBase::DeletePieceTable() } WW8ScannerBase::WW8ScannerBase( SvStream* pSt, SvStream* pTblSt, - SvStream* pDataSt, const WW8Fib* pWwFib ) + SvStream* pDataSt, WW8Fib* pWwFib ) : pWw8Fib(pWwFib), pMainFdoa(0), pHdFtFdoa(0), pMainTxbx(0), pMainTxbxBkd(0), pHdFtTxbx(0), pHdFtTxbxBkd(0), pMagicTables(0), pSubdocs(0), pExtendedAtrds(0), pPieceGrpprls(0) @@ -1696,14 +1696,19 @@ WW8ScannerBase::WW8ScannerBase( SvStream* pSt, SvStream* pTblSt, pSubdocs = new WW8PLCFspecial( pTblSt, pWwFib->fcPlcfwkb, pWwFib->lcbPlcfwkb, 12); } - // Extended ATRD + // Extended ATRD if (pWwFib->fcAtrdExtra && pWwFib->lcbAtrdExtra) { - pExtendedAtrds = new sal_uInt8[pWwFib->lcbAtrdExtra]; - long nOldPos = pTblSt->Tell(); - pTblSt->Seek(pWwFib->fcAtrdExtra); - pTblSt->Read(pExtendedAtrds, pWwFib->lcbAtrdExtra); - pTblSt->Seek(nOldPos); + sal_Size nOldPos = pTblSt->Tell(); + if (checkSeek(*pTblSt, pWwFib->fcAtrdExtra)) + { + pExtendedAtrds = new sal_uInt8[pWwFib->lcbAtrdExtra]; + pWwFib->lcbAtrdExtra = pTblSt->Read(pExtendedAtrds, + pWwFib->lcbAtrdExtra); + } + else + pWwFib->lcbAtrdExtra = 0; + pTblSt->Seek(nOldPos); } break; diff --git a/sw/source/filter/ww8/ww8scan.hxx b/sw/source/filter/ww8/ww8scan.hxx index 78454f50fe1e..95c6e3407377 100644 --- a/sw/source/filter/ww8/ww8scan.hxx +++ b/sw/source/filter/ww8/ww8scan.hxx @@ -927,7 +927,7 @@ friend class SwWW8FltControlStack; #endif private: - const WW8Fib* pWw8Fib; + WW8Fib* pWw8Fib; WW8PLCFx_Cp_FKP* pChpPLCF; // Character-Attrs WW8PLCFx_Cp_FKP* pPapPLCF; // Para-Attrs WW8PLCFx_SEPX* pSepPLCF; // Section-Attrs @@ -963,7 +963,7 @@ private: void DeletePieceTable(); public: WW8ScannerBase( SvStream* pSt, SvStream* pTblSt, SvStream* pDataSt, - const WW8Fib* pWwF ); + WW8Fib* pWwF ); ~WW8ScannerBase(); bool AreThereFootnotes() const { return pFtnPLCF->Count() > 0; }; bool AreThereEndnotes() const { return pEdnPLCF->Count() > 0; }; |