[Libreoffice-commits] core.git: 4 commits - filter/source sal/inc sax/source svgio/source svx/inc svx/source

Michael Stahl mstahl at redhat.com
Wed Feb 13 07:35:05 PST 2013


 filter/source/svg/svgreader.cxx      |    6 +++-
 sal/inc/sal/log-areas.dox            |    1 
 sax/source/expatwrap/sax_expat.cxx   |   48 +++++++++++++++++++++++++----------
 sax/source/fastparser/fastparser.cxx |   15 +++++-----
 svgio/source/svguno/xsvgparser.cxx   |    9 ++++++
 svx/inc/svx/svdundo.hxx              |    9 ------
 svx/source/svdraw/svdundo.cxx        |   20 --------------
 7 files changed, 58 insertions(+), 50 deletions(-)

New commits:
commit fcb1e4d8433b49686cd8e53c699dd5d6503ea314
Author: Michael Stahl <mstahl at redhat.com>
Date:   Wed Feb 13 15:59:38 2013 +0100

    fdo#60471: svgio, sax: enable internal entity declarations for SVG
    
    Change-Id: I147acac61dfe0b626268fe1e600dcf641ca63a0c

diff --git a/sax/source/expatwrap/sax_expat.cxx b/sax/source/expatwrap/sax_expat.cxx
index 7d4d792..b9ce821 100644
--- a/sax/source/expatwrap/sax_expat.cxx
+++ b/sax/source/expatwrap/sax_expat.cxx
@@ -24,7 +24,7 @@
 #include <osl/diagnose.h>
 
 #include <com/sun/star/lang/XServiceInfo.hpp>
-#include <com/sun/star/util/XCloneable.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
 #include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp>
 #include <com/sun/star/xml/sax/XParser.hpp>
 #include <com/sun/star/xml/sax/SAXParseException.hpp>
@@ -32,8 +32,7 @@
 
 #include <cppuhelper/factory.hxx>
 #include <cppuhelper/weak.hxx>
-#include <cppuhelper/implbase1.hxx>
-#include <cppuhelper/implbase2.hxx>
+#include <cppuhelper/implbase3.hxx>
 
 #include <expat.h>
 
@@ -45,7 +44,6 @@ using namespace ::com::sun::star::uno;
 using namespace ::com::sun::star::lang;
 using namespace ::com::sun::star::registry;
 using namespace ::com::sun::star::xml::sax;
-using namespace ::com::sun::star::util;
 using namespace ::com::sun::star::io;
 
 #include "factory.hxx"
@@ -136,11 +134,10 @@ class SaxExpatParser_Impl;
 
 
 // This class implements the external Parser interface
-class SaxExpatParser :
-    public WeakImplHelper2<
-                XParser,
-                XServiceInfo
-                          >
+class SaxExpatParser
+    : public WeakImplHelper3< XInitialization
+                            , XServiceInfo
+                            , XParser >
 {
 
 public:
@@ -153,6 +150,10 @@ public:
     static Sequence< OUString >     getSupportedServiceNames_Static(void) throw ();
 
 public:
+    // ::com::sun::star::lang::XInitialization:
+    virtual void SAL_CALL initialize(Sequence<Any> const& rArguments)
+        throw (RuntimeException, Exception);
+
     // The SAX-Parser-Interface
     virtual void SAL_CALL parseStream(  const InputSource& structSource)
         throw ( SAXException,
@@ -222,6 +223,7 @@ class SaxExpatParser_Impl
 public: // module scope
     Mutex               aMutex;
     OUString            sCDATA;
+    bool m_bEnableDoS; // fdo#60471 thank you Adobe Illustrator
 
     Reference< XDocumentHandler >   rDocumentHandler;
     Reference< XExtendedDocumentHandler > rExtendedDocumentHandler;
@@ -257,6 +259,7 @@ public: // module scope
 public:
     SaxExpatParser_Impl()
         : sCDATA("CDATA")
+        , m_bEnableDoS(false)
     {
     }
 
@@ -452,6 +455,22 @@ SaxExpatParser::~SaxExpatParser()
     delete m_pImpl;
 }
 
+// ::com::sun::star::lang::XInitialization:
+void SAL_CALL
+SaxExpatParser::initialize(Sequence< Any > const& rArguments)
+    throw (RuntimeException, Exception)
+{
+    // possible arguments: a string "DoSmeplease"
+    if (rArguments.getLength())
+    {
+        OUString str;
+        if ((rArguments[0] >>= str) && "DoSmeplease" == str)
+        {
+            MutexGuard guard( m_pImpl->aMutex );
+            m_pImpl->m_bEnableDoS = true;
+        }
+    }
+}
 
 /***************
 *
@@ -500,7 +519,10 @@ void SaxExpatParser::parseStream(   const InputSource& structSource)
     XML_SetCharacterDataHandler( entity.pParser , call_callbackCharacters );
     XML_SetProcessingInstructionHandler(entity.pParser ,
                                         call_callbackProcessingInstruction );
-    XML_SetEntityDeclHandler(entity.pParser, call_callbackEntityDecl);
+    if (!m_pImpl->m_bEnableDoS)
+    {
+        XML_SetEntityDeclHandler(entity.pParser, call_callbackEntityDecl);
+    }
     XML_SetNotationDeclHandler( entity.pParser, call_callbackNotationDecl );
     XML_SetExternalEntityRefHandler(    entity.pParser,
                                         call_callbackExternalEntityRef);
diff --git a/svgio/source/svguno/xsvgparser.cxx b/svgio/source/svguno/xsvgparser.cxx
index 26a81c0..1b12d9ad 100644
--- a/svgio/source/svguno/xsvgparser.cxx
+++ b/svgio/source/svguno/xsvgparser.cxx
@@ -21,6 +21,7 @@
 
 #include <com/sun/star/graphic/XSvgParser.hpp>
 #include <com/sun/star/lang/XServiceInfo.hpp>
+#include <com/sun/star/lang/XInitialization.hpp>
 #include <cppuhelper/implbase2.hxx>
 #include <svgio/svgreader/svgdocumenthandler.hxx>
 #include <com/sun/star/xml/sax/XParser.hpp>
@@ -131,6 +132,14 @@ namespace svgio
                     // get parser
                     uno::Reference< xml::sax::XParser > xParser(
                         xml::sax::Parser::create(context_));
+                    // fdo#60471 need to enable internal entities because
+                    // certain ... popular proprietary products write SVG files
+                    // that use entities to define XML namespaces.
+                    uno::Reference<lang::XInitialization> const xInit(xParser,
+                            uno::UNO_QUERY_THROW);
+                    uno::Sequence<uno::Any> args(1);
+                    args[0] <<= OUString("DoSmeplease");
+                    xInit->initialize(args);
 
                     // connect parser and filter
                     xParser->setDocumentHandler(xSvgDocHdl);
commit 2f4bd9d44f8bc9e50cd4b1205fa53e0a15ce0954
Author: Michael Stahl <mstahl at redhat.com>
Date:   Wed Feb 13 15:42:37 2013 +0100

    filter: svg: optimizeGradientStops: fix STL assertion
    
    Check that there is actually more than one element in maStops before
    tweaking its first 2 elements (can be reproduced with fdo#60471 Tux.svg)
    
    Change-Id: I7e6ffdf510bb590a9ea9e3782b30247b8fb46ed5

diff --git a/filter/source/svg/svgreader.cxx b/filter/source/svg/svgreader.cxx
index 5e9e994..5aedf0d 100644
--- a/filter/source/svg/svgreader.cxx
+++ b/filter/source/svg/svgreader.cxx
@@ -327,7 +327,7 @@ struct AnnotatingVisitor
     bool hasGradientOpacity( const Gradient& rGradient )
     {
         return
-            !rGradient.maStops.empty() &&
+            (rGradient.maStops.size() > 1) &&
             (maGradientStopVector[
                  rGradient.maStops[0]].maStopColor.a != 1.0 ||
              maGradientStopVector[
@@ -367,6 +367,10 @@ struct AnnotatingVisitor
         }
 
         rGradient.maStops = aNewStops;
+        if (rGradient.maStops.size() < 2)
+        {
+            return; // can't optimize further...
+        }
 
         // axial gradient, maybe?
         if( rGradient.meType == Gradient::LINEAR &&
commit 4db5b17c78c3a6567abfcd3cb43a46c1c4c80cf4
Author: Michael Stahl <mstahl at redhat.com>
Date:   Wed Feb 13 15:18:30 2013 +0100

    sax: convert some legacy assertions
    
    Change-Id: I3b4f1caa2c2d7a0fd88ea53bf05d01b2c7cc115a

diff --git a/sal/inc/sal/log-areas.dox b/sal/inc/sal/log-areas.dox
index 0d2ae52..1c821b1 100644
--- a/sal/inc/sal/log-areas.dox
+++ b/sal/inc/sal/log-areas.dox
@@ -237,6 +237,7 @@ certain functionality.
 @li @c linguistic
 @li @c oox
 @li @c rsc
+ at li @c sax
 @li @c shell
 @li @c stoc
 @li @c svx
diff --git a/sax/source/expatwrap/sax_expat.cxx b/sax/source/expatwrap/sax_expat.cxx
index db17402..7d4d792 100644
--- a/sax/source/expatwrap/sax_expat.cxx
+++ b/sax/source/expatwrap/sax_expat.cxx
@@ -794,7 +794,7 @@ void SaxExpatParser_Impl::callbackStartElement( void *pvThis ,
         pImpl->pAttrList->clear();
 
         while( awAttributes[i] ) {
-            OSL_ASSERT( awAttributes[i+1] );
+            assert(awAttributes[i+1]);
             pImpl->pAttrList->addAttribute(
                 XML_CHAR_TO_OUSTRING( awAttributes[i] ) ,
                 pImpl->sCDATA,  // expat doesn't know types
@@ -853,10 +853,10 @@ void SaxExpatParser_Impl::callbackEntityDecl(
 {
     SaxExpatParser_Impl *pImpl = ((SaxExpatParser_Impl*)pvThis);
     if (value) { // value != 0 means internal entity
-        OSL_TRACE("SaxExpatParser: internal entity declaration, stopping");
+        SAL_INFO("sax","SaxExpatParser: internal entity declaration, stopping");
         XML_StopParser(pImpl->getEntity().pParser, XML_FALSE);
         pImpl->exception = SAXParseException(
-            ::rtl::OUString( "SaxExpatParser: internal entity declaration, stopping"),
+            "SaxExpatParser: internal entity declaration, stopping",
             0, Any(),
             pImpl->rDocumentLocator->getPublicId(),
             pImpl->rDocumentLocator->getSystemId(),
diff --git a/sax/source/fastparser/fastparser.cxx b/sax/source/fastparser/fastparser.cxx
index 4f63130..fc27f10 100644
--- a/sax/source/fastparser/fastparser.cxx
+++ b/sax/source/fastparser/fastparser.cxx
@@ -235,7 +235,7 @@ void FastSaxParser::pushContext()
 void FastSaxParser::popContext()
 {
     Entity& rEntity = getEntity();
-    OSL_ENSURE( !rEntity.maContextStack.empty(), "sax::FastSaxParser::popContext(), pop without push?" );
+    assert(!rEntity.maContextStack.empty()); // pop without push?
     if( !rEntity.maContextStack.empty() )
         rEntity.maContextStack.pop();
 }
@@ -245,7 +245,7 @@ void FastSaxParser::popContext()
 void FastSaxParser::DefineNamespace( const OString& rPrefix, const sal_Char* pNamespaceURL )
 {
     Entity& rEntity = getEntity();
-    OSL_ENSURE( !rEntity.maContextStack.empty(), "sax::FastSaxParser::DefineNamespace(), I need a context!" );
+    assert(!rEntity.maContextStack.empty()); // need a context!
     if( !rEntity.maContextStack.empty() )
     {
         sal_uInt32 nOffset = rEntity.maContextStack.top()->mnNamespaceCount++;
@@ -743,7 +743,7 @@ void FastSaxParser::callbackStartElement( const XML_Char* pwName, const XML_Char
         // #158414# first: get namespaces
         for( ; awAttributes[i]; i += 2 )
         {
-            OSL_ASSERT( awAttributes[i+1] );
+            assert(awAttributes[i+1]);
 
             splitName( awAttributes[i], pPrefix, nPrefixLen, pName, nNameLen );
             if( nPrefixLen )
@@ -853,7 +853,7 @@ void FastSaxParser::callbackStartElement( const XML_Char* pwName, const XML_Char
 void FastSaxParser::callbackEndElement( SAL_UNUSED_PARAMETER const XML_Char* )
 {
     Entity& rEntity = getEntity();
-    OSL_ENSURE( !rEntity.maContextStack.empty(), "FastSaxParser::callbackEndElement - no context" );
+    assert(!rEntity.maContextStack.empty()); // no context?
     if( !rEntity.maContextStack.empty() )
     {
         SaxContextImplPtr pContext = rEntity.maContextStack.top();
@@ -900,18 +900,17 @@ void FastSaxParser::callbackEntityDecl(
     SAL_UNUSED_PARAMETER const XML_Char * /*notationName*/)
 {
     if (value) { // value != 0 means internal entity
-        OSL_TRACE("FastSaxParser: internal entity declaration, stopping");
+        SAL_INFO("sax", "FastSaxParser: internal entity declaration, stopping");
         XML_StopParser(getEntity().mpParser, XML_FALSE);
         getEntity().maSavedException <<= SAXParseException(
-            ::rtl::OUString(
-                    "FastSaxParser: internal entity declaration, stopping"),
+            "FastSaxParser: internal entity declaration, stopping",
             static_cast<OWeakObject*>(this), Any(),
             mxDocumentLocator->getPublicId(),
             mxDocumentLocator->getSystemId(),
             mxDocumentLocator->getLineNumber(),
             mxDocumentLocator->getColumnNumber() );
     } else {
-        OSL_TRACE("FastSaxParser: ignoring external entity declaration");
+        SAL_INFO("sax", "FastSaxParser: ignoring external entity declaration");
     }
 }
 
commit ed09e6b233eac719744b32daf0ea47cea423bcc3
Author: Michael Stahl <mstahl at redhat.com>
Date:   Wed Feb 13 14:19:26 2013 +0100

    Revert "fdo#34558 don't crash on undoing text frame removal"
    
    This reverts commit e462a30d03c16aa4202f8d28ad52b15feb3d9255.

diff --git a/svx/inc/svx/svdundo.hxx b/svx/inc/svx/svdundo.hxx
index 8066c72..0d3713e 100644
--- a/svx/inc/svx/svdundo.hxx
+++ b/svx/inc/svx/svdundo.hxx
@@ -20,7 +20,6 @@
 #ifndef _SVDUNDO_HXX
 #define _SVDUNDO_HXX
 
-#include <svl/lstner.hxx>
 #include <svl/solar.hrc>
 #include <svl/undo.hxx>
 #include <tools/gen.hxx>
@@ -253,12 +252,9 @@ public:
 //
 //************************************************************
 
-class SVX_DLLPUBLIC SdrUndoObjList : public SdrUndoObj, public SfxListener {
+class SVX_DLLPUBLIC SdrUndoObjList : public SdrUndoObj {
     bool                        bOwner;
 
-public:
-    TYPEINFO();
-
 protected:
     SdrObjList*                 pObjList;
     SdrView*                    pView;      // um bei ObjDel, Undo die
@@ -274,9 +270,6 @@ protected:
     void SetView(SdrView* pView1, SdrPageView* pPageView1) { pView=pView1; pPageView=pPageView1; }
     bool IsOwner() { return bOwner; }
     void SetOwner(bool bNew);
-
-private:
-    virtual void Notify(SfxBroadcaster& rBroadcaster, const SfxHint& rHint);
 };
 
 //************************************************************
diff --git a/svx/source/svdraw/svdundo.cxx b/svx/source/svdraw/svdundo.cxx
index 5e53ab1..452761d 100644
--- a/svx/source/svdraw/svdundo.cxx
+++ b/svx/source/svdraw/svdundo.cxx
@@ -655,8 +655,6 @@ OUString SdrUndoGeoObj::GetComment() const
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 
-TYPEINIT1(SdrUndoObjList, SfxListener);
-
 SdrUndoObjList::SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect)
 :   SdrUndoObj(rNewObj),
     bOwner(sal_False),
@@ -669,14 +667,10 @@ SdrUndoObjList::SdrUndoObjList(SdrObject& rNewObj, bool bOrdNumDirect)
     } else {
         nOrdNum=pObj->GetOrdNum();
     }
-
-    StartListening(*pObjList->GetModel());
 }
 
 SdrUndoObjList::~SdrUndoObjList()
 {
-    EndListening(*pObjList->GetModel());
-
     if (pObj!=NULL && IsOwner())
     {
         // Attribute have to go back to the regular Pool
@@ -692,20 +686,6 @@ void SdrUndoObjList::SetOwner(bool bNew)
     bOwner = bNew;
 }
 
-void SdrUndoObjList::Notify(SfxBroadcaster&, const SfxHint& rHint)
-{
-    const SdrHint* pSdrHint(dynamic_cast<const SdrHint*>(&rHint));
-    if (pSdrHint)
-    {
-        if ((pSdrHint->GetObject() == pObj) && (pSdrHint->GetKind() == HINT_OBJCHG))
-        {
-            const sal_uInt32 nNewOrdNum(pObj->GetOrdNum());
-            if (nNewOrdNum != nOrdNum)
-                nOrdNum = nNewOrdNum;
-        }
-    }
-}
-
 ////////////////////////////////////////////////////////////////////////////////////////////////////
 
 void SdrUndoRemoveObj::Undo()


More information about the Libreoffice-commits mailing list