filter/source/msfilter/svdfppt.cxx | 4 +++- oox/source/export/drawingml.cxx | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-)
New commits: commit 690b08779c0eae0fcc5dc50fcae84ab130a88405 Author: Karthik <[email protected]> AuthorDate: Thu Oct 9 21:33:23 2025 +0530 Commit: Michael Stahl <[email protected]> CommitDate: Tue Nov 4 13:02:45 2025 +0100 impress: fix PPT->PPTX margin interoperability issue Saving a PPT file as PPTX could corrupt the output if the left margin was set too high. The margin value must not exceed 51206400 EMUs. ([ISO/IEC 29500-1] 20.1.10.72). The patch sets an upper limit on margin values during both PPT import and PPTX export. Change-Id: I59791059ed4805ec52133cd7926a1e752a18b701 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/192121 Reviewed-by: Michael Stahl <[email protected]> Tested-by: Jenkins CollaboraOffice <[email protected]> (cherry picked from commit 70f344e6376f572fa85a4c3f74228588ed2a6b63) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/193073 Tested-by: Jenkins diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx index 42f5cf81cfae..d2f192bf9991 100644 --- a/filter/source/msfilter/svdfppt.cxx +++ b/filter/source/msfilter/svdfppt.cxx @@ -6170,10 +6170,12 @@ void PPTParagraphObj::ApplyTo( SfxItemSet& rSet, std::optional< sal_Int16 >& rS SvxLRSpaceItem aLRSpaceItem( EE_PARA_LRSPACE ); if ( !nIsBullet2 ) { + // The margin value can't be greater than 51206400 Emu, which is 142240 MM100 ([ISO/IEC 29500-1] 20.1.10.72) + sal_uInt32 nMaxMarginVal = 142240; auto const nAbsLSpace = convertMasterUnitToMm100(_nTextOfs); auto const nFirstLineOffset = nAbsLSpace - convertMasterUnitToMm100(_nBulletOfs); aLRSpaceItem.SetTextFirstLineOffset(SvxIndentValue::twips(-nFirstLineOffset)); - aLRSpaceItem.SetTextLeft(SvxIndentValue::twips(nAbsLSpace)); + aLRSpaceItem.SetTextLeft(SvxIndentValue::twips(nAbsLSpace > nMaxMarginVal ? 0 : nAbsLSpace)); } rSet.Put( aLRSpaceItem ); diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx index 6f1a75ee9b10..2955062eefc9 100644 --- a/oox/source/export/drawingml.cxx +++ b/oox/source/export/drawingml.cxx @@ -3578,6 +3578,13 @@ bool DrawingML::WriteParagraphProperties(const Reference<XTextContent>& rParagra // ST_TextIndentLevelType const sal_Int16 nOutLevel = std::min(nLevel, sal_Int16(8)); + // ST_TextMargin: The margin value can't be greater than 51206400 Emu, which is 142240 MM100 ([ISO/IEC 29500-1] 20.1.10.72) + sal_Int32 nMaxMarginVal = 142240; + if (nParaLeftMargin > nMaxMarginVal) + nParaLeftMargin = 0; + if (nLeftMargin > nMaxMarginVal) + nLeftMargin = 0; + if (nParaLeftMargin) // For Paragraph mpFS->startElementNS( XML_a, nElement, XML_marL, sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nParaLeftMargin)), nParaLeftMargin > 0),
