filter/source/msfilter/svdfppt.cxx |    4 +-
 oox/source/export/chartexport.cxx  |   57 +++++++++++++++++++------------------
 oox/source/export/drawingml.cxx    |   14 +++++++--
 3 files changed, 45 insertions(+), 30 deletions(-)

New commits:
commit 680d341a1bab9eb28dd3980d47577a2f82afd7e2
Author:     Karthik <[email protected]>
AuthorDate: Thu Oct 9 21:33:23 2025 +0530
Commit:     Xisco Fauli <[email protected]>
CommitDate: Tue Nov 4 18:06:50 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
    Signed-off-by: Xisco Fauli <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/193418

diff --git a/filter/source/msfilter/svdfppt.cxx 
b/filter/source/msfilter/svdfppt.cxx
index 68885fbeae4d..60d3320af05e 100644
--- a/filter/source/msfilter/svdfppt.cxx
+++ b/filter/source/msfilter/svdfppt.cxx
@@ -6173,10 +6173,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 ba3608dee370..b5bc60c6a9d3 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -3600,6 +3600,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),
commit a2280b0a6364af7bdfd8cf2e15bf382b1fb0c838
Author:     Michael Meeks <[email protected]>
AuthorDate: Mon Oct 6 14:57:02 2025 +0100
Commit:     Xisco Fauli <[email protected]>
CommitDate: Tue Nov 4 18:06:43 2025 +0100

    oox: crop ST_TextIndentLevelType to maximum value of 8.
    
    Signed-off-by: Michael Meeks <[email protected]>
    Change-Id: I5994b4414a4ef79564a44a8a661498765fd4b125
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/191980
    Tested-by: Jenkins
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/193417
    Reviewed-by: Xisco Fauli <[email protected]>

diff --git a/oox/source/export/drawingml.cxx b/oox/source/export/drawingml.cxx
index 1782a11d51c9..ba3608dee370 100644
--- a/oox/source/export/drawingml.cxx
+++ b/oox/source/export/drawingml.cxx
@@ -3597,18 +3597,21 @@ bool DrawingML::WriteParagraphProperties(const 
Reference<XTextContent>& rParagra
     if (GetProperty(rXPropSet, u"ParaTabStopDefaultDistance"_ustr))
         mAny >>= nParaDefaultTabSize;
 
+    // ST_TextIndentLevelType
+    const sal_Int16 nOutLevel = std::min(nLevel, sal_Int16(8));
+
     if (nParaLeftMargin) // For Paragraph
         mpFS->startElementNS( XML_a, nElement,
-                           XML_lvl, 
sax_fastparser::UseIf(OString::number(nLevel), nLevel > 0),
                            XML_marL, 
sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nParaLeftMargin)),
 nParaLeftMargin > 0),
+                           XML_lvl, 
sax_fastparser::UseIf(OString::number(nOutLevel), nOutLevel > 0),
                            XML_indent, 
sax_fastparser::UseIf(OString::number((bForceZeroIndent && nParaFirstLineIndent 
== 0) ? 0 : oox::drawingml::convertHmmToEmu(nParaFirstLineIndent)), 
(bForceZeroIndent || nParaFirstLineIndent != 0)),
                            XML_algn, GetAlignment( nAlignment ),
                            XML_defTabSz, 
sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nParaDefaultTabSize)),
 nParaDefaultTabSize > 0),
                            XML_rtl, sax_fastparser::UseIf(ToPsz10(bRtl), 
bRtl));
     else
         mpFS->startElementNS( XML_a, nElement,
-                           XML_lvl, 
sax_fastparser::UseIf(OString::number(nLevel), nLevel > 0),
                            XML_marL, 
sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nLeftMargin)),
 nLeftMargin > 0),
+                           XML_lvl, 
sax_fastparser::UseIf(OString::number(nOutLevel), nOutLevel > 0),
                            XML_indent, 
sax_fastparser::UseIf(OString::number(!bForceZeroIndent ? 
oox::drawingml::convertHmmToEmu(nLineIndentation) : 0), (bForceZeroIndent || ( 
nLineIndentation != 0))),
                            XML_algn, GetAlignment( nAlignment ),
                            XML_defTabSz, 
sax_fastparser::UseIf(OString::number(oox::drawingml::convertHmmToEmu(nParaDefaultTabSize)),
 nParaDefaultTabSize > 0),
commit d511a09d9bb6276cefc4cef5fd6795b84b382974
Author:     Noel Grandin <[email protected]>
AuthorDate: Mon Nov 3 13:32:42 2025 +0200
Commit:     Xisco Fauli <[email protected]>
CommitDate: Tue Nov 4 18:06:36 2025 +0100

    mso-test: c:dLbl element wrong order
    
    This is using the test document from ttdf92129-5.odt.
    When importing and exporting to DOCX, we were writing the dLbl before the 
numFormat
    element, instead of after it.
    
    Change-Id: I541688f2df4f879294ad56182db8eb1df6edf182
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/193344
    Reviewed-by: Michael Stahl <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>
    (cherry picked from commit 5f3fca8a18aa697904a0310db22db6dab27fba67)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/193383
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <[email protected]>
    (cherry picked from commit 320a5640dec289cc936b9de51a09760d33432acd)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/193389
    Reviewed-by: Xisco Fauli <[email protected]>

diff --git a/oox/source/export/chartexport.cxx 
b/oox/source/export/chartexport.cxx
index aba13dd9bb6c..f7e9cb75b5b4 100644
--- a/oox/source/export/chartexport.cxx
+++ b/oox/source/export/chartexport.cxx
@@ -4718,33 +4718,6 @@ void ChartExport::exportDataLabels(
         pFS->startElement(FSNS(XML_c, XML_dLbls));
     }
 
-    bool bLinkedNumFmt = true;
-    if (GetProperty(xPropSet, u"LinkNumberFormatToSource"_ustr))
-        mAny >>= bLinkedNumFmt;
-
-    chart2::DataPointLabel aLabel;
-    bool bLabelIsNumberFormat = true;
-    if( xPropSet->getPropertyValue(u"Label"_ustr) >>= aLabel )
-        bLabelIsNumberFormat = aLabel.ShowNumber;
-
-    if (GetProperty(xPropSet, bLabelIsNumberFormat ? u"NumberFormat"_ustr : 
u"PercentageNumberFormat"_ustr))
-    {
-        sal_Int32 nKey = 0;
-        mAny >>= nKey;
-
-        OUString aNumberFormatString = getNumberFormatCode(nKey);
-
-        if (bIsChartex) {
-            pFS->singleElement(FSNS(XML_cx, XML_numFmt),
-                XML_formatCode, aNumberFormatString,
-                XML_sourceLinked, ToPsz10(bLinkedNumFmt));
-        } else {
-            pFS->singleElement(FSNS(XML_c, XML_numFmt),
-                XML_formatCode, aNumberFormatString,
-                XML_sourceLinked, ToPsz10(bLinkedNumFmt));
-        }
-    }
-
     uno::Sequence<sal_Int32> aAttrLabelIndices;
     xPropSet->getPropertyValue(u"AttributedDataPoints"_ustr) >>= 
aAttrLabelIndices;
 
@@ -4851,9 +4824,12 @@ void ChartExport::exportDataLabels(
             }
         }
 
+        bool bLinkedNumFmt = false;
         if( GetProperty(xLabelPropSet, u"LinkNumberFormatToSource"_ustr) )
             mAny >>= bLinkedNumFmt;
 
+        chart2::DataPointLabel aLabel;
+        bool bLabelIsNumberFormat = true;
         if( xLabelPropSet->getPropertyValue(u"Label"_ustr) >>= aLabel )
             bLabelIsNumberFormat = aLabel.ShowNumber;
         else
@@ -4881,6 +4857,33 @@ void ChartExport::exportDataLabels(
         pFS->endElement(FSNS(XML_c, XML_dLbl));
     }
 
+    bool bLinkedNumFmt = true;
+    if (GetProperty(xPropSet, u"LinkNumberFormatToSource"_ustr))
+        mAny >>= bLinkedNumFmt;
+
+    chart2::DataPointLabel aLabel;
+    bool bLabelIsNumberFormat = true;
+    if( xPropSet->getPropertyValue(u"Label"_ustr) >>= aLabel )
+        bLabelIsNumberFormat = aLabel.ShowNumber;
+
+    if (GetProperty(xPropSet, bLabelIsNumberFormat ? u"NumberFormat"_ustr : 
u"PercentageNumberFormat"_ustr))
+    {
+        sal_Int32 nKey = 0;
+        mAny >>= nKey;
+
+        OUString aNumberFormatString = getNumberFormatCode(nKey);
+
+        if (bIsChartex) {
+            pFS->singleElement(FSNS(XML_cx, XML_numFmt),
+                XML_formatCode, aNumberFormatString,
+                XML_sourceLinked, ToPsz10(bLinkedNumFmt));
+        } else {
+            pFS->singleElement(FSNS(XML_c, XML_numFmt),
+                XML_formatCode, aNumberFormatString,
+                XML_sourceLinked, ToPsz10(bLinkedNumFmt));
+        }
+    }
+
     // Baseline label properties for all labels.
     writeLabelProperties(pFS, this, xPropSet, aParam, -1, rDLblsRange,
             bIsChartex);

Reply via email to