[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