[Libreoffice-commits] core.git: sfx2/source
Samuel Mehrbrodt
Samuel.Mehrbrodt at cib.de
Tue May 22 04:51:02 UTC 2018
sfx2/source/doc/docfile.cxx | 276 ++++++++++++++++++++++----------------------
1 file changed, 139 insertions(+), 137 deletions(-)
New commits:
commit c4409edb4e0623b17c9760af11c7bd7b29a59d76
Author: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
Date: Thu May 17 11:34:37 2018 +0200
Reduce indentation by returning early on error condition
Change-Id: Iebf6eca68f0dcba87ab517952009ee6dfb4b588c
Reviewed-on: https://gerrit.libreoffice.org/54475
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Samuel Mehrbrodt <Samuel.Mehrbrodt at cib.de>
diff --git a/sfx2/source/doc/docfile.cxx b/sfx2/source/doc/docfile.cxx
index 1ac4c883d30a..acd54f1fc8c4 100644
--- a/sfx2/source/doc/docfile.cxx
+++ b/sfx2/source/doc/docfile.cxx
@@ -3667,71 +3667,103 @@ bool SfxMedium::SignContents_Impl(const Reference<XCertificate> xCert, const OUS
{
bool bChanges = false;
- // the medium should be closed to be able to sign, the caller is responsible to close it
- if ( !IsOpen() && !GetError() )
- {
- // The component should know if there was a valid document signature, since
- // it should show a warning in this case
- uno::Reference< security::XDocumentDigitalSignatures > xSigner(
- security::DocumentDigitalSignatures::createWithVersionAndValidSignature(
- comphelper::getProcessComponentContext(), aODFVersion, bHasValidDocumentSignature ) );
-
- uno::Reference< embed::XStorage > xWriteableZipStor;
- // Signing is not modification of the document, as seen by the user
- // ("only a saved document can be signed"). So allow signing in the
- // "opened read-only, but not physically-read-only" case.
- if (!IsOriginallyReadOnly())
- {
- // we can reuse the temporary file if there is one already
- CreateTempFile( false );
- GetMedium_Impl();
+ if (IsOpen() || GetError())
+ {
+ SAL_WARN("sfx.doc", "The medium must be closed by the signer!");
+ return bChanges;
+ }
+
+ // The component should know if there was a valid document signature, since
+ // it should show a warning in this case
+ uno::Reference< security::XDocumentDigitalSignatures > xSigner(
+ security::DocumentDigitalSignatures::createWithVersionAndValidSignature(
+ comphelper::getProcessComponentContext(), aODFVersion, bHasValidDocumentSignature ) );
+
+ uno::Reference< embed::XStorage > xWriteableZipStor;
+ // Signing is not modification of the document, as seen by the user
+ // ("only a saved document can be signed"). So allow signing in the
+ // "opened read-only, but not physically-read-only" case.
+ if (!IsOriginallyReadOnly())
+ {
+ // we can reuse the temporary file if there is one already
+ CreateTempFile( false );
+ GetMedium_Impl();
+
+ try
+ {
+ if ( !pImpl->xStream.is() )
+ throw uno::RuntimeException();
+ bool bODF = GetFilter()->IsOwnFormat();
try
{
- if ( !pImpl->xStream.is() )
- throw uno::RuntimeException();
+ xWriteableZipStor = ::comphelper::OStorageHelper::GetStorageOfFormatFromStream( ZIP_STORAGE_FORMAT_STRING, pImpl->xStream );
+ }
+ catch (const io::IOException& rException)
+ {
+ if (bODF)
+ SAL_WARN("sfx.doc", "ODF stream is not a zip storage: " << rException);
+ }
- bool bODF = GetFilter()->IsOwnFormat();
- try
- {
- xWriteableZipStor = ::comphelper::OStorageHelper::GetStorageOfFormatFromStream( ZIP_STORAGE_FORMAT_STRING, pImpl->xStream );
- }
- catch (const io::IOException& rException)
- {
- if (bODF)
- SAL_WARN("sfx.doc", "ODF stream is not a zip storage: " << rException);
- }
+ if ( !xWriteableZipStor.is() && bODF )
+ throw uno::RuntimeException();
- if ( !xWriteableZipStor.is() && bODF )
+ uno::Reference< embed::XStorage > xMetaInf;
+ uno::Reference<container::XNameAccess> xNameAccess(xWriteableZipStor, uno::UNO_QUERY);
+ if (xNameAccess.is() && xNameAccess->hasByName("META-INF"))
+ {
+ xMetaInf = xWriteableZipStor->openStorageElement(
+ "META-INF",
+ embed::ElementModes::READWRITE );
+ if ( !xMetaInf.is() )
throw uno::RuntimeException();
+ }
- uno::Reference< embed::XStorage > xMetaInf;
- uno::Reference<container::XNameAccess> xNameAccess(xWriteableZipStor, uno::UNO_QUERY);
- if (xNameAccess.is() && xNameAccess->hasByName("META-INF"))
+ if ( bScriptingContent )
+ {
+ // If the signature has already the document signature it will be removed
+ // after the scripting signature is inserted.
+ uno::Reference< io::XStream > xStream(
+ xMetaInf->openStreamElement( xSigner->getScriptingContentSignatureDefaultStreamName(),
+ embed::ElementModes::READWRITE ),
+ uno::UNO_SET_THROW );
+
+ if ( xSigner->signScriptingContent( GetZipStorageToSign_Impl(), xStream ) )
{
- xMetaInf = xWriteableZipStor->openStorageElement(
- "META-INF",
- embed::ElementModes::READWRITE );
- if ( !xMetaInf.is() )
- throw uno::RuntimeException();
+ // remove the document signature if any
+ OUString aDocSigName = xSigner->getDocumentContentSignatureDefaultStreamName();
+ if ( !aDocSigName.isEmpty() && xMetaInf->hasByName( aDocSigName ) )
+ xMetaInf->removeElement( aDocSigName );
+
+ uno::Reference< embed::XTransactedObject > xTransact( xMetaInf, uno::UNO_QUERY_THROW );
+ xTransact->commit();
+ xTransact.set( xWriteableZipStor, uno::UNO_QUERY_THROW );
+ xTransact->commit();
+
+ // the temporary file has been written, commit it to the original file
+ Commit();
+ bChanges = true;
}
-
- if ( bScriptingContent )
+ }
+ else
+ {
+ if (xMetaInf.is())
{
- // If the signature has already the document signature it will be removed
- // after the scripting signature is inserted.
- uno::Reference< io::XStream > xStream(
- xMetaInf->openStreamElement( xSigner->getScriptingContentSignatureDefaultStreamName(),
- embed::ElementModes::READWRITE ),
- uno::UNO_SET_THROW );
-
- if ( xSigner->signScriptingContent( GetZipStorageToSign_Impl(), xStream ) )
- {
- // remove the document signature if any
- OUString aDocSigName = xSigner->getDocumentContentSignatureDefaultStreamName();
- if ( !aDocSigName.isEmpty() && xMetaInf->hasByName( aDocSigName ) )
- xMetaInf->removeElement( aDocSigName );
+ // ODF.
+ uno::Reference< io::XStream > xStream;
+ if (GetFilter() && GetFilter()->IsOwnFormat())
+ xStream.set(xMetaInf->openStreamElement(xSigner->getDocumentContentSignatureDefaultStreamName(), embed::ElementModes::READWRITE), uno::UNO_SET_THROW);
+
+ bool bSuccess = false;
+ if (xCert.is())
+ bSuccess = xSigner->signDocumentContentWithCertificate(
+ GetZipStorageToSign_Impl(), xStream, xCert, aSignatureLineId);
+ else
+ bSuccess = xSigner->signDocumentContent(GetZipStorageToSign_Impl(),
+ xStream);
+ if (bSuccess)
+ {
uno::Reference< embed::XTransactedObject > xTransact( xMetaInf, uno::UNO_QUERY_THROW );
xTransact->commit();
xTransact.set( xWriteableZipStor, uno::UNO_QUERY_THROW );
@@ -3742,108 +3774,78 @@ bool SfxMedium::SignContents_Impl(const Reference<XCertificate> xCert, const OUS
bChanges = true;
}
}
- else
+ else if (xWriteableZipStor.is())
{
- if (xMetaInf.is())
- {
- // ODF.
- uno::Reference< io::XStream > xStream;
- if (GetFilter() && GetFilter()->IsOwnFormat())
- xStream.set(xMetaInf->openStreamElement(xSigner->getDocumentContentSignatureDefaultStreamName(), embed::ElementModes::READWRITE), uno::UNO_SET_THROW);
-
- bool bSuccess = false;
- if (xCert.is())
- bSuccess = xSigner->signDocumentContentWithCertificate(
- GetZipStorageToSign_Impl(), xStream, xCert, aSignatureLineId);
- else
- bSuccess = xSigner->signDocumentContent(GetZipStorageToSign_Impl(),
- xStream);
+ // OOXML.
+ uno::Reference<io::XStream> xStream;
- if (bSuccess)
- {
- uno::Reference< embed::XTransactedObject > xTransact( xMetaInf, uno::UNO_QUERY_THROW );
- xTransact->commit();
- xTransact.set( xWriteableZipStor, uno::UNO_QUERY_THROW );
- xTransact->commit();
-
- // the temporary file has been written, commit it to the original file
- Commit();
- bChanges = true;
- }
- }
- else if (xWriteableZipStor.is())
+ bool bSuccess = false;
+ if (xCert.is())
{
- // OOXML.
- uno::Reference<io::XStream> xStream;
-
- bool bSuccess = false;
- if (xCert.is())
- {
- bSuccess = xSigner->signDocumentContentWithCertificate(
- GetZipStorageToSign_Impl(/*bReadOnly=*/false), xStream, xCert, aSignatureLineId);
- }
- else
- {
- // We need read-write to be able to add the signature relation.
- bSuccess =xSigner->signDocumentContent(
- GetZipStorageToSign_Impl(/*bReadOnly=*/false), xStream);
- }
-
- if (bSuccess)
- {
- uno::Reference<embed::XTransactedObject> xTransact(xWriteableZipStor, uno::UNO_QUERY_THROW);
- xTransact->commit();
-
- // the temporary file has been written, commit it to the original file
- Commit();
- bChanges = true;
- }
+ bSuccess = xSigner->signDocumentContentWithCertificate(
+ GetZipStorageToSign_Impl(/*bReadOnly=*/false), xStream, xCert, aSignatureLineId);
}
else
{
- // Something not ZIP based: e.g. PDF.
- std::unique_ptr<SvStream> pStream(utl::UcbStreamHelper::CreateStream(GetName(), StreamMode::READ | StreamMode::WRITE));
- uno::Reference<io::XStream> xStream(new utl::OStreamWrapper(*pStream));
- if (xSigner->signDocumentContent(uno::Reference<embed::XStorage>(), xStream))
- bChanges = true;
+ // We need read-write to be able to add the signature relation.
+ bSuccess =xSigner->signDocumentContent(
+ GetZipStorageToSign_Impl(/*bReadOnly=*/false), xStream);
+ }
+
+ if (bSuccess)
+ {
+ uno::Reference<embed::XTransactedObject> xTransact(xWriteableZipStor, uno::UNO_QUERY_THROW);
+ xTransact->commit();
+
+ // the temporary file has been written, commit it to the original file
+ Commit();
+ bChanges = true;
}
}
+ else
+ {
+ // Something not ZIP based: e.g. PDF.
+ std::unique_ptr<SvStream> pStream(utl::UcbStreamHelper::CreateStream(GetName(), StreamMode::READ | StreamMode::WRITE));
+ uno::Reference<io::XStream> xStream(new utl::OStreamWrapper(*pStream));
+ if (xSigner->signDocumentContent(uno::Reference<embed::XStorage>(), xStream))
+ bChanges = true;
+ }
}
- catch ( const uno::Exception& )
- {
- SAL_WARN( "sfx.doc", "Couldn't use signing functionality!" );
- }
-
- CloseAndRelease();
}
- else
+ catch ( const uno::Exception& )
{
- try
+ SAL_WARN( "sfx.doc", "Couldn't use signing functionality!" );
+ }
+
+ CloseAndRelease();
+ }
+ else
+ {
+ try
+ {
+ if ( bScriptingContent )
+ xSigner->showScriptingContentSignatures( GetZipStorageToSign_Impl(), uno::Reference< io::XInputStream >() );
+ else
{
- if ( bScriptingContent )
- xSigner->showScriptingContentSignatures( GetZipStorageToSign_Impl(), uno::Reference< io::XInputStream >() );
+ uno::Reference<embed::XStorage> xStorage = GetZipStorageToSign_Impl();
+ if (xStorage.is())
+ xSigner->showDocumentContentSignatures(xStorage, uno::Reference<io::XInputStream>());
else
{
- uno::Reference<embed::XStorage> xStorage = GetZipStorageToSign_Impl();
- if (xStorage.is())
- xSigner->showDocumentContentSignatures(xStorage, uno::Reference<io::XInputStream>());
- else
- {
- std::unique_ptr<SvStream> pStream(utl::UcbStreamHelper::CreateStream(GetName(), StreamMode::READ));
- uno::Reference<io::XInputStream> xStream(new utl::OStreamWrapper(*pStream));
- xSigner->showDocumentContentSignatures(uno::Reference<embed::XStorage>(), xStream);
- }
+ std::unique_ptr<SvStream> pStream(utl::UcbStreamHelper::CreateStream(GetName(), StreamMode::READ));
+ uno::Reference<io::XInputStream> xStream(new utl::OStreamWrapper(*pStream));
+ xSigner->showDocumentContentSignatures(uno::Reference<embed::XStorage>(), xStream);
}
}
- catch( const uno::Exception& )
- {
- SAL_WARN( "sfx.doc", "Couldn't use signing functionality!" );
- }
}
-
- ResetError();
+ catch( const uno::Exception& )
+ {
+ SAL_WARN( "sfx.doc", "Couldn't use signing functionality!" );
+ }
}
+ ResetError();
+
return bChanges;
}
More information about the Libreoffice-commits
mailing list