[libreoffice/f16] xml manifest parser fixes

Caolán McNamara caolanm at fedoraproject.org
Wed Aug 1 12:00:32 UTC 2012


commit 2cca6051cf20df1e5eab3c94edd25856bd2e00fe
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Aug 1 13:00:27 2012 +0100

    xml manifest parser fixes

 CVE-2012-2665.backport.3-4.patch | 1757 ++++++++++++++++++++++++++++++++++++++
 libreoffice.spec                 |    7 +-
 2 files changed, 1763 insertions(+), 1 deletions(-)
---
diff --git a/CVE-2012-2665.backport.3-4.patch b/CVE-2012-2665.backport.3-4.patch
new file mode 100644
index 0000000..12927bc
--- /dev/null
+++ b/CVE-2012-2665.backport.3-4.patch
@@ -0,0 +1,1757 @@
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_sc/source/filter/xml/sc_xmlbodyi.cxx libreoffice-3.4.5.2/binfilter/bf_sc/source/filter/xml/sc_xmlbodyi.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_sc/source/filter/xml/sc_xmlbodyi.cxx	2012-07-16 10:12:05.277589241 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_sc/source/filter/xml/sc_xmlbodyi.cxx	2012-07-16 10:20:28.146605369 +0100
+@@ -56,6 +56,9 @@
+ #include <com/sun/star/sheet/XSpreadsheetDocument.hpp>
+ 
+ #include <sal/types.h>
++
++#include <sax/tools/converter.hxx>
++
+ namespace binfilter {
+ 
+ using namespace ::com::sun::star;
+@@ -193,7 +196,7 @@
+         {
+             uno::Sequence<sal_Int8> aPass;
+             if (sPassword.getLength())
+-                SvXMLUnitConverter::decodeBase64(aPass, sPassword);
++                ::sax::Converter::decodeBase64(aPass, sPassword);
+             pDoc->SetDocProtection(bProtected, aPass);
+         }
+         uno::Reference <sheet::XSpreadsheetDocument> xSpreadDoc( GetScImport().GetModel(), uno::UNO_QUERY );
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_sc/source/filter/xml/sc_XMLChangeTrackingExportHelper.cxx libreoffice-3.4.5.2/binfilter/bf_sc/source/filter/xml/sc_XMLChangeTrackingExportHelper.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_sc/source/filter/xml/sc_XMLChangeTrackingExportHelper.cxx	2012-07-16 10:12:05.286589351 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_sc/source/filter/xml/sc_XMLChangeTrackingExportHelper.cxx	2012-07-16 10:20:28.145605377 +0100
+@@ -39,6 +39,9 @@
+ #include <bf_xmloff/xmluconv.hxx>
+ 
+ #include <bf_svtools/zforlist.hxx>
++
++#include <sax/tools/converter.hxx>
++
+ namespace binfilter {
+ 
+ #define SC_CHANGE_ID_PREFIX "ct"
+@@ -758,7 +761,7 @@
+         if (pChangeTrack->IsProtected())
+         {
+             ::rtl::OUStringBuffer aBuffer;
+-            SvXMLUnitConverter::encodeBase64(aBuffer, pChangeTrack->GetProtection());
++            ::sax::Converter::encodeBase64(aBuffer, pChangeTrack->GetProtection());
+             if (aBuffer.getLength())
+                 rExport.AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY, aBuffer.makeStringAndClear());
+         }
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_sc/source/filter/xml/sc_xmlexprt.cxx libreoffice-3.4.5.2/binfilter/bf_sc/source/filter/xml/sc_xmlexprt.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_sc/source/filter/xml/sc_xmlexprt.cxx	2012-07-16 10:12:05.249588907 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_sc/source/filter/xml/sc_xmlexprt.cxx	2012-07-16 10:20:28.151605300 +0100
+@@ -86,6 +86,7 @@
+ #include <com/sun/star/sheet/NamedRangeFlag.hpp>
+ #include <com/sun/star/form/XFormsSupplier.hpp>
+ #include <legacysmgr/legacy_binfilters_smgr.hxx>
++#include <sax/tools/converter.hxx>
+ namespace binfilter {
+ //! not found in unonames.hxx
+ #define SC_STANDARDFORMAT "StandardFormat"
+@@ -1213,7 +1214,7 @@
+     {
+         AddAttribute(XML_NAMESPACE_TABLE, XML_STRUCTURE_PROTECTED, XML_TRUE);
+         ::rtl::OUStringBuffer aBuffer;
+-        SvXMLUnitConverter::encodeBase64(aBuffer, pDoc->GetDocPassword());
++        ::sax::Converter::encodeBase64(aBuffer, pDoc->GetDocPassword());
+         if (aBuffer.getLength())
+             AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY, aBuffer.makeStringAndClear());
+     }
+@@ -1285,7 +1286,7 @@
+                                     AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTED, XML_TRUE);
+                                     ::rtl::OUStringBuffer aBuffer;
+                                     if (pDoc)
+-                                        SvXMLUnitConverter::encodeBase64(aBuffer, pDoc->GetTabPassword(nTable));
++                                        ::sax::Converter::encodeBase64(aBuffer, pDoc->GetTabPassword(nTable));
+                                     if (aBuffer.getLength())
+                                         AddAttribute(XML_NAMESPACE_TABLE, XML_PROTECTION_KEY, aBuffer.makeStringAndClear());
+                                 }
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_sc/source/filter/xml/sc_xmlsubti.cxx libreoffice-3.4.5.2/binfilter/bf_sc/source/filter/xml/sc_xmlsubti.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_sc/source/filter/xml/sc_xmlsubti.cxx	2012-07-16 10:12:05.256588992 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_sc/source/filter/xml/sc_xmlsubti.cxx	2012-07-16 10:20:28.151605300 +0100
+@@ -45,6 +45,8 @@
+ #include <com/sun/star/sheet/XCellRangeAddressable.hpp>
+ #include <com/sun/star/sheet/XCellRangeMovement.hpp>
+ #include <com/sun/star/drawing/XDrawPageSupplier.hpp>
++
++#include <sax/tools/converter.hxx>
+ namespace binfilter {
+ 
+ //------------------------------------------------------------------
+@@ -593,7 +595,7 @@
+     if (rImport.GetDocument() && bProtection)
+     {
+         uno::Sequence<sal_Int8> aPass;
+-        SvXMLUnitConverter::decodeBase64(aPass, sPassword);
++        ::sax::Converter::decodeBase64SomeChars(aPass, sPassword);
+         rImport.GetDocument()->SetTabProtection(nCurrentSheet, bProtection, aPass);
+         /*uno::Reference <util::XProtectable> xProtectable(xCurrentSheet, uno::UNO_QUERY);
+         if (xProtectable.is())
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_sc/source/filter/xml/sc_XMLTrackedChangesContext.cxx libreoffice-3.4.5.2/binfilter/bf_sc/source/filter/xml/sc_XMLTrackedChangesContext.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_sc/source/filter/xml/sc_XMLTrackedChangesContext.cxx	2012-07-16 10:12:05.266589111 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_sc/source/filter/xml/sc_XMLTrackedChangesContext.cxx	2012-07-16 10:20:28.146605369 +0100
+@@ -47,6 +47,9 @@
+ #include <bf_svtools/zforlist.hxx>
+ 
+ #include <com/sun/star/text/ControlCharacter.hpp>
++
++#include <sax/tools/converter.hxx>
++
+ namespace binfilter {
+ 
+ using namespace ::com::sun::star;
+@@ -562,7 +565,7 @@
+                 if (sValue.getLength())
+                 {
+                     uno::Sequence<sal_Int8> aPass;
+-                    SvXMLUnitConverter::decodeBase64(aPass, sValue);
++                    ::sax::Converter::decodeBase64(aPass, sValue);
+                     pChangeTrackingImportHelper->SetProtection(aPass);
+                 }
+             }
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_sc/util/makefile.mk libreoffice-3.4.5.2/binfilter/bf_sc/util/makefile.mk
+--- libreoffice-3.4.5.2.orig/binfilter/bf_sc/util/makefile.mk	2012-07-16 10:12:05.288589374 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_sc/util/makefile.mk	2012-07-16 10:20:28.152605289 +0100
+@@ -70,6 +70,7 @@
+     $(BFSVXLIB)		\
+     $(BFOFALIB)		\
+     $(VCLLIB)		\
++    $(SAXLIB)		\
+     $(CPPULIB)		\
+     $(CPPUHELPERLIB)	\
+     $(COMPHELPERLIB)	\
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/core/xmloff_DocumentSettingsContext.cxx libreoffice-3.4.5.2/binfilter/bf_xmloff/source/core/xmloff_DocumentSettingsContext.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/core/xmloff_DocumentSettingsContext.cxx	2012-07-16 10:12:05.382590501 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_xmloff/source/core/xmloff_DocumentSettingsContext.cxx	2012-07-16 10:20:28.152605289 +0100
+@@ -37,9 +37,7 @@
+ #include "xmluconv.hxx"
+ #include <tools/debug.hxx>
+ 
+-#ifndef __SGI_STL_LIST
+ #include <list>
+-#endif
+ 
+ #include <com/sun/star/i18n/XForbiddenCharacters.hpp>
+ #include <com/sun/star/container/XIndexContainer.hpp>
+@@ -48,6 +46,7 @@
+ #include <com/sun/star/util/DateTime.hpp>
+ #include <com/sun/star/document/XViewDataSupplier.hpp>
+ #include <com/sun/star/document/PrinterIndependentLayout.hpp>
++#include <sax/tools/converter.hxx>
+ #include <xmlenums.hxx>
+ namespace binfilter {
+ 
+@@ -516,8 +515,7 @@
+             }
+             uno::Sequence<sal_Int8> aBuffer((sChars.getLength() / 4) * 3 );
+             sal_Int32 nCharsDecoded =
+-                GetImport().GetMM100UnitConverter().
+-                    decodeBase64SomeChars( aBuffer, sChars );
++                ::sax::Converter::decodeBase64SomeChars(aBuffer, sChars);
+             sal_uInt32 nStartPos(aDecoded.getLength());
+             sal_uInt32 nCount(aBuffer.getLength());
+             aDecoded.realloc(nStartPos + nCount);
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/core/xmloff_SettingsExportHelper.cxx libreoffice-3.4.5.2/binfilter/bf_xmloff/source/core/xmloff_SettingsExportHelper.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/core/xmloff_SettingsExportHelper.cxx	2012-07-16 10:12:05.371590369 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_xmloff/source/core/xmloff_SettingsExportHelper.cxx	2012-07-16 10:20:28.152605289 +0100
+@@ -39,6 +39,7 @@
+ #include <com/sun/star/util/DateTime.hpp>
+ #include <com/sun/star/container/XIndexContainer.hpp>
+ #include <com/sun/star/document/PrinterIndependentLayout.hpp>
++#include <sax/tools/converter.hxx>
+ #include <xmlenums.hxx>
+ namespace binfilter {
+ 
+@@ -355,7 +356,7 @@
+     if(nLength)
+     {
+         ::rtl::OUStringBuffer sBuffer;
+-        SvXMLUnitConverter::encodeBase64(sBuffer, aProps);
++        ::sax::Converter::encodeBase64(sBuffer, aProps);
+         rExport.GetDocHandler()->characters(sBuffer.makeStringAndClear());
+     }
+ }
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/core/xmloff_XMLBase64Export.cxx libreoffice-3.4.5.2/binfilter/bf_xmloff/source/core/xmloff_XMLBase64Export.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/core/xmloff_XMLBase64Export.cxx	2012-07-16 10:12:05.370590357 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_xmloff/source/core/xmloff_XMLBase64Export.cxx	2012-07-16 10:20:28.152605289 +0100
+@@ -28,6 +28,7 @@
+ 
+ 
+ #include <com/sun/star/io/XInputStream.hpp>
++#include <sax/tools/converter.hxx>
+ 
+ #include "xmluconv.hxx"
+ #include "xmlexp.hxx"
+@@ -62,8 +63,7 @@
+             nRead = rIn->readBytes( aInBuff, INPUT_BUFFER_SIZE );
+             if( nRead > 0 )
+             {
+-                GetExport().GetMM100UnitConverter().encodeBase64( aOutBuff,
+-                                                                  aInBuff );
++                ::sax::Converter::encodeBase64(aOutBuff, aInBuff);
+                 GetExport().Characters( aOutBuff.makeStringAndClear() );
+                 if( nRead == INPUT_BUFFER_SIZE )
+                     GetExport().IgnorableWhitespace();
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/core/xmloff_XMLBase64ImportContext.cxx libreoffice-3.4.5.2/binfilter/bf_xmloff/source/core/xmloff_XMLBase64ImportContext.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/core/xmloff_XMLBase64ImportContext.cxx	2012-07-16 10:12:05.382590501 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_xmloff/source/core/xmloff_XMLBase64ImportContext.cxx	2012-07-16 10:22:06.591780916 +0100
+@@ -31,6 +31,8 @@
+ 
+ #include <com/sun/star/io/XOutputStream.hpp>
+ 
++#include <sax/tools/converter.hxx>
++
+ #include "XMLBase64ImportContext.hxx"
+ namespace binfilter {
+ 
+@@ -82,8 +84,7 @@
+         }
+         Sequence< sal_Int8 > aBuffer( (sChars.getLength() / 4) * 3 );
+         sal_Int32 nCharsDecoded = 
+-            GetImport().GetMM100UnitConverter().
+-                decodeBase64SomeChars( aBuffer, sChars );
++            ::sax::Converter::decodeBase64SomeChars(aBuffer, sChars);
+         xOut->writeBytes( aBuffer );	
+         if( nCharsDecoded != sChars.getLength() )
+             sBase64CharsLeft = sChars.copy( nCharsDecoded );
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/core/xmloff_xmluconv.cxx libreoffice-3.4.5.2/binfilter/bf_xmloff/source/core/xmloff_xmluconv.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/core/xmloff_xmluconv.cxx	2012-07-16 10:12:05.374590403 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_xmloff/source/core/xmloff_xmluconv.cxx	2012-07-16 10:21:17.455194287 +0100
+@@ -1537,100 +1537,6 @@
+     sBuffer.setCharAt(3, aBase64EncodeTable [nIndex]);
+ }
+ 
+-void SvXMLUnitConverter::encodeBase64( ::rtl::OUStringBuffer& aStrBuffer, const uno::Sequence<sal_Int8>& aPass)
+-{
+-    sal_Int32 i(0);
+-    sal_Int32 nBufferLength(aPass.getLength());
+-    const sal_Int8* pBuffer = aPass.getConstArray();
+-    while (i < nBufferLength)
+-    {
+-        ::rtl::OUStringBuffer sBuffer;
+-        ThreeByteToFourByte (pBuffer, i, nBufferLength, sBuffer);
+-        aStrBuffer.append(sBuffer);
+-        i += 3;
+-    }
+-}
+-
+-void SvXMLUnitConverter::decodeBase64(uno::Sequence<sal_Int8>& aBuffer, const ::rtl::OUString& sBuffer)
+-{
+-#if OSL_DEBUG_LEVEL > 0
+-    sal_Int32 nCharsDecoded =
+-#endif
+-        decodeBase64SomeChars( aBuffer, sBuffer );
+-    OSL_ENSURE( nCharsDecoded == sBuffer.getLength(),
+-                "some bytes left in base64 decoding!" );
+-}
+-
+-sal_Int32 SvXMLUnitConverter::decodeBase64SomeChars(
+-        uno::Sequence<sal_Int8>& rOutBuffer,
+-        const ::rtl::OUString& rInBuffer)
+-{
+-    sal_Int32 nInBufferLen = rInBuffer.getLength();
+-    sal_Int32 nMinOutBufferLen = (nInBufferLen / 4) * 3;
+-    if( rOutBuffer.getLength() < nMinOutBufferLen )
+-        rOutBuffer.realloc( nMinOutBufferLen );
+-
+-    const sal_Unicode *pInBuffer = rInBuffer.getStr();
+-    sal_Int8 *pOutBuffer = rOutBuffer.getArray();
+-    sal_Int8 *pOutBufferStart = pOutBuffer;
+-    sal_Int32 nCharsDecoded = 0;
+-
+-    sal_uInt8 aDecodeBuffer[4];
+-    sal_Int32 nBytesToDecode = 0;
+-    sal_Int32 nBytesGotFromDecoding = 3;
+-    sal_Int32 nInBufferPos= 0;
+-    while( nInBufferPos < nInBufferLen )
+-    {
+-        sal_Unicode cChar = *pInBuffer;
+-        if( cChar >= '+' && cChar <= 'z' )
+-        {
+-            sal_uInt8 nByte = aBase64DecodeTable[cChar-'+'];
+-            if( nByte != 255 )
+-            {
+-                // We have found a valid character!
+-                aDecodeBuffer[nBytesToDecode++] = nByte;
+-
+-                // One '=' character at the end means 2 out bytes
+-                // Two '=' characters at the end mean 1 out bytes
+-                if( '=' == cChar && nBytesToDecode > 2 )
+-                    nBytesGotFromDecoding--;
+-                if( 4 == nBytesToDecode )
+-                {
+-                    // Four characters found, so we may convert now!
+-                    sal_uInt32 nOut = (aDecodeBuffer[0] << 18) +
+-                                      (aDecodeBuffer[1] << 12) +
+-                                      (aDecodeBuffer[2] << 6) +
+-                                       aDecodeBuffer[3];
+-
+-                    *pOutBuffer++  = (sal_Int8)((nOut & 0xff0000) >> 16);
+-                    if( nBytesGotFromDecoding > 1 )
+-                        *pOutBuffer++  = (sal_Int8)((nOut & 0xff00) >> 8);
+-                    if( nBytesGotFromDecoding > 2 )
+-                        *pOutBuffer++  = (sal_Int8)(nOut & 0xff);
+-                    nCharsDecoded = nInBufferPos + 1;
+-                    nBytesToDecode = 0;
+-                    nBytesGotFromDecoding = 3;
+-                }
+-            }
+-            else
+-            {
+-                nCharsDecoded++;
+-            }
+-        }
+-        else
+-        {
+-            nCharsDecoded++;
+-        }
+-
+-        nInBufferPos++;
+-        pInBuffer++;
+-    }
+-    if( (pOutBuffer - pOutBufferStart) != rOutBuffer.getLength() )
+-        rOutBuffer.realloc( pOutBuffer - pOutBufferStart );
+-
+-    return nCharsDecoded;
+-}
+-
+ sal_Bool SvXMLUnitConverter::convertNumFormat(
+         sal_Int16& rType,
+         const OUString& rNumFmt,
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/text/xmloff_XMLRedlineExport.cxx libreoffice-3.4.5.2/binfilter/bf_xmloff/source/text/xmloff_XMLRedlineExport.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/text/xmloff_XMLRedlineExport.cxx	2012-07-16 10:12:05.466591507 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_xmloff/source/text/xmloff_XMLRedlineExport.cxx	2012-07-16 10:20:34.414683340 +0100
+@@ -45,6 +45,7 @@
+ 
+ #include <com/sun/star/util/DateTime.hpp>
+ 
++#include <sax/tools/converter.hxx>
+ 
+ #include "xmlnmspe.hxx"
+ 
+@@ -238,7 +239,7 @@
+         if ( aKey.getLength() > 0 )
+         {
+             OUStringBuffer aBuffer;
+-            SvXMLUnitConverter::encodeBase64( aBuffer, aKey );
++            ::sax::Converter::encodeBase64(aBuffer, aKey);
+             rExport.AddAttribute( XML_NAMESPACE_TEXT, XML_PROTECTION_KEY,
+                                   aBuffer.makeStringAndClear() );
+         }
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/text/xmloff_XMLSectionExport.cxx libreoffice-3.4.5.2/binfilter/bf_xmloff/source/text/xmloff_XMLSectionExport.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/text/xmloff_XMLSectionExport.cxx	2012-07-16 10:12:05.432591099 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_xmloff/source/text/xmloff_XMLSectionExport.cxx	2012-07-16 10:22:37.289148284 +0100
+@@ -39,6 +39,8 @@
+ #include <com/sun/star/text/XTextFieldsSupplier.hpp>
+ #include <com/sun/star/text/XChapterNumberingSupplier.hpp>
+ 
++#include <sax/tools/converter.hxx>
++
+ #include "xmlkywd.hxx"
+ #include "xmluconv.hxx"
+ #include "xmlexp.hxx"
+@@ -452,7 +454,7 @@
+     if (aPassword.getLength() > 0)
+     {
+         OUStringBuffer aBuffer;
+-        SvXMLUnitConverter::encodeBase64(aBuffer, aPassword);
++        ::sax::Converter::encodeBase64(aBuffer, aPassword);
+         GetExport().AddAttribute(XML_NAMESPACE_TEXT, XML_PROTECTION_KEY, 
+                                  aBuffer.makeStringAndClear());
+     }
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/text/xmloff_XMLSectionImportContext.cxx libreoffice-3.4.5.2/binfilter/bf_xmloff/source/text/xmloff_XMLSectionImportContext.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/text/xmloff_XMLSectionImportContext.cxx	2012-07-16 10:12:05.490591795 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_xmloff/source/text/xmloff_XMLSectionImportContext.cxx	2012-07-16 10:20:34.416683154 +0100
+@@ -40,6 +40,8 @@
+ #include <com/sun/star/text/XTextContent.hpp>
+ #include <com/sun/star/text/ControlCharacter.hpp>
+ 
++#include <sax/tools/converter.hxx>
++
+ namespace binfilter {
+ 
+ 
+@@ -308,7 +310,7 @@
+                 }
+                 break;
+             case XML_TOK_SECTION_PROTECTION_KEY:
+-                SvXMLUnitConverter::decodeBase64(aSequence, sAttr);
++                ::sax::Converter::decodeBase64(aSequence, sAttr);
+                 bSequenceOK = sal_True;
+                 break;
+             case XML_TOK_SECTION_PROTECT:
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/text/xmloff_XMLTextFrameContext.cxx libreoffice-3.4.5.2/binfilter/bf_xmloff/source/text/xmloff_XMLTextFrameContext.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/text/xmloff_XMLTextFrameContext.cxx	2012-07-16 10:12:05.491591807 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_xmloff/source/text/xmloff_XMLTextFrameContext.cxx	2012-07-16 10:24:27.898468897 +0100
+@@ -35,6 +35,7 @@
+ #include <com/sun/star/io/XOutputStream.hpp>
+ #include <com/sun/star/text/HoriOrientation.hpp>
+ #include <com/sun/star/text/VertOrientation.hpp>
++#include <sax/tools/converter.hxx>
+ #include "xmlimp.hxx"
+ #include "xmlnmspe.hxx"
+ #include "xmlkywd.hxx"
+@@ -1112,7 +1113,6 @@
+                 Sequence< sal_Int8 > aBuffer( (sChars.getLength() / 4) * 3 );
+                 sal_Int32 nCharsDecoded = 
+-                     GetImport().GetMM100UnitConverter().
+-                        decodeBase64SomeChars( aBuffer, sChars );
++                        ::sax::Converter::decodeBase64SomeChars(aBuffer, sChars);
+                 xBase64Stream->writeBytes( aBuffer );	
+                 if( nCharsDecoded != sChars.getLength() )
+                     sBase64CharsLeft = sChars.copy( nCharsDecoded );
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/text/xmloff_XMLTrackedChangesImportContext.cxx libreoffice-3.4.5.2/binfilter/bf_xmloff/source/text/xmloff_XMLTrackedChangesImportContext.cxx
+--- libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/source/text/xmloff_XMLTrackedChangesImportContext.cxx	2012-07-16 10:12:05.454591363 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_xmloff/source/text/xmloff_XMLTrackedChangesImportContext.cxx	2012-07-16 10:24:55.985804228 +0100
+@@ -30,6 +30,7 @@
+ #include "XMLChangedRegionImportContext.hxx"
+ #include <com/sun/star/uno/Reference.h>
+ #include <com/sun/star/uno/Sequence.h>
++#include <sax/tools/converter.hxx>
+ #include "xmlimp.hxx"
+ #include "xmlnmspe.hxx"
+ #include "nmspmap.hxx"
+@@ -84,7 +85,7 @@
+             }
+             else if ( IsXMLToken( sLocalName, XML_PROTECTION_KEY ) )			{
+                 Sequence<sal_Int8> aSequence;
+-                SvXMLUnitConverter::decodeBase64( 
++                ::sax::Converter::decodeBase64( 
+                     aSequence, xAttrList->getValueByIndex(i));
+                 if ( aSequence.getLength() > 0 )
+                 {
+diff -ru libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/util/makefile.mk libreoffice-3.4.5.2/binfilter/bf_xmloff/util/makefile.mk
+--- libreoffice-3.4.5.2.orig/binfilter/bf_xmloff/util/makefile.mk	2012-07-16 10:12:05.671593962 +0100
++++ libreoffice-3.4.5.2/binfilter/bf_xmloff/util/makefile.mk	2012-07-16 10:20:34.417683064 +0100
+@@ -71,6 +71,7 @@
+ 
+ SHL1STDLIBS= \
+         $(BFSVTOOLLIB)	\
++        $(SAXLIB)		\
+         $(TOOLSLIB)		\
+         $(I18NISOLANGLIB) \
+         $(CPPULIB)		\
+diff -ru libreoffice-3.4.5.2.orig/binfilter/inc/bf_xmloff/xmluconv.hxx libreoffice-3.4.5.2/binfilter/inc/bf_xmloff/xmluconv.hxx
+--- libreoffice-3.4.5.2.orig/binfilter/inc/bf_xmloff/xmluconv.hxx	2012-07-16 10:12:06.925608979 +0100
++++ libreoffice-3.4.5.2/binfilter/inc/bf_xmloff/xmluconv.hxx	2012-07-16 10:20:34.418682974 +0100
+@@ -309,17 +309,6 @@
+     static sal_Int32 indexOfComma( const ::rtl::OUString& rStr,
+                                    sal_Int32 nPos );
+ 
+-    static void encodeBase64( ::rtl::OUStringBuffer& aStrBuffer, const ::com::sun::star::uno::Sequence<sal_Int8>& aPass);
+-
+-    // Decode a base 64 encoded string into a sequence of bytes. The first
+-    // version can be used for attribute values only, bacause it does not
+-    // return any chars left from conversion.
+-    // For text submitted throgh the SAX characters call, the later method
+-    // must be used!
+-    static void decodeBase64( ::com::sun::star::uno::Sequence<sal_Int8>& aPass, const ::rtl::OUString& sBuffer);
+-
+-    static sal_Int32 decodeBase64SomeChars( ::com::sun::star::uno::Sequence<sal_Int8>& aPass, const ::rtl::OUString& sBuffer);
+-
+     /** convert num-forat and num-letter-sync values to NumberingType */
+     sal_Bool convertNumFormat( sal_Int16& rType,
+                                 const ::rtl::OUString& rNumFormat,
+diff -ru libreoffice-3.4.5.2.orig/filter/source/placeware/Base64Codec.cxx libreoffice-3.4.5.2/filter/source/placeware/Base64Codec.cxx
+--- libreoffice-3.4.5.2.orig/filter/source/placeware/Base64Codec.cxx	2012-07-16 10:13:54.572897852 +0100
++++ libreoffice-3.4.5.2/filter/source/placeware/Base64Codec.cxx	2012-07-16 10:31:52.092768057 +0100
+@@ -1,210 +0,0 @@
+-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*************************************************************************
+- *
+- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+- * 
+- * Copyright 2000, 2010 Oracle and/or its affiliates.
+- *
+- * OpenOffice.org - a multi-platform office productivity suite
+- *
+- * This file is part of OpenOffice.org.
+- *
+- * OpenOffice.org is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU Lesser General Public License version 3
+- * only, as published by the Free Software Foundation.
+- *
+- * OpenOffice.org is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU Lesser General Public License version 3 for more details
+- * (a copy is included in the LICENSE file that accompanied this code).
+- *
+- * You should have received a copy of the GNU Lesser General Public License
+- * version 3 along with OpenOffice.org.  If not, see
+- * <http://www.openoffice.org/license.html>
+- * for a copy of the LGPLv3 License.
+- *
+- ************************************************************************/
+-
+-// MARKER(update_precomp.py): autogen include statement, do not remove
+-#include "precompiled_filter.hxx"
+-#include "Base64Codec.hxx"
+-#include <rtl/ustrbuf.hxx>
+-#include <osl/diagnose.h>
+-using namespace osl;
+-using namespace com::sun::star;
+-using ::rtl::OUString;
+-using ::rtl::OUStringBuffer;
+-const
+-  sal_Char aBase64EncodeTable[] =
+-    { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+-      'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+-      'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+-      'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+-      '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' };
+-
+-const
+-  sal_uInt8 aBase64DecodeTable[]  =
+-    { 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, // 0-15
+-
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, // 16-31
+-
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  0,  0, 63, // 32-47
+-//                                                +               /
+-
+-     52, 53, 54, 55, 56, 57, 58, 59, 60, 61,  0,  0,  0,  0,  0,  0, // 48-63
+-//    0   1   2   3   4   5   6   7   8   9               =
+-
+-      0,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, // 64-79
+-//        A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
+-
+-     15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,  0,  0,  0,  0,  0, // 80-95
+-//    P   Q   R   S   T   U   V   W   X   Y   Z
+-
+-      0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, // 96-111
+-//        a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
+-
+-     41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,  0,  0,  0,  0,  0, // 112-127
+-//    p   q   r   s   t   u   v   w   x   y   z
+-
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
+-
+-
+-void ThreeByteToFourByte (const sal_uInt8* pBuffer, const sal_Int32 nStart, const sal_Int32 nFullLen, rtl::OUStringBuffer& sBuffer)
+-{
+-    sal_Int32 nLen(nFullLen - nStart);
+-    if (nLen > 3)
+-        nLen = 3;
+-    if (nLen == 0)
+-    {
+-        sBuffer.setLength(0);
+-        return;
+-    }
+-
+-    sal_Int32 nBinaer;
+-    switch (nLen)
+-    {
+-        case 1:
+-        {
+-            nBinaer = ((sal_uInt8)pBuffer[nStart + 0]) << 16;
+-        }
+-        break;
+-        case 2:
+-        {
+-            nBinaer = (((sal_uInt8)pBuffer[nStart + 0]) << 16) +
+-                    (((sal_uInt8)pBuffer[nStart + 1]) <<  8);
+-        }
+-        break;
+-        default:
+-        {
+-            nBinaer = (((sal_uInt8)pBuffer[nStart + 0]) << 16) +
+-                    (((sal_uInt8)pBuffer[nStart + 1]) <<  8) +
+-                    ((sal_uInt8)pBuffer[nStart + 2]);
+-        }
+-        break;
+-    }
+-
+-    sBuffer.appendAscii("====");
+-
+-    sal_uInt8 nIndex = static_cast< sal_uInt8 >((nBinaer & 0xFC0000) >> 18);
+-    sBuffer.setCharAt(0, aBase64EncodeTable [nIndex]);
+-
+-    nIndex = static_cast< sal_uInt8 >((nBinaer & 0x3F000) >> 12);
+-    sBuffer.setCharAt(1, aBase64EncodeTable [nIndex]);
+-    if (nLen == 1)
+-        return;
+-
+-    nIndex = static_cast< sal_uInt8 >((nBinaer & 0xFC0) >> 6);
+-    sBuffer.setCharAt(2, aBase64EncodeTable [nIndex]);
+-    if (nLen == 2)
+-        return;
+-
+-    nIndex = static_cast< sal_uInt8 >((nBinaer & 0x3F));
+-    sBuffer.setCharAt(3, aBase64EncodeTable [nIndex]);
+-}
+-
+-void Base64Codec::encodeBase64(rtl::OUStringBuffer& aStrBuffer, const uno::Sequence < sal_Int8 >& aPass)
+-{
+-    sal_Int32 i(0);
+-    sal_Int32 nBufferLength(aPass.getLength());
+-    const sal_Int8* pBuffer = aPass.getConstArray();
+-    while (i < nBufferLength)
+-    {
+-        rtl::OUStringBuffer sBuffer;
+-        ThreeByteToFourByte ((const sal_uInt8*)pBuffer, i, nBufferLength, sBuffer);
+-        aStrBuffer.append(sBuffer);
+-        i += 3;
+-    }
+-}
+-
+-const rtl::OUString s2equal(RTL_CONSTASCII_USTRINGPARAM("=="));
+-const rtl::OUString s1equal(RTL_CONSTASCII_USTRINGPARAM("="));
+-#if 0
+-void FourByteToThreeByte (sal_uInt8* pBuffer, sal_Int32& nLength, const sal_Int32 nStart, const rtl::OUString& sString)
+-{
+-    nLength = 0;
+-    sal_Int32 nLen (sString.getLength());
+-
+-    if (nLen != 4)
+-    {
+-        return;
+-    }
+-
+-
+-    if (sString.indexOf(s2equal) == 2)
+-        nLength = 1;
+-    else if (sString.indexOf(s1equal) == 3)
+-        nLength = 2;
+-    else
+-        nLength = 3;
+-
+-    sal_Int32 nBinaer ((aBase64DecodeTable [sString [0]] << 18) +
+-            (aBase64DecodeTable [sString [1]] << 12) +
+-            (aBase64DecodeTable [sString [2]] <<  6) +
+-            (aBase64DecodeTable [sString [3]]));
+-
+-    sal_uInt8 OneByte = static_cast< sal_uInt8 >((nBinaer & 0xFF0000) >> 16);
+-    pBuffer[nStart + 0] = (sal_uInt8)OneByte;
+-
+-    if (nLength == 1)
+-        return;
+-
+-    OneByte = static_cast< sal_uInt8 >((nBinaer & 0xFF00) >> 8);
+-    pBuffer[nStart + 1] = (sal_uInt8)OneByte;
+-
+-    if (nLength == 2)
+-        return;
+-
+-    OneByte = static_cast< sal_uInt8 >(nBinaer & 0xFF);
+-    pBuffer[nStart + 2] = (sal_uInt8)OneByte;
+-}
+-
+-void Base64Codec::decodeBase64(uno::Sequence< sal_uInt8 >& aBuffer, const rtl::OUString& sBuffer)
+-{
+-    sal_Int32 nFirstLength((sBuffer.getLength() / 4) * 3);
+-    sal_uInt8* pBuffer = new sal_uInt8[nFirstLength];
+-    sal_Int32 nSecondLength(0);
+-    sal_Int32 nLength(0);
+-    sal_Int32 i = 0;
+-    sal_Int32 k = 0;
+-    while (i < sBuffer.getLength())
+-    {
+-        FourByteToThreeByte (pBuffer, nLength, k, sBuffer.copy(i, 4));
+-        nSecondLength += nLength;
+-        nLength = 0;
+-        i += 4;
+-        k += 3;
+-    }
+-    aBuffer = uno::Sequence<sal_uInt8>(pBuffer, nSecondLength);
+-    delete[] pBuffer;
+-}
+-#endif
+-
+-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+diff -ru libreoffice-3.4.5.2.orig/filter/source/placeware/Base64Codec.hxx libreoffice-3.4.5.2/filter/source/placeware/Base64Codec.hxx
+--- libreoffice-3.4.5.2.orig/filter/source/placeware/Base64Codec.hxx	2012-07-16 10:13:54.563897744 +0100
++++ libreoffice-3.4.5.2/filter/source/placeware/Base64Codec.hxx	2012-07-16 10:31:26.924467980 +0100
+@@ -1,50 +0,0 @@
+-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*************************************************************************
+- *
+- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+- * 
+- * Copyright 2000, 2010 Oracle and/or its affiliates.
+- *
+- * OpenOffice.org - a multi-platform office productivity suite
+- *
+- * This file is part of OpenOffice.org.
+- *
+- * OpenOffice.org is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU Lesser General Public License version 3
+- * only, as published by the Free Software Foundation.
+- *
+- * OpenOffice.org is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU Lesser General Public License version 3 for more details
+- * (a copy is included in the LICENSE file that accompanied this code).
+- *
+- * You should have received a copy of the GNU Lesser General Public License
+- * version 3 along with OpenOffice.org.  If not, see
+- * <http://www.openoffice.org/license.html>
+- * for a copy of the LGPLv3 License.
+- *
+- ************************************************************************/
+-
+-#ifndef _BASE64_CODEC_HXX
+-#define _BASE64_CODEC_HXX
+-
+-#include <com/sun/star/uno/Sequence.hxx>
+-
+-namespace rtl
+-{
+-class OUString;
+-class OUStringBuffer;
+-}
+-
+-class Base64Codec
+-{
+-public:
+-    static void encodeBase64(rtl::OUStringBuffer& aStrBuffer, const com::sun::star::uno::Sequence<sal_Int8>& aPass);
+-#if 0
+-    static void decodeBase64(com::sun::star::uno::Sequence<sal_uInt8>& aPass, const rtl::OUString& sBuffer);
+-#endif
+-};
+-#endif
+-
+-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+diff -ru libreoffice-3.4.5.2.orig/filter/source/placeware/exporter.cxx libreoffice-3.4.5.2/filter/source/placeware/exporter.cxx
+--- libreoffice-3.4.5.2.orig/filter/source/placeware/exporter.cxx	2012-07-16 10:13:54.563897744 +0100
++++ libreoffice-3.4.5.2/filter/source/placeware/exporter.cxx	2012-07-16 10:26:42.868079939 +0100
+@@ -41,12 +41,12 @@
+ #include <com/sun/star/task/XStatusIndicatorFactory.hpp>
+ #include <rtl/ustrbuf.hxx>
+ #include <rtl/string.hxx>
++#include <sax/tools/converter.hxx>
+ #include <osl/diagnose.h>
+ 
+ #include <vector>
+ 
+ #include "exporter.hxx"
+-#include "Base64Codec.hxx"
+ #include "zip.hxx"
+ #include "tempfile.hxx"
+ 
+@@ -163,7 +163,7 @@
+             nLen -= nRead;
+ 
+             rtl::OUStringBuffer aStrBuffer;
+-            Base64Codec::encodeBase64( aStrBuffer, aInBuffer );
++            ::sax::Converter::encodeBase64(aStrBuffer, aInBuffer);
+ 
+             sal_Int32 nCount = aStrBuffer.getLength();
+ 
+diff -ru libreoffice-3.4.5.2.orig/filter/source/placeware/makefile.mk libreoffice-3.4.5.2/filter/source/placeware/makefile.mk
+--- libreoffice-3.4.5.2.orig/filter/source/placeware/makefile.mk	2012-07-16 10:13:54.564897756 +0100
++++ libreoffice-3.4.5.2/filter/source/placeware/makefile.mk	2012-07-16 10:32:15.022041345 +0100
+@@ -42,7 +42,6 @@
+             $(SLO)$/filter.obj								\
+             $(SLO)$/uno.obj									\
+             $(SLO)$/exporter.obj							\
+-            $(SLO)$/Base64Codec.obj							\
+             $(SLO)$/tempfile.obj
+ 
+ # --- Library -----------------------------------
+@@ -50,6 +49,7 @@
+ SHL1TARGET=$(TARGET)$(DLLPOSTFIX)
+     
+ SHL1STDLIBS= \
++        $(SAXLIB)		\
+         $(CPPULIB)		\
+         $(CPPUHELPERLIB)	\
+         $(SALLIB)
+diff -ru libreoffice-3.4.5.2.orig/package/inc/PackageConstants.hxx libreoffice-3.4.5.2/package/inc/PackageConstants.hxx
+--- libreoffice-3.4.5.2.orig/package/inc/PackageConstants.hxx	2012-07-16 10:14:11.502100491 +0100
++++ libreoffice-3.4.5.2/package/inc/PackageConstants.hxx	2012-07-16 11:01:35.545971401 +0100
+@@ -40,19 +40,19 @@
+ const sal_Int32 n_ConstDigestDecrypt = 1056; // 1024 + 32
+ 
+ // the constants related to the manifest.xml entries
+-#define PKG_MNFST_MEDIATYPE 0
+-#define PKG_MNFST_VERSION   1
+-#define PKG_MNFST_FULLPATH  2
++#define PKG_MNFST_FULLPATH    0 //FullPath (Put full-path property first for MBA)
++#define PKG_MNFST_VERSION     1 //Version
++#define PKG_MNFST_MEDIATYPE   2 //MediaType
+ 
+-#define PKG_MNFST_INIVECTOR 3
+-#define PKG_MNFST_SALT      4
+-#define PKG_MNFST_ITERATION 5
+-#define PKG_MNFST_UCOMPSIZE 6
+-#define PKG_MNFST_DIGEST    7
+-#define PKG_MNFST_ENCALG      8
+-#define PKG_MNFST_STARTALG    9
+-#define PKG_MNFST_DIGESTALG  10
+-#define PKG_MNFST_DERKEYSIZE 11
++#define PKG_MNFST_INIVECTOR   3 //InitialisationVector
++#define PKG_MNFST_SALT        4 //Salt
++#define PKG_MNFST_ITERATION   5 //IterationCount
++#define PKG_MNFST_UCOMPSIZE   6 //Size
++#define PKG_MNFST_DIGEST      7 //Digest
++#define PKG_MNFST_ENCALG      8 //EncryptionAlgorithm
++#define PKG_MNFST_STARTALG    9 //StartKeyAlgorithm
++#define PKG_MNFST_DIGESTALG  10 //DigestAlgorithm
++#define PKG_MNFST_DERKEYSIZE 11 //DerivedKeySize
+ 
+ #define PKG_SIZE_NOENCR_MNFST 3
+ #define PKG_SIZE_ENCR_MNFST   12
+diff -ru libreoffice-3.4.5.2.orig/package/prj/build.lst libreoffice-3.4.5.2/package/prj/build.lst
+--- libreoffice-3.4.5.2.orig/package/prj/build.lst	2012-07-16 10:14:11.442099773 +0100
++++ libreoffice-3.4.5.2/package/prj/build.lst	2012-07-16 10:26:44.475098650 +0100
+@@ -1,4 +1,4 @@
+-pk	package	:	cppu cppuhelper comphelper ucbhelper sal ZLIB:zlib LIBXSLT:libxslt NULL
++pk	package	:	cppu cppuhelper comphelper ucbhelper sal ZLIB:zlib LIBXSLT:libxslt sax NULL
+ pk	package									usr1	-	all	pk_mkout NULL
+ pk	package\inc								nmake	-	all	pk_inc NULL
+ pk	package\source\zipapi					nmake	-	all	pk_zipapi pk_inc NULL
+diff -ru libreoffice-3.4.5.2.orig/package/source/manifest/Base64Codec.cxx libreoffice-3.4.5.2/package/source/manifest/Base64Codec.cxx
+--- libreoffice-3.4.5.2.orig/package/source/manifest/Base64Codec.cxx	2012-07-16 10:14:11.342098576 +0100
++++ libreoffice-3.4.5.2/package/source/manifest/Base64Codec.cxx	2012-07-16 10:30:12.507580720 +0100
+@@ -1,208 +0,0 @@
+-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*************************************************************************
+- *
+- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+- * 
+- * Copyright 2000, 2010 Oracle and/or its affiliates.
+- *
+- * OpenOffice.org - a multi-platform office productivity suite
+- *
+- * This file is part of OpenOffice.org.
+- *
+- * OpenOffice.org is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU Lesser General Public License version 3
+- * only, as published by the Free Software Foundation.
+- *
+- * OpenOffice.org is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU Lesser General Public License version 3 for more details
+- * (a copy is included in the LICENSE file that accompanied this code).
+- *
+- * You should have received a copy of the GNU Lesser General Public License
+- * version 3 along with OpenOffice.org.  If not, see
+- * <http://www.openoffice.org/license.html>
+- * for a copy of the LGPLv3 License.
+- *
+- ************************************************************************/
+-
+-// MARKER(update_precomp.py): autogen include statement, do not remove
+-#include "precompiled_package.hxx"
+-#include "Base64Codec.hxx"
+-#include <rtl/ustrbuf.hxx>
+-#include <osl/diagnose.h>
+-using namespace osl;
+-using namespace com::sun::star;
+-
+-using ::rtl::OUStringBuffer;
+-
+-const
+-  sal_Char aBase64EncodeTable[] =
+-    { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
+-      'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
+-      'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
+-      'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
+-      '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/' };
+-
+-const
+-  sal_uInt8 aBase64DecodeTable[]  =
+-    { 0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, // 0-15
+-
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, // 16-31
+-
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 62,  0,  0,  0, 63, // 32-47
+-//                                                +               /
+-
+-     52, 53, 54, 55, 56, 57, 58, 59, 60, 61,  0,  0,  0,  0,  0,  0, // 48-63
+-//    0   1   2   3   4   5   6   7   8   9               =
+-
+-      0,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, // 64-79
+-//        A   B   C   D   E   F   G   H   I   J   K   L   M   N   O
+-
+-     15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,  0,  0,  0,  0,  0, // 80-95
+-//    P   Q   R   S   T   U   V   W   X   Y   Z
+-
+-      0, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, // 96-111
+-//        a   b   c   d   e   f   g   h   i   j   k   l   m   n   o
+-
+-     41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,  0,  0,  0,  0,  0, // 112-127
+-//    p   q   r   s   t   u   v   w   x   y   z
+-
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
+-      0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
+-
+-
+-void ThreeByteToFourByte (const sal_uInt8* pBuffer, const sal_Int32 nStart, const sal_Int32 nFullLen, rtl::OUStringBuffer& sBuffer)
+-{
+-    sal_Int32 nLen(nFullLen - nStart);
+-    if (nLen > 3)
+-        nLen = 3;
+-    if (nLen == 0)
+-    {
+-        sBuffer.setLength(0);
+-        return;
+-    }
+-
+-    sal_Int32 nBinaer;
+-    switch (nLen)
+-    {
+-        case 1:
+-        {
+-            nBinaer = ((sal_uInt8)pBuffer[nStart + 0]) << 16;
+-        }
+-        break;
+-        case 2:
+-        {
+-            nBinaer = (((sal_uInt8)pBuffer[nStart + 0]) << 16) +
+-                    (((sal_uInt8)pBuffer[nStart + 1]) <<  8);
+-        }
+-        break;
+-        default:
+-        {
+-            nBinaer = (((sal_uInt8)pBuffer[nStart + 0]) << 16) +
+-                    (((sal_uInt8)pBuffer[nStart + 1]) <<  8) +
+-                    ((sal_uInt8)pBuffer[nStart + 2]);
+-        }
+-        break;
+-    }
+-
+-    sBuffer.appendAscii("====");
+-
+-    sal_uInt8 nIndex = static_cast< sal_uInt8 >((nBinaer & 0xFC0000) >> 18);
+-    sBuffer.setCharAt(0, aBase64EncodeTable [nIndex]);
+-
+-    nIndex = static_cast< sal_uInt8 >((nBinaer & 0x3F000) >> 12);
+-    sBuffer.setCharAt(1, aBase64EncodeTable [nIndex]);
+-    if (nLen == 1)
+-        return;
+-
+-    nIndex = static_cast< sal_uInt8 >((nBinaer & 0xFC0) >> 6);
+-    sBuffer.setCharAt(2, aBase64EncodeTable [nIndex]);
+-    if (nLen == 2)
+-        return;
+-
+-    nIndex = static_cast< sal_uInt8 >(nBinaer & 0x3F);
+-    sBuffer.setCharAt(3, aBase64EncodeTable [nIndex]);
+-}
+-
+-void Base64Codec::encodeBase64(rtl::OUStringBuffer& aStrBuffer, const uno::Sequence < sal_Int8 >& aPass)
+-{
+-    sal_Int32 i(0);
+-    sal_Int32 nBufferLength(aPass.getLength());
+-    const sal_uInt8* pBuffer = reinterpret_cast< const sal_uInt8* >( aPass.getConstArray() );
+-    while (i < nBufferLength)
+-    {
+-        rtl::OUStringBuffer sBuffer;
+-        ThreeByteToFourByte (pBuffer, i, nBufferLength, sBuffer);
+-        aStrBuffer.append(sBuffer);
+-        i += 3;
+-    }
+-}
+-
+-const rtl::OUString s2equal(RTL_CONSTASCII_USTRINGPARAM("=="));
+-const rtl::OUString s1equal(RTL_CONSTASCII_USTRINGPARAM("="));
+-
+-void FourByteToThreeByte (sal_uInt8* pBuffer, sal_Int32& nLength, const sal_Int32 nStart, const rtl::OUString& sString)
+-{
+-    nLength = 0;
+-    sal_Int32 nLen (sString.getLength());
+-
+-    OSL_ASSERT( nLen == 4 );
+-    if (nLen != 4)
+-        return;
+-
+-    if (sString.indexOf(s2equal) == 2)
+-        nLength = 1;
+-    else if (sString.indexOf(s1equal) == 3)
+-        nLength = 2;
+-    else
+-        nLength = 3;
+-
+-    sal_Int32 nBinaer ((aBase64DecodeTable [sString [0]] << 18) +
+-            (aBase64DecodeTable [sString [1]] << 12) +
+-            (aBase64DecodeTable [sString [2]] <<  6) +
+-            (aBase64DecodeTable [sString [3]]));
+-
+-    sal_uInt8 OneByte = static_cast< sal_uInt8 >((nBinaer & 0xFF0000) >> 16);
+-    pBuffer[nStart + 0] = (sal_uInt8)OneByte;
+-
+-    if (nLength == 1)
+-        return;
+-
+-    OneByte = static_cast< sal_uInt8 >((nBinaer & 0xFF00) >> 8);
+-    pBuffer[nStart + 1] = OneByte;
+-
+-    if (nLength == 2)
+-        return;
+-
+-    OneByte = static_cast< sal_uInt8 >(nBinaer & 0xFF);
+-    pBuffer[nStart + 2] = OneByte;
+-}
+-
+-void Base64Codec::decodeBase64(uno::Sequence< sal_Int8 >& aBuffer, const rtl::OUString& sBuffer)
+-{
+-    sal_Int32 nFirstLength((sBuffer.getLength() / 4) * 3);
+-    sal_uInt8* pBuffer = new sal_uInt8[nFirstLength];
+-    sal_Int32 nSecondLength(0);
+-    sal_Int32 nLength(0);
+-    sal_Int32 i = 0;
+-    sal_Int32 k = 0;
+-    while (i < sBuffer.getLength())
+-    {
+-        FourByteToThreeByte (pBuffer, nLength, k, sBuffer.copy(i, 4));
+-        nSecondLength += nLength;
+-        nLength = 0;
+-        i += 4;
+-        k += 3;
+-    }
+-    aBuffer = uno::Sequence<sal_Int8>( reinterpret_cast< sal_Int8* >( pBuffer ), nSecondLength );
+-    delete[] pBuffer;
+-}
+-
+-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+diff -ru libreoffice-3.4.5.2.orig/package/source/manifest/Base64Codec.hxx libreoffice-3.4.5.2/package/source/manifest/Base64Codec.hxx
+--- libreoffice-3.4.5.2.orig/package/source/manifest/Base64Codec.hxx	2012-07-16 10:14:11.330098433 +0100
++++ libreoffice-3.4.5.2/package/source/manifest/Base64Codec.hxx	2012-07-16 10:30:02.284458821 +0100
+@@ -1,48 +0,0 @@
+-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+-/*************************************************************************
+- *
+- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+- * 
+- * Copyright 2000, 2010 Oracle and/or its affiliates.
+- *
+- * OpenOffice.org - a multi-platform office productivity suite
+- *
+- * This file is part of OpenOffice.org.
+- *
+- * OpenOffice.org is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU Lesser General Public License version 3
+- * only, as published by the Free Software Foundation.
+- *
+- * OpenOffice.org is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU Lesser General Public License version 3 for more details
+- * (a copy is included in the LICENSE file that accompanied this code).
+- *
+- * You should have received a copy of the GNU Lesser General Public License
+- * version 3 along with OpenOffice.org.  If not, see
+- * <http://www.openoffice.org/license.html>
+- * for a copy of the LGPLv3 License.
+- *
+- ************************************************************************/
+-
+-#ifndef _BASE64_CODEC_HXX
+-#define _BASE64_CODEC_HXX
+-
+-#include <com/sun/star/uno/Sequence.hxx>
+-
+-namespace rtl
+-{
+-class OUString;
+-class OUStringBuffer;
+-}
+-
+-class Base64Codec
+-{
+-public:
+-    static void encodeBase64(rtl::OUStringBuffer& aStrBuffer, const com::sun::star::uno::Sequence<sal_Int8>& aPass);
+-    static void decodeBase64(com::sun::star::uno::Sequence<sal_Int8>& aPass, const rtl::OUString& sBuffer);
+-};
+-#endif
+-
+-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
+diff -ru libreoffice-3.4.5.2.orig/package/source/manifest/makefile.mk libreoffice-3.4.5.2/package/source/manifest/makefile.mk
+--- libreoffice-3.4.5.2.orig/package/source/manifest/makefile.mk	2012-07-16 10:14:11.331098445 +0100
++++ libreoffice-3.4.5.2/package/source/manifest/makefile.mk	2012-07-16 10:31:08.556249065 +0100
+@@ -45,7 +45,6 @@
+         $(SLO)$/ManifestWriter.obj \
+         $(SLO)$/ManifestImport.obj \
+         $(SLO)$/ManifestExport.obj \
+-        $(SLO)$/Base64Codec.obj \
+         $(SLO)$/UnoRegister.obj
+ 
+ .ENDIF # L10N_framework
+diff -ru libreoffice-3.4.5.2.orig/package/source/manifest/ManifestExport.cxx libreoffice-3.4.5.2/package/source/manifest/ManifestExport.cxx
+--- libreoffice-3.4.5.2.orig/package/source/manifest/ManifestExport.cxx	2012-07-16 10:14:11.342098576 +0100
++++ libreoffice-3.4.5.2/package/source/manifest/ManifestExport.cxx	2012-07-16 10:29:38.875179695 +0100
+@@ -32,7 +32,7 @@
+ #include <ManifestDefines.hxx>
+ #include <com/sun/star/xml/sax/XAttributeList.hpp>
+ #include <rtl/ustrbuf.hxx>
+-#include <Base64Codec.hxx>
++#include <sax/tools/converter.hxx>
+ #include <com/sun/star/xml/sax/XExtendedDocumentHandler.hpp>
+ #include <com/sun/star/xml/sax/XDocumentHandler.hpp>
+ #include <com/sun/star/beans/PropertyValue.hpp>
+@@ -246,7 +246,7 @@
+             {
+                 pNewAttrList->AddAttribute ( sChecksumTypeAttribute, sCdataAttribute, sChecksumType );
+                 pDigest->Value >>= aSequence;
+-                Base64Codec::encodeBase64 ( aBuffer, aSequence );
++                ::sax::Converter::encodeBase64( aBuffer, aSequence );
+                 pNewAttrList->AddAttribute ( sChecksumAttribute, sCdataAttribute, aBuffer.makeStringAndClear() );
+             }
+             xHandler->startElement( sEncryptionDataElement , xNewAttrList);
+@@ -258,7 +258,7 @@
+             pNewAttrList->AddAttribute ( sAlgorithmNameAttribute, sCdataAttribute, sBlowfish );
+ 
+             pVector->Value >>= aSequence;
+-            Base64Codec::encodeBase64 ( aBuffer, aSequence );
++            ::sax::Converter::encodeBase64( aBuffer, aSequence );
+             pNewAttrList->AddAttribute ( sInitialisationVectorAttribute, sCdataAttribute, aBuffer.makeStringAndClear() );
+ 
+             xHandler->ignorableWhitespace ( sWhiteSpace );
+@@ -281,7 +281,7 @@
+             pNewAttrList->AddAttribute ( sIterationCountAttribute, sCdataAttribute, aBuffer.makeStringAndClear() );
+ 
+             pSalt->Value >>= aSequence;
+-            Base64Codec::encodeBase64 ( aBuffer, aSequence );
++            ::sax::Converter::encodeBase64( aBuffer, aSequence );
+             pNewAttrList->AddAttribute ( sSaltAttribute, sCdataAttribute, aBuffer.makeStringAndClear() );
+ 
+             xHandler->ignorableWhitespace ( sWhiteSpace );
+diff -ru libreoffice-3.4.5.2.orig/package/source/manifest/ManifestImport.cxx libreoffice-3.4.5.2/package/source/manifest/ManifestImport.cxx
+--- libreoffice-3.4.5.2.orig/package/source/manifest/ManifestImport.cxx	2012-07-16 10:14:11.341098564 +0100
++++ libreoffice-3.4.5.2/package/source/manifest/ManifestImport.cxx	2012-07-16 11:03:31.155672727 +0100
+@@ -30,7 +30,7 @@
+ #include "precompiled_package.hxx"
+ #include <ManifestImport.hxx>
+ #include <ManifestDefines.hxx>
+-#include <Base64Codec.hxx>
++#include <sax/tools/converter.hxx>
+ #include <com/sun/star/xml/sax/XAttributeList.hpp>
+ #include <com/sun/star/xml/crypto/DigestID.hpp>
+ #include <com/sun/star/xml/crypto/CipherID.hpp>
+@@ -45,8 +45,7 @@
+ 
+ // ---------------------------------------------------
+ ManifestImport::ManifestImport( vector < Sequence < PropertyValue > > & rNewManVector )
+-: nNumProperty ( 0 )
+-, bIgnoreEncryptData 	( sal_False )
++: bIgnoreEncryptData    ( sal_False )
+ , nDerivedKeySize( 0 )
+ , rManVector ( rNewManVector )
+ 
+@@ -126,176 +125,235 @@
+ }
+ 
+ // ---------------------------------------------------
+-void SAL_CALL ManifestImport::startElement( const OUString& aName, const uno::Reference< xml::sax::XAttributeList >& xAttribs ) 	
+-        throw( xml::sax::SAXException, uno::RuntimeException )
++void ManifestImport::doFileEntry(StringHashMap &rConvertedAttribs)
++        throw( uno::RuntimeException )
+ {
+-    StringHashMap aConvertedAttribs;
+-    ::rtl::OUString aConvertedName = PushNameAndNamespaces( aName, xAttribs, aConvertedAttribs );
++    aSequence.resize(PKG_SIZE_ENCR_MNFST);
+ 
+-    if ( aConvertedName == sFileEntryElement )
++    aSequence[PKG_MNFST_FULLPATH].Name = sFullPathProperty;
++    aSequence[PKG_MNFST_FULLPATH].Value <<= rConvertedAttribs[sFullPathAttribute];
++    aSequence[PKG_MNFST_MEDIATYPE].Name = sMediaTypeProperty;
++    aSequence[PKG_MNFST_MEDIATYPE].Value <<= rConvertedAttribs[sMediaTypeAttribute];
++
++    OUString sVersion = rConvertedAttribs[sVersionAttribute];
++    if ( sVersion.getLength() )
+     {
+-        aSequence.realloc ( PKG_SIZE_ENCR_MNFST );
++        aSequence[PKG_MNFST_VERSION].Name = sVersionProperty;
++        aSequence[PKG_MNFST_VERSION].Value <<= sVersion;
++    }
+ 
+-        // Put full-path property first for MBA
+-        aSequence[nNumProperty].Name = sFullPathProperty;
+-        aSequence[nNumProperty++].Value <<= aConvertedAttribs[sFullPathAttribute];
+-        aSequence[nNumProperty].Name = sMediaTypeProperty;
+-        aSequence[nNumProperty++].Value <<= aConvertedAttribs[sMediaTypeAttribute];
++    OUString sSize = rConvertedAttribs[sSizeAttribute];
++    if ( sSize.getLength() )
++    {
++        sal_Int32 nSize = sSize.toInt32();
++        aSequence[PKG_MNFST_UCOMPSIZE].Name = sSizeProperty;
++        aSequence[PKG_MNFST_UCOMPSIZE].Value <<= nSize;
++    }
++}
+ 
+-        OUString sVersion = aConvertedAttribs[sVersionAttribute];
+-        if ( sVersion.getLength() )
++void ManifestImport::doEncryptionData(StringHashMap &rConvertedAttribs)
++        throw( uno::RuntimeException )
++{
++    // If this element exists, then this stream is encrypted and we need
++    // to import the initialisation vector, salt and iteration count used
++    nDerivedKeySize = 0;
++    OUString aString = rConvertedAttribs[sChecksumTypeAttribute];
++    if ( !bIgnoreEncryptData )
++    {
++        if ( aString.equals( sSHA1_1k_Name ) || aString.equals( sSHA1_1k_URL ) )
++        {
++            aSequence[PKG_MNFST_DIGESTALG].Name = sDigestAlgProperty;
++            aSequence[PKG_MNFST_DIGESTALG].Value <<= xml::crypto::DigestID::SHA1_1K;
++        }
++        else if ( aString.equals( sSHA256_1k_URL ) )
+         {
+-            aSequence[nNumProperty].Name = sVersionProperty;
+-            aSequence[nNumProperty++].Value <<= sVersion;
++            aSequence[PKG_MNFST_DIGESTALG].Name = sDigestAlgProperty;
++            aSequence[PKG_MNFST_DIGESTALG].Value <<= xml::crypto::DigestID::SHA256_1K;
+         }
++        else
++            bIgnoreEncryptData = sal_True;
+ 
+-        OUString sSize = aConvertedAttribs[sSizeAttribute];
+-        if ( sSize.getLength() )
++        if ( !bIgnoreEncryptData )
+         {
+-            sal_Int32 nSize;
+-            nSize = sSize.toInt32();
+-            aSequence[nNumProperty].Name = sSizeProperty;
+-            aSequence[nNumProperty++].Value <<= nSize;
++            aString = rConvertedAttribs[sChecksumAttribute];
++            uno::Sequence < sal_Int8 > aDecodeBuffer;
++            ::sax::Converter::decodeBase64(aDecodeBuffer, aString);
++            aSequence[PKG_MNFST_DIGEST].Name = sDigestProperty;
++            aSequence[PKG_MNFST_DIGEST].Value <<= aDecodeBuffer;
+         }
+     }
+-    else if ( aStack.size() > 1 )
++}
++
++void ManifestImport::doAlgorithm(StringHashMap &rConvertedAttribs)
++        throw( uno::RuntimeException )
++{
++    if ( !bIgnoreEncryptData )
+     {
+-        ManifestStack::reverse_iterator aIter = aStack.rbegin();
+-        ++aIter;
++        OUString aString = rConvertedAttribs[sAlgorithmNameAttribute];
++        if ( aString.equals( sBlowfish_Name ) || aString.equals( sBlowfish_URL ) )
++        {
++            aSequence[PKG_MNFST_ENCALG].Name = sEncryptionAlgProperty;
++            aSequence[PKG_MNFST_ENCALG].Value <<= xml::crypto::CipherID::BLOWFISH_CFB_8;
++        }
++        else if ( aString.equals( sAES256_URL ) )
++        {
++            aSequence[PKG_MNFST_ENCALG].Name = sEncryptionAlgProperty;
++            aSequence[PKG_MNFST_ENCALG].Value <<= xml::crypto::CipherID::AES_CBC_W3C_PADDING;
++            OSL_ENSURE( !nDerivedKeySize || nDerivedKeySize == 32, "Unexpected derived key length!" );
++            nDerivedKeySize = 32;
++        }
++        else if ( aString.equals( sAES192_URL ) )
++        {
++            aSequence[PKG_MNFST_ENCALG].Name = sEncryptionAlgProperty;
++            aSequence[PKG_MNFST_ENCALG].Value <<= xml::crypto::CipherID::AES_CBC_W3C_PADDING;
++            OSL_ENSURE( !nDerivedKeySize || nDerivedKeySize == 24, "Unexpected derived key length!" );
++            nDerivedKeySize = 24;
++        }
++        else if ( aString.equals( sAES128_URL ) )
++        {
++            aSequence[PKG_MNFST_ENCALG].Name = sEncryptionAlgProperty;
++            aSequence[PKG_MNFST_ENCALG].Value <<= xml::crypto::CipherID::AES_CBC_W3C_PADDING;
++            OSL_ENSURE( !nDerivedKeySize || nDerivedKeySize == 16, "Unexpected derived key length!" );
++            nDerivedKeySize = 16;
++        }
++        else
++            bIgnoreEncryptData = sal_True;
++
++        if ( !bIgnoreEncryptData )
++        {
++            aString = rConvertedAttribs[sInitialisationVectorAttribute];
++            uno::Sequence < sal_Int8 > aDecodeBuffer;
++            ::sax::Converter::decodeBase64(aDecodeBuffer, aString);
++            aSequence[PKG_MNFST_INIVECTOR].Name = sInitialisationVectorProperty;
++            aSequence[PKG_MNFST_INIVECTOR].Value <<= aDecodeBuffer;
++        }
++    }
++}
+ 
+-        if ( aIter->m_aConvertedName.equals( sFileEntryElement ) )
++void ManifestImport::doKeyDerivation(StringHashMap &rConvertedAttribs)
++        throw( uno::RuntimeException )
++{
++    if ( !bIgnoreEncryptData )
++    {
++        OUString aString = rConvertedAttribs[sKeyDerivationNameAttribute];
++        if ( aString.equals( sPBKDF2_Name ) || aString.equals( sPBKDF2_URL ) )
+         {
+-            if ( aConvertedName.equals( sEncryptionDataElement ) )
++            aString = rConvertedAttribs[sSaltAttribute];
++            uno::Sequence < sal_Int8 > aDecodeBuffer;
++            ::sax::Converter::decodeBase64(aDecodeBuffer, aString);
++            aSequence[PKG_MNFST_SALT].Name = sSaltProperty;
++            aSequence[PKG_MNFST_SALT].Value <<= aDecodeBuffer;
++
++            aString = rConvertedAttribs[sIterationCountAttribute];
++            aSequence[PKG_MNFST_ITERATION].Name = sIterationCountProperty;
++            aSequence[PKG_MNFST_ITERATION].Value <<= aString.toInt32();
++
++            aString = rConvertedAttribs[sKeySizeAttribute];
++            if ( aString.getLength() )
+             {
+-                // If this element exists, then this stream is encrypted and we need
+-                // to import the initialisation vector, salt and iteration count used
+-                nDerivedKeySize = 0;
+-                OUString aString = aConvertedAttribs[sChecksumTypeAttribute];
+-                if ( !bIgnoreEncryptData )
+-                {
+-                    if ( aString.equals( sSHA1_1k_Name ) || aString.equals( sSHA1_1k_URL ) )
+-                    {
+-                        aSequence[nNumProperty].Name = sDigestAlgProperty;
+-                        aSequence[nNumProperty++].Value <<= xml::crypto::DigestID::SHA1_1K;
+-                    }
+-                    else if ( aString.equals( sSHA256_1k_URL ) )
+-                    {
+-                        aSequence[nNumProperty].Name = sDigestAlgProperty;
+-                        aSequence[nNumProperty++].Value <<= xml::crypto::DigestID::SHA256_1K;
+-                    }
+-                    else
+-                        bIgnoreEncryptData = sal_True;
+-
+-                    if ( !bIgnoreEncryptData )
+-                {
+-                    aString = aConvertedAttribs[sChecksumAttribute];
+-                    Sequence < sal_Int8 > aDecodeBuffer;
+-                    Base64Codec::decodeBase64 ( aDecodeBuffer, aString );
+-                    aSequence[nNumProperty].Name = sDigestProperty;
+-                    aSequence[nNumProperty++].Value <<= aDecodeBuffer;
+-                }
++                sal_Int32 nKey = aString.toInt32();
++                OSL_ENSURE( !nDerivedKeySize || nKey == nDerivedKeySize , "Provided derived key length differs from the expected one!" );
++                nDerivedKeySize = nKey;
+             }
++            else if ( !nDerivedKeySize )
++                nDerivedKeySize = 16;
++            else if ( nDerivedKeySize != 16 )
++                OSL_ENSURE( sal_False, "Default derived key length differs from the expected one!" );
++
++            aSequence[PKG_MNFST_DERKEYSIZE].Name = sDerivedKeySizeProperty;
++            aSequence[PKG_MNFST_DERKEYSIZE].Value <<= nDerivedKeySize;
+         }
++        else
++            bIgnoreEncryptData = sal_True;
++    }
++}
++
++void ManifestImport::doStartKeyAlg(StringHashMap &rConvertedAttribs)
++        throw( uno::RuntimeException )
++{
++    OUString aString = rConvertedAttribs[sStartKeyAlgNameAttribute];
++    if ( aString.equals( sSHA256_URL ) )
++    {
++        aSequence[PKG_MNFST_STARTALG].Name = sStartKeyAlgProperty;
++        aSequence[PKG_MNFST_STARTALG].Value <<= xml::crypto::DigestID::SHA256;
++    }
++    else if ( aString.equals( sSHA1_Name ) || aString.equals( sSHA1_URL ) )
++    {
++        aSequence[PKG_MNFST_STARTALG].Name = sStartKeyAlgProperty;
++        aSequence[PKG_MNFST_STARTALG].Value <<= xml::crypto::DigestID::SHA1;
++    }
++    else
++        bIgnoreEncryptData = sal_True;
++}
++
++// ---------------------------------------------------
++void SAL_CALL ManifestImport::startElement( const OUString& aName, const uno::Reference< xml::sax::XAttributeList >& xAttribs )
++        throw( xml::sax::SAXException, uno::RuntimeException )
++{
++    StringHashMap aConvertedAttribs;
++    ::rtl::OUString aConvertedName = PushNameAndNamespaces( aName, xAttribs, aConvertedAttribs );
++
++    size_t nLevel = aStack.size();
++
++    assert(nLevel >= 1);
++
++    switch (nLevel)
++    {
++        case 1:
++        {
++            if (!aConvertedName.equalsAscii(ELEMENT_MANIFEST)) //manifest:manifest
++                aStack.back().m_bValid = false;
++            break;
+         }
+-        else if ( aIter->m_aConvertedName.equals( sEncryptionDataElement ) )
++        case 2:
+         {
+-            if ( aConvertedName == sAlgorithmElement )
+-            {
+-                if ( !bIgnoreEncryptData )
+-                {
+-                OUString aString = aConvertedAttribs[sAlgorithmNameAttribute];
+-                    if ( aString.equals( sBlowfish_Name ) || aString.equals( sBlowfish_URL ) )
+-                    {
+-                        aSequence[nNumProperty].Name = sEncryptionAlgProperty;
+-                        aSequence[nNumProperty++].Value <<= xml::crypto::CipherID::BLOWFISH_CFB_8;
+-                    }
+-                    else if ( aString.equals( sAES256_URL ) )
+-                    {
+-                        aSequence[nNumProperty].Name = sEncryptionAlgProperty;
+-                        aSequence[nNumProperty++].Value <<= xml::crypto::CipherID::AES_CBC_W3C_PADDING;
+-                        OSL_ENSURE( !nDerivedKeySize || nDerivedKeySize == 32, "Unexpected derived key length!" );
+-                        nDerivedKeySize = 32;
+-                    }
+-                    else if ( aString.equals( sAES192_URL ) )
+-                    {
+-                        aSequence[nNumProperty].Name = sEncryptionAlgProperty;
+-                        aSequence[nNumProperty++].Value <<= xml::crypto::CipherID::AES_CBC_W3C_PADDING;
+-                        OSL_ENSURE( !nDerivedKeySize || nDerivedKeySize == 24, "Unexpected derived key length!" );
+-                        nDerivedKeySize = 24;
+-                    }
+-                    else if ( aString.equals( sAES128_URL ) )
+-                    {
+-                        aSequence[nNumProperty].Name = sEncryptionAlgProperty;
+-                        aSequence[nNumProperty++].Value <<= xml::crypto::CipherID::AES_CBC_W3C_PADDING;
+-                        OSL_ENSURE( !nDerivedKeySize || nDerivedKeySize == 16, "Unexpected derived key length!" );
+-                        nDerivedKeySize = 16;
+-                    }
+-                    else
+-                        bIgnoreEncryptData = sal_True;
+-
+-                    if ( !bIgnoreEncryptData )
+-                {
+-                    aString = aConvertedAttribs[sInitialisationVectorAttribute];
+-                    Sequence < sal_Int8 > aDecodeBuffer;
+-                    Base64Codec::decodeBase64 ( aDecodeBuffer, aString );
+-                    aSequence[nNumProperty].Name = sInitialisationVectorProperty;
+-                    aSequence[nNumProperty++].Value <<= aDecodeBuffer;
+-                }
+-                }
+-            }
+-            else if ( aConvertedName == sKeyDerivationElement )
+-            {
+-                if ( !bIgnoreEncryptData )
+-                {
+-                OUString aString = aConvertedAttribs[sKeyDerivationNameAttribute];
+-                    if ( aString.equals( sPBKDF2_Name ) || aString.equals( sPBKDF2_URL ) )
+-                {
+-                    aString = aConvertedAttribs[sSaltAttribute];
+-                    Sequence < sal_Int8 > aDecodeBuffer;
+-                    Base64Codec::decodeBase64 ( aDecodeBuffer, aString );
+-                    aSequence[nNumProperty].Name = sSaltProperty;
+-                    aSequence[nNumProperty++].Value <<= aDecodeBuffer;
+-
+-                    aString = aConvertedAttribs[sIterationCountAttribute];
+-                    aSequence[nNumProperty].Name = sIterationCountProperty;
+-                    aSequence[nNumProperty++].Value <<= aString.toInt32();
+-
+-                        aString = aConvertedAttribs[sKeySizeAttribute];
+-                        if ( aString.getLength() )
+-                        {
+-                            sal_Int32 nKey = aString.toInt32();
+-                            OSL_ENSURE( !nDerivedKeySize || nKey == nDerivedKeySize , "Provided derived key length differs from the expected one!" );
+-                            nDerivedKeySize = nKey;
+-                        }
+-                        else if ( !nDerivedKeySize )
+-                            nDerivedKeySize = 16;
+-                        else if ( nDerivedKeySize != 16 )
+-                            OSL_ENSURE( sal_False, "Default derived key length differs from the expected one!" );
+-
+-                        aSequence[nNumProperty].Name = sDerivedKeySizeProperty;
+-                        aSequence[nNumProperty++].Value <<= nDerivedKeySize;
+-                }
+-                else
+-                        bIgnoreEncryptData = sal_True;
+-                }
+-            }
+-            else if ( aConvertedName == sStartKeyAlgElement )
+-            {
+-                OUString aString = aConvertedAttribs[sStartKeyAlgNameAttribute];
+-                if (aString.equals(sSHA256_URL) || aString.equals(sSHA256_URL_TYPO))
+-                {
+-                    aSequence[nNumProperty].Name = sStartKeyAlgProperty;
+-                    aSequence[nNumProperty++].Value <<= xml::crypto::DigestID::SHA256;
+-                }
+-                else if ( aString.equals( sSHA1_Name ) || aString.equals( sSHA1_URL ) )
+-                {
+-                    aSequence[nNumProperty].Name = sStartKeyAlgProperty;
+-                    aSequence[nNumProperty++].Value <<= xml::crypto::DigestID::SHA1;
+-                }
+-                else
+-                    bIgnoreEncryptData = sal_True;
+-            }
++            if (aConvertedName == sFileEntryElement) //manifest:file-entry
++                doFileEntry(aConvertedAttribs);
++            else
++                aStack.back().m_bValid = false;
++            break;
+         }
++        case 3:
++        {
++            ManifestStack::reverse_iterator aIter = aStack.rbegin();
++            ++aIter;
++
++            if (!aIter->m_bValid)
++                aStack.back().m_bValid = false;
++            else if (aConvertedName.equals(sEncryptionDataElement))   //manifest:encryption-data
++                doEncryptionData(aConvertedAttribs);
++            else
++                aStack.back().m_bValid = false;
++            break;
++        }
++        case 4:
++        {
++            ManifestStack::reverse_iterator aIter = aStack.rbegin();
++            ++aIter;
++
++            if (!aIter->m_bValid)
++                aStack.back().m_bValid = false;
++            else if (aConvertedName.equals(sAlgorithmElement))   //manifest:algorithm,
++                doAlgorithm(aConvertedAttribs);
++            else if (aConvertedName.equals(sKeyDerivationElement)) //manifest:key-derivation,
++                doKeyDerivation(aConvertedAttribs);
++            else if (aConvertedName.equals(sStartKeyAlgElement))   //manifest:start-key-generation
++                doStartKeyAlg(aConvertedAttribs);
++            else
++                aStack.back().m_bValid = false;
++            break;
++        }
++        default:
++            aStack.back().m_bValid = false;
++            break;
++    }
++}
++
++namespace
++{
++    bool isEmpty(const com::sun::star::beans::PropertyValue &rProp)
++    {
++        return rProp.Name.isEmpty();
+     }
+ }
+ 
+@@ -306,12 +364,16 @@
+     ::rtl::OUString aConvertedName = ConvertName( aName );
+     if ( !aStack.empty() && aStack.rbegin()->m_aConvertedName.equals( aConvertedName ) )
+     { 
+-        if ( aConvertedName.equals( sFileEntryElement ) )
++        if ( aConvertedName.equals( sFileEntryElement ) && aStack.back().m_bValid )
+         {
+-            aSequence.realloc ( nNumProperty );
++            com::sun::star::beans::PropertyValue aEmpty;
++            aSequence.erase(std::remove_if(aSequence.begin(), aSequence.end(),
++                isEmpty), aSequence.end());
++
+             bIgnoreEncryptData = sal_False;
+-            rManVector.push_back ( aSequence );
+-            nNumProperty = 0;
++            rManVector.push_back ( aSequence.getAsConstList() );
++
++            aSequence.clear();
+         }
+ 
+         aStack.pop_back();
+diff -ru libreoffice-3.4.5.2.orig/package/source/manifest/ManifestImport.hxx libreoffice-3.4.5.2/package/source/manifest/ManifestImport.hxx
+--- libreoffice-3.4.5.2.orig/package/source/manifest/ManifestImport.hxx	2012-07-16 10:14:11.340098552 +0100
++++ libreoffice-3.4.5.2/package/source/manifest/ManifestImport.hxx	2012-07-16 11:02:04.459397522 +0100
+@@ -31,6 +31,7 @@
+ 
+ #include <cppuhelper/implbase1.hxx> // helper for implementations
+ #include <com/sun/star/xml/sax/XDocumentHandler.hpp>
++#include <comphelper/sequenceasvector.hxx>
+ #include <vector>
+ 
+ #include <HashMaps.hxx>
+@@ -46,10 +47,12 @@
+ {
+     ::rtl::OUString m_aConvertedName;
+     StringHashMap   m_aNamespaces;
++    bool            m_bValid;
+ 
+     ManifestScopeEntry( const ::rtl::OUString& aConvertedName, const StringHashMap& aNamespaces )
+     : m_aConvertedName( aConvertedName )
+     , m_aNamespaces( aNamespaces )
++    , m_bValid( true )
+     {}
+ 
+     ~ManifestScopeEntry()
+@@ -61,8 +64,7 @@
+ class ManifestImport : public cppu::WeakImplHelper1 < com::sun::star::xml::sax::XDocumentHandler >
+ {
+ protected:
+-    com::sun::star::uno::Sequence < com::sun::star::beans::PropertyValue > aSequence;
+-    sal_Int16 		nNumProperty;
++    comphelper::SequenceAsVector< com::sun::star::beans::PropertyValue > aSequence;
+     ManifestStack aStack;
+     sal_Bool bIgnoreEncryptData;
+     sal_Int32 nDerivedKeySize;
+@@ -149,6 +151,12 @@
+         throw(::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
+     virtual void SAL_CALL setDocumentLocator( const ::com::sun::star::uno::Reference< ::com::sun::star::xml::sax::XLocator >& xLocator ) 	
+         throw(::com::sun::star::xml::sax::SAXException, ::com::sun::star::uno::RuntimeException);
++private:
++    void doFileEntry(StringHashMap &rConvertedAttribs) throw(::com::sun::star::uno::RuntimeException);
++    void doEncryptionData(StringHashMap &rConvertedAttribs) throw(::com::sun::star::uno::RuntimeException);
++    void doAlgorithm(StringHashMap &rConvertedAttribs) throw(::com::sun::star::uno::RuntimeException);
++    void doKeyDerivation(StringHashMap &rConvertedAttribs) throw(::com::sun::star::uno::RuntimeException);
++    void doStartKeyAlg(StringHashMap &rConvertedAttribs) throw(::com::sun::star::uno::RuntimeException);
+ };
+ #endif
+ 
+diff -ru libreoffice-3.4.5.2.orig/package/source/zipapi/ZipFile.cxx libreoffice-3.4.5.2/package/source/zipapi/ZipFile.cxx
+--- libreoffice-3.4.5.2.orig/package/source/zipapi/ZipFile.cxx	2012-07-16 10:14:11.391099163 +0100
++++ libreoffice-3.4.5.2/package/source/zipapi/ZipFile.cxx	2012-07-16 10:34:13.201449076 +0100
+@@ -194,6 +194,12 @@
+ 
+     try
+     {
++        if (xEncryptionData->m_nDerivedKeySize < 0)
++        {
++            throw ZipIOException( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Invalid derived key length!") ),
++                                  uno::Reference< XInterface >() );
++        }
++
+         uno::Sequence< sal_Int8 > aDerivedKey( xEncryptionData->m_nDerivedKeySize );
+         if ( rtl_Digest_E_None != rtl_digest_PBKDF2( reinterpret_cast< sal_uInt8* >( aDerivedKey.getArray() ),
+                                    aDerivedKey.getLength(),
+@@ -229,7 +235,7 @@
+                                   uno::Reference< XInterface >() );
+         }
+     }
+-    catch( uno::Exception& )
++    catch( ... )
+     {
+         OSL_ENSURE( sal_False, "Can not create cipher context!" );
+     }
+@@ -807,7 +813,7 @@
+                         || rEntry.nPathLen != nPathLen
+                         || !rEntry.sPath.equals( sLOCPath );
+     }
+-    catch(::std::bad_alloc &)
++    catch(...)
+     {
+         bBroken = sal_True;
+     }
+--- libreoffice-3.4.5.2.orig/package/util/makefile.mk	2012-07-16 10:14:11.441099761 +0100
++++ libreoffice-3.4.5.2/package/util/makefile.mk	2012-07-16 15:48:57.360289921 +0100
+@@ -58,6 +58,7 @@
+ SHL1USE_EXPORTS=name
+ 
+ SHL1STDLIBS=\
++    $(SAXLIB) \
+     $(CPPULIB)		\
+     $(UCBHELPERLIB)		\
+     $(CPPUHELPERLIB)	\
+--- libreoffice-3.4.5.2.orig/filter/source/xsltfilter/OleHandler.cxx	2012-07-20 09:29:02.209638174 +0100
++++ libreoffice-3.4.5.2/filter/source/xsltfilter/OleHandler.cxx	2012-07-20 09:30:14.585489410 +0100
+@@ -46,6 +46,8 @@
+ #include <package/Inflater.hxx>
+ #include <package/Deflater.hxx>
+ 
++#include <sax/tools/converter.hxx>
++
+ #include <cppuhelper/factory.hxx>
+ #include <cppuhelper/servicefactory.hxx>
+ #include <com/sun/star/uno/Any.hxx>
+@@ -95,7 +97,7 @@
+     void SAL_CALL OleHandler::initRootStorageFromBase64(const OString& content)
+     {
+         Sequence<sal_Int8> oleData;
+-        SvXMLUnitConverter::decodeBase64(oleData, ::rtl::OStringToOUString(content, RTL_TEXTENCODING_UTF8, OSTRING_TO_OUSTRING_CVTFLAGS));
++        ::sax::Converter::decodeBase64(oleData, ::rtl::OStringToOUString(content, RTL_TEXTENCODING_UTF8, OSTRING_TO_OUSTRING_CVTFLAGS));
+         m_rootStream = createTempFile();
+         Reference<XOutputStream> xOutput = m_rootStream->getOutputStream();
+         xOutput->writeBytes(oleData);
+@@ -154,7 +156,7 @@
+         delete decompresser;
+         //return the base64 string of the uncompressed data
+         OUStringBuffer buf(oleLength);
+-        SvXMLUnitConverter::encodeBase64(buf, result);
++        ::sax::Converter::encodeBase64(buf, result);
+         return ::rtl::OUStringToOString(buf.toString(), RTL_TEXTENCODING_UTF8);
+     }
+ 
+@@ -187,7 +189,7 @@
+                 xInput->readBytes(oledata, oleLength);
+                 //return the base64 encoded string
+                 OUStringBuffer buf(oleLength);
+-                SvXMLUnitConverter::encodeBase64(buf, oledata);
++                ::sax::Converter::encodeBase64(buf, oledata);
+                 return ::rtl::OUStringToOString(buf.toString(), RTL_TEXTENCODING_UTF8);
+             }
+         else
+@@ -202,7 +204,7 @@
+     {
+         //decode the base64 string
+         Sequence<sal_Int8> oledata;
+-        SvXMLUnitConverter::decodeBase64(oledata, rtl::OUString::createFromAscii(content));
++        ::sax::Converter::decodeBase64(oledata, rtl::OUString::createFromAscii(content));
+         //create a temp stream to write data to
+         Reference<XStream> subStream = createTempFile();
+         Reference<XInputStream> xInput = subStream->getInputStream();
+--- libreoffice-3.4.5.2.orig/filter/source/svg/svgwriter.cxx	2012-07-20 09:31:25.700326497 +0100
++++ libreoffice-3.4.5.2/filter/source/svg/svgwriter.cxx	2012-07-20 09:31:56.762692339 +0100
+@@ -28,7 +28,7 @@
+ 
+ // MARKER(update_precomp.py): autogen include statement, do not remove
+ #include "precompiled_filter.hxx"
+-
++#include <sax/tools/converter.hxx>
+ #include "svgfontexport.hxx"
+ #include "svgwriter.hxx"
+ 
+@@ -1284,7 +1284,7 @@
+                 Sequence< sal_Int8 >     aSeq( (sal_Int8*) aOStm.GetData(), aOStm.Tell() );
+                 NMSP_RTL::OUStringBuffer aBuffer;
+                 aBuffer.appendAscii( "data:image/png;base64," );
+-                SvXMLUnitConverter::encodeBase64( aBuffer, aSeq );
++                ::sax::Converter::encodeBase64( aBuffer, aSeq );
+ 
+                 mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrX, GetValueString( aPt.X() ) );
+                 mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrY, GetValueString( aPt.Y() ) );
+--- libreoffice-3.4.5.2.orig/filter/source/svg/svgreader.cxx	2012-07-20 09:33:01.141450969 +0100
++++ libreoffice-3.4.5.2/filter/source/svg/svgreader.cxx	2012-07-20 09:33:29.708787774 +0100
+@@ -51,7 +51,7 @@
+ #include <com/sun/star/xml/sax/XParser.hpp>
+ #include <com/sun/star/xml/dom/XDocumentBuilder.hpp>
+ #include <com/sun/star/xml/dom/NodeType.hpp>
+-
++#include <sax/tools/converter.hxx>
+ #include <comphelper/processfactory.hxx>
+ #include <basegfx/polygon/b2dpolygoncutandtouch.hxx>
+ #include <basegfx/polygon/b2dpolypolygoncutter.hxx>
+@@ -2309,7 +2309,7 @@
+                     Graphic aGraphic;
+ 
+                     uno::Sequence<sal_Int8> aData;
+-                    SvXMLUnitConverter::decodeBase64(aData,
++                    ::sax::Converter::decodeBase64(aData,
+                                                      rtl::OUString::createFromAscii(sLinkValue.c_str()));
+                     SvMemoryStream aSrc(aData.getArray(),
+                                         aData.getLength(),
+--- libreoffice-3.4.5.2.orig/filter/source/xsltfilter/makefile.mk	2012-07-20 09:37:15.952431808 +0100
++++ libreoffice-3.4.5.2/filter/source/xsltfilter/makefile.mk	2012-07-20 09:37:40.710708814 +0100
+@@ -54,6 +54,7 @@
+ DEF1NAME=$(SHL1TARGET)
+ 
+ SHL1STDLIBS= \
++    $(SAXLIB)         \
+     $(TOOLSLIB)         \
+     $(CPPUHELPERLIB)    \
+     $(CPPULIB)          \
+--- libreoffice-3.4.5.2.orig/filter/source/svg/makefile.mk	2012-07-20 09:38:47.336454795 +0100
++++ libreoffice-3.4.5.2/filter/source/svg/makefile.mk	2012-07-20 09:38:43.848415721 +0100
+@@ -65,6 +65,7 @@
+ SHL1TARGET=$(TARGET)$(DLLPOSTFIX)
+ 
+ SHL1STDLIBS=\
++    $(SAXLIB)			\
+     $(EDITENGLIB)			\
+     $(SVXCORELIB)			\
+     $(BASEGFXLIB)		\
diff --git a/libreoffice.spec b/libreoffice.spec
index ff772a4..5ed766b 100644
--- a/libreoffice.spec
+++ b/libreoffice.spec
@@ -33,7 +33,7 @@ Summary:        Free Software Productivity Suite
 Name:           libreoffice
 Epoch:          1
 Version:        %{libo_version}.2
-Release:        17%{?dist}
+Release:        18%{?dist}
 License:        (MPLv1.1 or LGPLv3+) and LGPLv3 and LGPLv2+ and BSD and (MPLv1.1 or GPLv2 or LGPLv2 or Netscape) and (CDDL or GPLv2) and Public Domain and ASL 2.0 and Artistic
 Group:          Applications/Productivity
 URL:            http://www.documentfoundation.org/develop
@@ -255,6 +255,7 @@ Patch133: CVE-2012-1149.patch
 Patch134: 0001-ppc-yyinput-returns-a-int-truncating-to-unsigned-cha.patch
 Patch135: CVE-2012-2334.patch
 Patch136: 0001-Resolves-rhbz-826609-rhbz-820554-fix-smoketest-on-pp.patch
+Patch137: CVE-2012-2665.backport.3-4.patch
 
 %{!?python_sitearch: %global python_sitearch %(%{__python} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(1))")}
 %define instdir %{_libdir}
@@ -1197,6 +1198,7 @@ mv -f redhat.soc extras/source/palettes/standard.soc
 %patch134 -p1 -b .0001-ppc-yyinput-returns-a-int-truncating-to-unsigned-cha.patch
 %patch135 -p1 -b .CVE-2012-2334
 %patch136 -p1 -b .rhbz-826609-rhbz-820554-fix-smoketest-on-pp.patch
+%patch137 -p1 -b .CVE-2012-2665
 
 # these are horribly incomplete--empty translations and copied english
 # strings with spattering of translated strings
@@ -2516,6 +2518,9 @@ update-desktop-database %{_datadir}/applications &> /dev/null || :
 %endif
 
 %changelog
+* Wed Aug 01 2012 Caolán McNamara <caolanm at redhat.com> - 3.4.5.2-18
+- Resolves: CVE-2012-2665
+
 * Fri Jun 08 2012 Caolán McNamara <caolanm at redhat.com> - 3.4.5.2-17
 - Resolves: rhbz#826609, rhbz#820554 fix smoketest on ppc[64], s390[x]
 


More information about the scm-commits mailing list