[Libreoffice-commits] .: sw/source
Libreoffice Gerrit user
logerrit at kemper.freedesktop.org
Wed Nov 28 13:47:17 PST 2012
sw/source/filter/ww8/ww8par.cxx | 34 +++++++++++++++++----------
sw/source/filter/ww8/ww8toolbar.cxx | 44 ++++++++++++++++++++++++++++--------
sw/source/filter/ww8/ww8toolbar.hxx | 8 ++----
3 files changed, 59 insertions(+), 27 deletions(-)
New commits:
commit b2be75d95899a3babc16b2a590f8568cfca8124f
Author: Caolán McNamara <caolanm at redhat.com>
Date: Wed Nov 28 21:43:11 2012 +0000
Resolves: fdo#41554 ww6 file cannot be opened
it falls into a (apparently) ww8 specific old school macro
parser we use to scrape out some toolbar info and tries
to allocate some nutso numbers which throws and aborts
the import.
Skip importing these in ww6 document, and tweak the code
to be a bit more forgiving in ww8 documents where the
load fails via exceptions
Change-Id: I9bba60db3b95ece54f68d4fa23031f46545697da
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index ef163cd..9b1b5db 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -4252,22 +4252,30 @@ WW8Customizations::WW8Customizations( SvStream* pTableStream, WW8Fib& rFib ) : m
bool WW8Customizations::Import( SwDocShell* pShell )
{
- if ( mWw8Fib.lcbCmds == 0 )
+ if ( mWw8Fib.lcbCmds == 0 || !IsEightPlus(mWw8Fib.GetFIBVersion()) )
return false;
- Tcg aTCG;
- long nCur = mpTableStream->Tell();
- mpTableStream->Seek( mWw8Fib.fcCmds ); // point at tgc record
- bool bReadResult = aTCG.Read( *mpTableStream );
- mpTableStream->Seek( nCur ); // return to previous position, is that necessary?
- if ( !bReadResult )
- {
- OSL_TRACE("** Read of Customization data failed!!!! ");
- return false;
- }
+ try
+ {
+ Tcg aTCG;
+ long nCur = mpTableStream->Tell();
+ mpTableStream->Seek( mWw8Fib.fcCmds ); // point at tgc record
+ bool bReadResult = aTCG.Read( *mpTableStream );
+ mpTableStream->Seek( nCur ); // return to previous position, is that necessary?
+ if ( !bReadResult )
+ {
+ SAL_WARN("sw.ww8", "** Read of Customization data failed!!!! ");
+ return false;
+ }
#if DEBUG
- aTCG.Print( stderr );
+ aTCG.Print( stderr );
#endif
- return aTCG.ImportCustomToolBar( *pShell );
+ return aTCG.ImportCustomToolBar( *pShell );
+ }
+ catch(...)
+ {
+ SAL_WARN("sw.ww8", "** Read of Customization data failed!!!! epically");
+ return false;
+ }
}
bool SwWW8ImplReader::ReadGlobalTemplateSettings( const rtl::OUString& sCreatedFrom, const uno::Reference< container::XNameContainer >& xPrjNameCache )
diff --git a/sw/source/filter/ww8/ww8toolbar.cxx b/sw/source/filter/ww8/ww8toolbar.cxx
index 696bbb4..2d8f5c7 100644
--- a/sw/source/filter/ww8/ww8toolbar.cxx
+++ b/sw/source/filter/ww8/ww8toolbar.cxx
@@ -955,16 +955,12 @@ bool Tcg255SubStruct::Read(SvStream &rS)
return true;
}
-PlfMcd::PlfMcd( bool bReadId ): Tcg255SubStruct( bReadId ), iMac(0), rgmcd( NULL )
+PlfMcd::PlfMcd(bool bReadId)
+ : Tcg255SubStruct(bReadId)
+ , iMac(0)
{
}
-PlfMcd::~PlfMcd()
-{
- if ( rgmcd )
- delete[] rgmcd;
-}
-
bool PlfMcd::Read(SvStream &rS)
{
OSL_TRACE("PffMcd::Read() stream pos 0x%x", rS.Tell() );
@@ -973,7 +969,7 @@ bool PlfMcd::Read(SvStream &rS)
rS >> iMac;
if ( iMac )
{
- rgmcd = new MCD[ iMac ];
+ rgmcd.resize(iMac);
for ( sal_Int32 index = 0; index < iMac; ++index )
{
if ( !rgmcd[ index ].Read( rS ) )
@@ -1312,7 +1308,37 @@ MCD::MCD() : reserved1(0x56)
{
}
-bool MCD::Read(SvStream &rS)
+MCD::MCD(const MCD& rO)
+ : reserved1(rO.reserved1)
+ , reserved2(rO.reserved2)
+ , ibst(rO.ibst)
+ , ibstName(rO.ibstName)
+ , reserved3(rO.reserved3)
+ , reserved4(rO.reserved4)
+ , reserved5(rO.reserved5)
+ , reserved6(rO.reserved6)
+ , reserved7(rO.reserved7)
+{
+}
+
+MCD& MCD::operator=(const MCD& rO)
+{
+ if (this != &rO)
+ {
+ reserved1 = rO.reserved1;
+ reserved2 = rO.reserved2;
+ ibst = rO.ibst;
+ ibstName = rO.ibstName;
+ reserved3 = rO.reserved3;
+ reserved4 = rO.reserved4;
+ reserved5 = rO.reserved5;
+ reserved6 = rO.reserved6;
+ reserved7 = rO.reserved7;
+ }
+ return *this;
+}
+
+bool MCD::Read(SvStream &rS)
{
OSL_TRACE("MCD::Read() stream pos 0x%x", rS.Tell() );
nOffSet = rS.Tell();
diff --git a/sw/source/filter/ww8/ww8toolbar.hxx b/sw/source/filter/ww8/ww8toolbar.hxx
index 542d288..954958f 100644
--- a/sw/source/filter/ww8/ww8toolbar.hxx
+++ b/sw/source/filter/ww8/ww8toolbar.hxx
@@ -192,11 +192,10 @@ class MCD : public TBBase
sal_uInt32 reserved6; //MUST be ignored.
sal_uInt32 reserved7; //MUST be ignored
- MCD(const MCD&);
- MCD& operator = ( const MCD&);
public:
MCD();
- ~MCD(){}
+ MCD(const MCD&);
+ MCD& operator = ( const MCD&);
bool Read(SvStream &rS);
void Print( FILE* );
};
@@ -204,12 +203,11 @@ public:
class PlfMcd : public Tcg255SubStruct
{
sal_Int32 iMac;
- MCD* rgmcd; // array of MCD's
+ std::vector<MCD> rgmcd; // array of MCD's
PlfMcd(const PlfMcd&);
PlfMcd& operator = ( const PlfMcd&);
public:
PlfMcd( bool bReadId = true );
- ~PlfMcd();
bool Read(SvStream &rS);
void Print( FILE* );
};
More information about the Libreoffice-commits
mailing list