summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2011-07-15 23:23:27 +0100
committerCaolán McNamara <caolanm@redhat.com>2011-07-18 12:22:55 +0100
commitfa50c1dc103e0adce9d905e5efef9fba225a8350 (patch)
tree08201059999308d252b6efd6501f8e4d5158941e /sw
parentc492226383082aef1345b1e131c5b0e970106219 (diff)
defer allocating dest until we know the source exists
Diffstat (limited to 'sw')
-rw-r--r--sw/source/filter/ww8/ww8scan.cxx19
-rw-r--r--sw/source/filter/ww8/ww8scan.hxx4
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; };