Date: prev next · Thread: first prev next last
2013 Archives by date, by thread · List index


Hi,

I have submitted a patch for review:

    https://gerrit.libreoffice.org/2138

To pull it, you can do:

    git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/38/2138/1

fdo#60471: svgio, sax: enable internal entity declarations for SVG

Change-Id: I147acac61dfe0b626268fe1e600dcf641ca63a0c
(cherry picked from commit fcb1e4d8433b49686cd8e53c699dd5d6503ea314)
---
M sax/source/expatwrap/sax_expat.cxx
M svgio/source/svguno/xsvgparser.cxx
2 files changed, 41 insertions(+), 10 deletions(-)



diff --git a/sax/source/expatwrap/sax_expat.cxx b/sax/source/expatwrap/sax_expat.cxx
index db17402..6dd88ed 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::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 @@
 
 
 // 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 @@
     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 @@
 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:
     SaxExpatParser_Impl()
         : sCDATA("CDATA")
+        , m_bEnableDoS(false)
     {
     }
 
@@ -452,6 +455,22 @@
     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 @@
     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 @@
                     // 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);

-- 
To view, visit https://gerrit.libreoffice.org/2138
To unsubscribe, visit https://gerrit.libreoffice.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I147acac61dfe0b626268fe1e600dcf641ca63a0c
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: libreoffice-4-0
Gerrit-Owner: Michael Stahl <mstahl@redhat.com>

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.