[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