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 <mst...@redhat.com> _______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice