sw/qa/extras/uiwriter/data2/tdf106843.docx |binary sw/qa/extras/uiwriter/uiwriter2.cxx | 17 +++++++++++++++++ writerfilter/source/dmapper/SettingsTable.cxx | 17 ++++++++++++++++- 3 files changed, 33 insertions(+), 1 deletion(-)
New commits: commit d416250f4f1766e2d596ea3feef6a94b7adf29f4 Author: László Németh <nem...@numbertext.org> AuthorDate: Fri Oct 11 09:21:18 2019 +0200 Commit: László Németh <nem...@numbertext.org> CommitDate: Sat Oct 12 09:29:44 2019 +0200 tdf#106843 DOCX: forbid disabling protected Record Changes Password protection of enabled record changes has been grab- bagged, yet, but it was possible to disable the protection without password verification, eg. by a simple click on Record Track Changes. Now it's forbidden to disable the protected Record Changes, using a dummy password temporarily. Change-Id: Ibc1c9016ea164ebb588265579fb9fa589ddee114 Reviewed-on: https://gerrit.libreoffice.org/80643 Tested-by: Jenkins Reviewed-by: László Németh <nem...@numbertext.org> diff --git a/sw/qa/extras/uiwriter/data2/tdf106843.docx b/sw/qa/extras/uiwriter/data2/tdf106843.docx new file mode 100644 index 000000000000..339ebd594168 Binary files /dev/null and b/sw/qa/extras/uiwriter/data2/tdf106843.docx differ diff --git a/sw/qa/extras/uiwriter/uiwriter2.cxx b/sw/qa/extras/uiwriter/uiwriter2.cxx index 50df467a168f..83cc90bc5d84 100644 --- a/sw/qa/extras/uiwriter/uiwriter2.cxx +++ b/sw/qa/extras/uiwriter/uiwriter2.cxx @@ -1745,6 +1745,23 @@ CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf120336) CPPUNIT_ASSERT_EQUAL(2, getPages()); } +CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testTdf106843) +{ + load(DATA_DIRECTORY, "tdf106843.docx"); + + SwXTextDocument* pTextDoc = dynamic_cast<SwXTextDocument*>(mxComponent.get()); + CPPUNIT_ASSERT(pTextDoc); + + SwDoc* pDoc = pTextDoc->GetDocShell()->GetDoc(); + + // try to turn off red-lining + lcl_dispatchCommand(mxComponent, ".uno:TrackChanges", {}); + + // but the protection doesn't allow it + CPPUNIT_ASSERT_MESSAGE("redlining should be on", + pDoc->getIDocumentRedlineAccess().IsRedlineOn()); +} + CPPUNIT_TEST_FIXTURE(SwUiWriterTest2, testImageComment) { // Load a document with an as-char image in it. diff --git a/writerfilter/source/dmapper/SettingsTable.cxx b/writerfilter/source/dmapper/SettingsTable.cxx index 665f61568109..5e14f3c1b7be 100644 --- a/writerfilter/source/dmapper/SettingsTable.cxx +++ b/writerfilter/source/dmapper/SettingsTable.cxx @@ -115,7 +115,7 @@ namespace dmapper bool isNone() const { return m_nEdit == NS_ooxml::LN_Value_doc_ST_DocProtect_none; }; // bool isReadOnly() const { return m_nEdit == NS_ooxml::LN_Value_doc_ST_DocProtect_readOnly; }; // bool isComments() const { return m_nEdit == NS_ooxml::LN_Value_doc_ST_DocProtect_comments; }; - // bool isTrackChanges() const { return m_nEdit == NS_ooxml::LN_Value_doc_ST_DocProtect_trackedChanges; }; + bool isTrackChanges() const { return m_nEdit == NS_ooxml::LN_Value_doc_ST_DocProtect_trackedChanges; }; bool isForms() const { return m_nEdit == NS_ooxml::LN_Value_doc_ST_DocProtect_forms; }; }; @@ -253,6 +253,7 @@ struct SettingsTable_Impl bool m_bMirrorMargin; bool m_bDoNotExpandShiftReturn; bool m_bProtectForm; + bool m_bRedlineProtection; bool m_bDisplayBackgroundShape; uno::Sequence<beans::PropertyValue> m_pThemeFontLangProps; @@ -284,6 +285,7 @@ struct SettingsTable_Impl , m_bMirrorMargin(false) , m_bDoNotExpandShiftReturn(false) , m_bProtectForm(false) + , m_bRedlineProtection(false) , m_bDisplayBackgroundShape(false) , m_pThemeFontLangProps(3) , m_pCurrentCompatSetting(3) @@ -348,10 +350,12 @@ void SettingsTable::lcl_attribute(Id nName, Value & val) case NS_ooxml::LN_CT_DocProtect_edit: // 92037 m_pImpl->m_DocumentProtection.m_nEdit = nIntValue; m_pImpl->m_bProtectForm = m_pImpl->m_DocumentProtection.isForms(); + m_pImpl->m_bRedlineProtection = m_pImpl->m_DocumentProtection.isTrackChanges(); break; case NS_ooxml::LN_CT_DocProtect_enforcement: // 92039 m_pImpl->m_DocumentProtection.m_bEnforcement = (nIntValue != 0); m_pImpl->m_bProtectForm &= static_cast<bool>(nIntValue); + m_pImpl->m_bRedlineProtection &= static_cast<bool>(nIntValue); break; case NS_ooxml::LN_CT_DocProtect_formatting: // 92038 m_pImpl->m_DocumentProtection.m_bFormatting = (nIntValue != 0); @@ -660,7 +664,18 @@ void SettingsTable::ApplyProperties(uno::Reference<text::XTextDocument> const& x // Record changes value if (xDocProps.is()) + { xDocProps->setPropertyValue("RecordChanges", uno::makeAny( m_pImpl->m_bRecordChanges ) ); + // Password protected Record changes + if ( m_pImpl->m_bRecordChanges && m_pImpl->m_bRedlineProtection ) + { + // use dummy protection key to forbid disabling of Record changes (extending the recent GrabBag support) + // TODO support password verification and DOCX export of RedlineProtectionKey... + css::uno::Sequence<sal_Int8> aDummyKey(1); + aDummyKey[0] = 1; + xDocProps->setPropertyValue("RedlineProtectionKey", uno::makeAny( aDummyKey )); + } + } // Auto hyphenation: turns on hyphenation by default, <w:suppressAutoHyphens/> may still disable it at a paragraph level. // Situation is similar for RTF_WIDOWCTRL, which turns on widow / orphan control by default. _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits