[Libreoffice-commits] core.git: sw/qa sw/source

Libreoffice Gerrit user logerrit at kemper.freedesktop.org
Wed Oct 24 08:37:29 UTC 2018


 sw/qa/extras/ww8export/ww8export.cxx |    9 +++++++++
 sw/source/filter/ww8/wrtww8.cxx      |   15 +++++++++++++++
 sw/source/filter/ww8/ww8par.cxx      |    6 ++++++
 3 files changed, 30 insertions(+)

New commits:
commit 0ed56b6a335d963f327d60650752c161654bf223
Author:     Justin Luth <justin.luth at collabora.com>
AuthorDate: Thu Oct 18 21:26:13 2018 +0300
Commit:     Miklos Vajna <vmiklos at collabora.co.uk>
CommitDate: Wed Oct 24 10:37:05 2018 +0200

    ww8export roundtrip forms password
    
    This was already done for docx in LO6.0 with
    commit 2694162969cf86ef366d3ce812fccd0630acc800
    
    Patch initially developed to support tdf#120499 and depnds
    on commit 953dad97c7ef7881c2ac6d73fe5266b44b15f3e2
    
    Change-Id: I04b0693ed1e90f70b079040030c5bd9d2ccfbf13
    Reviewed-on: https://gerrit.libreoffice.org/61952
    Tested-by: Justin Luth <justin_luth at sil.org>
    Reviewed-by: Justin Luth <justin_luth at sil.org>

diff --git a/sw/qa/extras/ww8export/ww8export.cxx b/sw/qa/extras/ww8export/ww8export.cxx
index 33951f4f0666..cb73378615e7 100644
--- a/sw/qa/extras/ww8export/ww8export.cxx
+++ b/sw/qa/extras/ww8export/ww8export.cxx
@@ -364,6 +364,15 @@ DECLARE_WW8EXPORT_TEST(testCp1000044, "cp1000044.doc")
     CPPUNIT_ASSERT(pTextDoc);
     SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc();
     CPPUNIT_ASSERT_EQUAL( true, pDoc->getIDocumentSettingAccess().get( DocumentSettingId::PROTECT_FORM ) );
+
+    uno::Sequence<beans::PropertyValue> aGrabBag = getProperty< uno::Sequence<beans::PropertyValue> >(mxComponent, "InteropGrabBag");
+    sal_Int32 nPasswordHash = 0;
+    for ( sal_Int32 i = 0; i < aGrabBag.getLength(); ++i )
+    {
+        if ( aGrabBag[i].Name == "FormPasswordHash" )
+            aGrabBag[i].Value >>= nPasswordHash;
+    }
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Password Hash", sal_Int32(609995782), nPasswordHash);
 }
 
 DECLARE_WW8EXPORT_TEST(testBorderColours, "bordercolours.doc")
diff --git a/sw/source/filter/ww8/wrtww8.cxx b/sw/source/filter/ww8/wrtww8.cxx
index 5e22e0bb57a3..e72a5da2a952 100644
--- a/sw/source/filter/ww8/wrtww8.cxx
+++ b/sw/source/filter/ww8/wrtww8.cxx
@@ -510,6 +510,21 @@ static void WriteDop( WW8Export& rWrt )
         rDop.lKeyProtDoc != 0)
     {
         rDop.fProtEnabled =  true;
+        // The password was ignored at import if forms protection was enabled,
+        // so round-trip it since protection is still enabled.
+        if ( rDop.lKeyProtDoc == 0 && xProps.is() )
+        {
+            uno::Sequence< beans::PropertyValue > aGrabBag;
+            xProps->getPropertyValue("InteropGrabBag") >>= aGrabBag;
+            for ( sal_Int32 i = 0; i < aGrabBag.getLength(); ++i )
+            {
+                if ( aGrabBag[i].Name == "FormPasswordHash" )
+                {
+                    aGrabBag[i].Value >>= rDop.lKeyProtDoc;
+                    break;
+                }
+            }
+        }
     }
     else
     {
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index b7fa6ed3f00a..a6b49ccf2c5a 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -1919,6 +1919,12 @@ void SwWW8ImplReader::ImportDop()
     // Still allow editing of form fields.
     if (!m_xWDop->fProtEnabled)
         m_pDocShell->SetModifyPasswordHash(m_xWDop->lKeyProtDoc);
+    else if ( xDocProps.is() )
+    {
+        comphelper::SequenceAsHashMap aGrabBag(xDocProps->getPropertyValue("InteropGrabBag"));
+        aGrabBag["FormPasswordHash"] <<= m_xWDop->lKeyProtDoc;
+        xDocProps->setPropertyValue("InteropGrabBag", uno::Any(aGrabBag.getAsConstPropertyValueList()));
+    }
 
     const SvtFilterOptions& rOpt = SvtFilterOptions::Get();
     if (rOpt.IsUseEnhancedFields())


More information about the Libreoffice-commits mailing list