From 5fe7062f2a5f7785a15abbfbe0c0394826412e0e Mon Sep 17 00:00:00 2001 From: Samuel Mehrbrodt Date: Thu, 13 Jun 2024 15:09:13 +0200 Subject: [PATCH] pptx: Don't export notes author/date when in privacy mode Change-Id: Ia2f20b05b043d45df090f2843a4d365c692770fd Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168813 Reviewed-by: Samuel Mehrbrodt Tested-by: Jenkins --- sd/qa/unit/data/pptx/pres-with-notes.pptx | Bin 0 -> 14855 bytes sd/qa/unit/export-tests-ooxml4.cxx | 35 ++++++++++++++++++++++ sd/source/filter/eppt/epptooxml.hxx | 4 +++ sd/source/filter/eppt/pptx-epptooxml.cxx | 32 ++++++++++++++++---- 4 files changed, 66 insertions(+), 5 deletions(-) create mode 100644 sd/qa/unit/data/pptx/pres-with-notes.pptx diff --git a/sd/qa/unit/data/pptx/pres-with-notes.pptx b/sd/qa/unit/data/pptx/pres-with-notes.pptx new file mode 100644 index 0000000000000000000000000000000000000000..25f9692a2a1ceb1ffb2350f90196f04d80c66d4f GIT binary patch literal 14855 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 I_J?=>AI5U=ApigX literal 0 HcmV?d00001 diff --git a/sd/qa/unit/export-tests-ooxml4.cxx b/sd/qa/unit/export-tests-ooxml4.cxx index 63af283d664f..0e11eb581bf0 100644 --- a/sd/qa/unit/export-tests-ooxml4.cxx +++ b/sd/qa/unit/export-tests-ooxml4.cxx @@ -14,6 +14,7 @@ #include #include #include +#include #include #include @@ -1095,6 +1096,40 @@ CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest4, testTdf102261_testParaTabStopDefaultDis } } +CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest4, testNotesAuthorDate) +{ + createSdImpressDoc("pptx/pres-with-notes.pptx"); + + auto pBatch(comphelper::ConfigurationChanges::create()); + // 1. Remove all personal info, but keep note info + officecfg::Office::Common::Security::Scripting::RemovePersonalInfoOnSaving::set(true, pBatch); + officecfg::Office::Common::Security::Scripting::KeepNoteAuthorDateInfoOnSaving::set(true, + pBatch); + pBatch->commit(); + + saveAndReload(u"Impress Office Open XML"_ustr); + + xmlDocUniquePtr pXml = parseExport(u"ppt/commentAuthors.xml"_ustr); + assertXPath(pXml, "/p:cmAuthorLst/p:cmAuthor[@id=0]"_ostr, "name"_ostr, "Hans Wurst"); + assertXPath(pXml, "/p:cmAuthorLst/p:cmAuthor[@id=1]"_ostr, "name"_ostr, "Max Muster"); + + pXml = parseExport(u"ppt/comments/comment1.xml"_ustr); + assertXPath(pXml, "/p:cmLst/p:cm"_ostr, "dt"_ostr, "2024-06-13T12:03:08.000000000"); + + // 2. Remove all personal info + officecfg::Office::Common::Security::Scripting::KeepNoteAuthorDateInfoOnSaving::set(false, + pBatch); + pBatch->commit(); + saveAndReload(u"Impress Office Open XML"_ustr); + + pXml = parseExport(u"ppt/commentAuthors.xml"_ustr); + assertXPath(pXml, "/p:cmAuthorLst/p:cmAuthor[@id=0]"_ostr, "name"_ostr, "Author1"); + assertXPath(pXml, "/p:cmAuthorLst/p:cmAuthor[@id=1]"_ostr, "name"_ostr, "Author2"); + + pXml = parseExport(u"ppt/comments/comment1.xml"_ustr); + assertXPathNoAttribute(pXml, "/p:cmLst/p:cm"_ostr, "dt"_ostr); +} + CPPUNIT_TEST_FIXTURE(SdOOXMLExportTest4, testTableCellVerticalPropertyRoundtrip) { createSdImpressDoc("pptx/tcPr-vert-roundtrip.pptx"); diff --git a/sd/source/filter/eppt/epptooxml.hxx b/sd/source/filter/eppt/epptooxml.hxx index c187c90c721c..9646afb865d8 100644 --- a/sd/source/filter/eppt/epptooxml.hxx +++ b/sd/source/filter/eppt/epptooxml.hxx @@ -22,6 +22,7 @@ #include #include #include +#include #include "epptbase.hxx" using ::sax_fastparser::FSHelperPtr; @@ -139,6 +140,7 @@ private: ::sax_fastparser::FSHelperPtr mPresentationFS; LayoutInfo mLayoutInfo[OOXML_LAYOUT_SIZE]; + std::unique_ptr mpAuthorIDs; // map authors to remove personal info std::vector< ::sax_fastparser::FSHelperPtr > mpSlidesFSArray; sal_Int32 mnLayoutFileIdMax; @@ -158,6 +160,8 @@ private: /// Map of placeholder indexes for Master placeholders std::unordered_map< css::uno::Reference, sal_Int32 > maPlaceholderShapeToIndexMap; + // Get author id to remove personal info + size_t GetInfoID( const OUString sPersonalInfo ) const { return mpAuthorIDs->GetInfoID(sPersonalInfo); } struct AuthorComments { sal_Int32 nId; sal_Int32 nLastIndex; diff --git a/sd/source/filter/eppt/pptx-epptooxml.cxx b/sd/source/filter/eppt/pptx-epptooxml.cxx index 2d9e51e40fa5..728682f955d6 100644 --- a/sd/source/filter/eppt/pptx-epptooxml.cxx +++ b/sd/source/filter/eppt/pptx-epptooxml.cxx @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -342,6 +343,7 @@ ShapeExport& PowerPointShapeExport::WriteUnknownShape(const Reference< XShape >& PowerPointExport::PowerPointExport(const Reference< XComponentContext >& rContext, const uno::Sequence& rArguments) : XmlFilterBase(rContext) + , mpAuthorIDs( new SvtSecurityMapPersonalInfo ) , mnLayoutFileIdMax(1) , mnSlideIdMax(1 << 8) , mnSlideMasterIdMax(1U << 31) @@ -1166,6 +1168,12 @@ bool PowerPointExport::WriteComments(sal_uInt32 nPageNum) if (xAnnotationEnumeration->hasMoreElements()) { + bool bRemoveCommentAuthorDates + = SvtSecurityOptions::IsOptionSet( + SvtSecurityOptions::EOption::DocWarnRemovePersonalInfo) + && !SvtSecurityOptions::IsOptionSet( + SvtSecurityOptions::EOption::DocWarnKeepNoteAuthorDateInfo); + FSHelperPtr pFS = openFragmentStreamWithSerializer( "ppt/comments/comment" + OUString::number(nPageNum + 1) + ".xml", u"application/vnd.openxmlformats-officedocument.presentationml.comments+xml"_ustr); @@ -1180,16 +1188,30 @@ bool PowerPointExport::WriteComments(sal_uInt32 nPageNum) RealPoint2D aRealPoint2D(xAnnotation->getPosition()); Reference< XText > xText(xAnnotation->getTextRange()); sal_Int32 nLastIndex; - sal_Int32 nId = GetAuthorIdAndLastIndex(xAnnotation->getAuthor(), nLastIndex); + OUString sAuthor(bRemoveCommentAuthorDates + ? "Author" + + OUString::number(GetInfoID(xAnnotation->getAuthor())) + : xAnnotation->getAuthor()); + sal_Int32 nId = GetAuthorIdAndLastIndex(sAuthor, nLastIndex); char cDateTime[sizeof("-32768-65535-65535T65535:65535:65535.4294967295")]; // reserve enough space for hypothetical max length snprintf(cDateTime, sizeof cDateTime, "%02" SAL_PRIdINT32 "-%02" SAL_PRIuUINT32 "-%02" SAL_PRIuUINT32 "T%02" SAL_PRIuUINT32 ":%02" SAL_PRIuUINT32 ":%02" SAL_PRIuUINT32 ".%09" SAL_PRIuUINT32, sal_Int32(aDateTime.Year), sal_uInt32(aDateTime.Month), sal_uInt32(aDateTime.Day), sal_uInt32(aDateTime.Hours), sal_uInt32(aDateTime.Minutes), sal_uInt32(aDateTime.Seconds), aDateTime.NanoSeconds); - pFS->startElementNS(XML_p, XML_cm, - XML_authorId, OString::number(nId), - XML_dt, cDateTime, - XML_idx, OString::number(nLastIndex)); + util::DateTime aEmptyDate; + if (bRemoveCommentAuthorDates || aDateTime == aEmptyDate) + { + pFS->startElementNS(XML_p, XML_cm, + XML_authorId, OString::number(nId), + XML_idx, OString::number(nLastIndex)); + } + else + { + pFS->startElementNS(XML_p, XML_cm, + XML_authorId, OString::number(nId), + XML_dt, cDateTime, + XML_idx, OString::number(nLastIndex)); + } pFS->singleElementNS(XML_p, XML_pos, XML_x, OString::number(std::round(convertMm100ToMasterUnit(aRealPoint2D.X * 100))),