diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-02-08 16:05:26 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2016-02-08 16:44:25 +0100 |
commit | 349a0ddc316bfab61a0989eb7658fe82972fbd43 (patch) | |
tree | dde1b2a8a6fd5a6aa331d1aa0a11cd642be107d8 /xmlsecurity | |
parent | tdf#96685 - set focus of accessible table cells (diff) | |
download | core-349a0ddc316bfab61a0989eb7658fe82972fbd43.tar.gz core-349a0ddc316bfab61a0989eb7658fe82972fbd43.zip |
xmlsecurity: write correct number of non-manifest OOXML references
Change-Id: I1d8556487608e5a0bee2ae5f7a4b25a60579f4a9
Diffstat (limited to 'xmlsecurity')
-rw-r--r-- | xmlsecurity/source/helper/xsecctl.hxx | 2 | ||||
-rw-r--r-- | xmlsecurity/source/helper/xsecsign.cxx | 33 |
2 files changed, 24 insertions, 11 deletions
diff --git a/xmlsecurity/source/helper/xsecctl.hxx b/xmlsecurity/source/helper/xsecctl.hxx index a67dc34ea3e3..9aad6c60f9ca 100644 --- a/xmlsecurity/source/helper/xsecctl.hxx +++ b/xmlsecurity/source/helper/xsecctl.hxx @@ -356,7 +356,7 @@ private: static OUString createId(); com::sun::star::uno::Reference< com::sun::star::xml::crypto::sax::XReferenceResolvedListener > prepareSignatureToWrite( - InternalSignatureInformation& signatureInfo ); + InternalSignatureInformation& signatureInfo, sal_Int32 nStorageFormat = 0 ); /* * For signature verification diff --git a/xmlsecurity/source/helper/xsecsign.cxx b/xmlsecurity/source/helper/xsecsign.cxx index 4f1e523a526c..778381e13eb3 100644 --- a/xmlsecurity/source/helper/xsecsign.cxx +++ b/xmlsecurity/source/helper/xsecsign.cxx @@ -28,6 +28,7 @@ #include <com/sun/star/xml/crypto/sax/XReferenceCollector.hpp> #include <com/sun/star/xml/crypto/sax/XSignatureCreationResultBroadcaster.hpp> #include <com/sun/star/io/XActiveDataSource.hpp> +#include <com/sun/star/embed/StorageFormats.hpp> #include <rtl/uuid.h> #include <stdio.h> @@ -58,7 +59,7 @@ OUString XSecController::createId() } cssu::Reference< cssxc::sax::XReferenceResolvedListener > XSecController::prepareSignatureToWrite( - InternalSignatureInformation& internalSignatureInfor ) + InternalSignatureInformation& internalSignatureInfor, sal_Int32 nStorageFormat ) { sal_Int32 nSecurityId = internalSignatureInfor.signatureInfor.nSecurityId; SignatureReferenceInformations& vReferenceInfors = internalSignatureInfor.signatureInfor.vSignatureReferenceInfors; @@ -164,16 +165,28 @@ cssu::Reference< cssxc::sax::XReferenceResolvedListener > XSecController::prepar cssu::Reference<cssxc::sax::XKeyCollector> keyCollector (xReferenceResolvedListener, cssu::UNO_QUERY); keyCollector->setKeyId(0); - internalSignatureInfor.signatureInfor.ouSignatureId = createId(); - internalSignatureInfor.signatureInfor.ouPropertyId = createId(); - internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, internalSignatureInfor.signatureInfor.ouPropertyId, -1 ); - size++; + if (nStorageFormat != embed::StorageFormats::OFOPXML) + { + internalSignatureInfor.signatureInfor.ouSignatureId = createId(); + internalSignatureInfor.signatureInfor.ouPropertyId = createId(); + internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, internalSignatureInfor.signatureInfor.ouPropertyId, -1 ); + size++; - if (!internalSignatureInfor.signatureInfor.ouDescription.isEmpty()) + if (!internalSignatureInfor.signatureInfor.ouDescription.isEmpty()) + { + // Only mention the hash of the description in the signature if it's non-empty. + internalSignatureInfor.signatureInfor.ouDescriptionPropertyId = createId(); + internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, internalSignatureInfor.signatureInfor.ouDescriptionPropertyId, -1); + size++; + } + } + else { - // Only mention the hash of the description in the signature if it's non-empty. - internalSignatureInfor.signatureInfor.ouDescriptionPropertyId = createId(); - internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, internalSignatureInfor.signatureInfor.ouDescriptionPropertyId, -1); + internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, "#idPackageObject", -1); + size++; + internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, "#idOfficeObject", -1); + size++; + internalSignatureInfor.addReference(SignatureReferenceType::SAMEDOCUMENT, "#idSignedProperties", -1); size++; } @@ -381,7 +394,7 @@ bool XSecController::WriteOOXMLSignature(const uno::Reference<xml::sax::XDocumen InternalSignatureInformation& rInformation = m_vInternalSignatureInformations[i]; // Prepare the signature creator. - rInformation.xReferenceResolvedListener = prepareSignatureToWrite(rInformation); + rInformation.xReferenceResolvedListener = prepareSignatureToWrite(rInformation, embed::StorageFormats::OFOPXML); exportOOXMLSignature(xSEKHandler, rInformation.signatureInfor); } |