tdf#133771: remove encryption data during SaveAs

If document was password protected but during SaveAs it wasn't
selected to use a password we should remove EcnryptionData.

But we should not do this unconditionally: in general case we should
try to keep all encryption metadata.

Change-Id: Id91a88790deccd7377fb5d394b36395d13748c31
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/104454
Tested-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
diff --git a/sfx2/source/doc/objstor.cxx b/sfx2/source/doc/objstor.cxx
index 76e8387..479682b 100644
--- a/sfx2/source/doc/objstor.cxx
+++ b/sfx2/source/doc/objstor.cxx
@@ -2789,11 +2789,38 @@ bool SfxObjectShell::PreDoSaveAs_Impl(const OUString& rFileName, const OUString&
    // in "SaveAs" title and password will be cleared ( maybe the new itemset contains new values, otherwise they will be empty )
    // #i119366# - As the SID_ENCRYPTIONDATA and SID_PASSWORD are using for setting password together, we need to clear them both.
    // Also, ( maybe the new itemset contains new values, otherwise they will be empty )
    if (xMergedParams->HasItem( SID_PASSWORD ))
    if (xMergedParams->HasItem(SID_ENCRYPTIONDATA))
    {
        xMergedParams->ClearItem( SID_PASSWORD );
        xMergedParams->ClearItem( SID_ENCRYPTIONDATA );
        bool bPasswordProtected = true;
        const SfxUnoAnyItem* pEncryptionDataItem
            = xMergedParams->GetItem<SfxUnoAnyItem>(SID_ENCRYPTIONDATA, false);
        if (pEncryptionDataItem)
        {
            uno::Sequence<beans::NamedValue> aEncryptionData;
            pEncryptionDataItem->GetValue() >>= aEncryptionData;
            for (const auto& rItem : std::as_const(aEncryptionData))
            {
                if (rItem.Name == "CryptoType")
                {
                    OUString aValue;
                    rItem.Value >>= aValue;
                    if (aValue != "StrongEncryptionDataSpace")
                    {
                        // This is not just a password protected document. Let's keep encryption data as is.
                        bPasswordProtected = false;
                    }
                    break;
                }
            }
        }
        if (bPasswordProtected)
        {
            // For password protected documents remove encryption data during "Save as..."
            xMergedParams->ClearItem(SID_PASSWORD);
            xMergedParams->ClearItem(SID_ENCRYPTIONDATA);
        }
    }

    xMergedParams->ClearItem( SID_DOCINFO_TITLE );

    xMergedParams->ClearItem( SID_INPUTSTREAM );