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),

Reply via email to