[Libreoffice-commits] core.git: 2 commits - xmlsecurity/inc xmlsecurity/source

Miklos Vajna vmiklos at collabora.co.uk
Thu Feb 4 16:18:31 UTC 2016


 xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx |    2 
 xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx  |   52 ++++++++++------
 2 files changed, 37 insertions(+), 17 deletions(-)

New commits:
commit 8f2f125802f5932ed3be598a768267ebcd413e49
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Feb 4 16:59:53 2016 +0100

    xmlsecurity: don't write the stream of an OOXML storage
    
    We'll need individual streams instead for OOXML.
    
    Change-Id: Ia3a7172af39ebfb815d44b645b217da15e41c197

diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
index be0b412..6601bbe 100644
--- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
+++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
@@ -492,22 +492,26 @@ IMPL_LINK_NOARG_TYPED(DigitalSignaturesDialog, AddButtonHdl, Button*, void)
             //a sax writer are used to write the information.
             SignatureStreamHelper aStreamHelper = ImplOpenSignatureStream(
                 css::embed::ElementModes::WRITE|css::embed::ElementModes::TRUNCATE, true);
-            Reference< css::io::XOutputStream > xOutputStream(
-                aStreamHelper.xSignatureStream, UNO_QUERY_THROW);
-            Reference< css::xml::sax::XWriter> xSaxWriter =
-                maSignatureHelper.CreateDocumentHandlerWithHeader( xOutputStream );
 
-            // Export old signatures...
-            uno::Reference< xml::sax::XDocumentHandler> xDocumentHandler(xSaxWriter, UNO_QUERY_THROW);
-            size_t nInfos = maCurrentSignatureInformations.size();
-            for ( size_t n = 0; n < nInfos; n++ )
-                XMLSignatureHelper::ExportSignature( xDocumentHandler, maCurrentSignatureInformations[n]);
-
-            // Create a new one...
-            maSignatureHelper.CreateAndWriteSignature( xDocumentHandler );
-
-            // That's it...
-            XMLSignatureHelper::CloseDocumentHandler( xDocumentHandler);
+            if (aStreamHelper.nStorageFormat != embed::StorageFormats::OFOPXML)
+            {
+                Reference< css::io::XOutputStream > xOutputStream(
+                    aStreamHelper.xSignatureStream, UNO_QUERY_THROW);
+                Reference< css::xml::sax::XWriter> xSaxWriter =
+                    maSignatureHelper.CreateDocumentHandlerWithHeader( xOutputStream );
+
+                // Export old signatures...
+                uno::Reference< xml::sax::XDocumentHandler> xDocumentHandler(xSaxWriter, UNO_QUERY_THROW);
+                size_t nInfos = maCurrentSignatureInformations.size();
+                for ( size_t n = 0; n < nInfos; n++ )
+                    XMLSignatureHelper::ExportSignature( xDocumentHandler, maCurrentSignatureInformations[n]);
+
+                // Create a new one...
+                maSignatureHelper.CreateAndWriteSignature( xDocumentHandler );
+
+                // That's it...
+                XMLSignatureHelper::CloseDocumentHandler( xDocumentHandler);
+            }
 
             maSignatureHelper.EndMission();
 
commit f065747552379bc3bf56fd479a04fd3de1ef72b7
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Thu Feb 4 15:24:20 2016 +0100

    xmlsecurity: support tmp storage instead of tmp stream for OOXML
    
    First step towards having a working export, since OOXML uses one stream
    / signature, so we need a storage for all signatures, not just a stream.
    
    Change-Id: Id5edfd3ce7e8e4177b0071badc6eb4330a525281

diff --git a/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx b/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx
index ff8b66e..4a97049 100644
--- a/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx
+++ b/xmlsecurity/inc/xmlsecurity/digitalsignaturesdialog.hxx
@@ -57,6 +57,8 @@ private:
     css::uno::Reference < css::embed::XStorage > mxStore;
     css::uno::Reference < css::io::XStream > mxSignatureStream;
     css::uno::Reference < css::io::XStream > mxTempSignatureStream;
+    /// Storage containing all OOXML signatures, unused for ODF.
+    css::uno::Reference<css::embed::XStorage> mxTempSignatureStorage;
     SignatureInformations   maCurrentSignatureInformations;
     bool                    mbVerifySignatures;
     bool                    mbSignaturesChanged;
diff --git a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
index 212dbe7..be0b412 100644
--- a/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
+++ b/xmlsecurity/source/dialogs/digitalsignaturesdialog.cxx
@@ -57,6 +57,7 @@
 
 #include <vcl/layout.hxx>
 #include <unotools/configitem.hxx>
+#include <comphelper/storagehelper.hxx>
 
 using namespace css::security;
 using namespace css::uno;
@@ -796,13 +797,26 @@ SignatureStreamHelper DigitalSignaturesDialog::ImplOpenSignatureStream(
     sal_Int32 nStreamOpenMode, bool bTempStream)
 {
     SignatureStreamHelper aHelper;
+    if (mxStore.is())
+    {
+        uno::Reference<container::XNameAccess> xNameAccess(mxStore, uno::UNO_QUERY);
+        if (xNameAccess.is() && xNameAccess->hasByName("[Content_Types].xml"))
+            aHelper.nStorageFormat = embed::StorageFormats::OFOPXML;
+    }
+
     if (bTempStream)
     {
         if (nStreamOpenMode & css::embed::ElementModes::TRUNCATE)
         {
             //We write always into a new temporary stream.
             mxTempSignatureStream.set(css::io::TempFile::create(mxCtx), UNO_QUERY_THROW);
-            aHelper.xSignatureStream = mxTempSignatureStream;
+            if (aHelper.nStorageFormat != embed::StorageFormats::OFOPXML)
+                aHelper.xSignatureStream = mxTempSignatureStream;
+            else
+            {
+                mxTempSignatureStorage = comphelper::OStorageHelper::GetStorageOfFormatFromStream(ZIP_STORAGE_FORMAT_STRING, mxTempSignatureStream);
+                aHelper.xSignatureStorage = mxTempSignatureStorage;
+            }
         }
         else
         {
@@ -833,7 +847,7 @@ SignatureStreamHelper DigitalSignaturesDialog::ImplOpenSignatureStream(
 
     if (nStreamOpenMode & css::embed::ElementModes::TRUNCATE)
     {
-        if (aHelper.xSignatureStream.is())
+        if (aHelper.xSignatureStream.is() && aHelper.nStorageFormat != embed::StorageFormats::OFOPXML)
         {
             css::uno::Reference < css::io::XTruncate > xTruncate(
                 aHelper.xSignatureStream, UNO_QUERY_THROW);


More information about the Libreoffice-commits mailing list