vcl/source/filter/svm/SvmConverter.cxx |   34 ++++++++++++++++++++-------------
 1 file changed, 21 insertions(+), 13 deletions(-)

New commits:
commit 4015c18130ced8dcfdfaec99b11cd914beec0449
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Fri Mar 4 11:07:49 2022 +0000
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Fri Mar 4 16:41:30 2022 +0100

    clamp and add some logging like SvmReader
    
    Change-Id: I8f744e1ab2684a0f0995abcc3e753a684a3b970a
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130971
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/vcl/source/filter/svm/SvmConverter.cxx 
b/vcl/source/filter/svm/SvmConverter.cxx
index 189be4b7a398..004abcd4d751 100644
--- a/vcl/source/filter/svm/SvmConverter.cxx
+++ b/vcl/source/filter/svm/SvmConverter.cxx
@@ -249,17 +249,25 @@ namespace
         return std::min(remainingActions, nFollowingActionCount);
     }
 
-    bool NormalizeRange(const OUString& rStr, sal_Int32& rIndex, sal_Int32& 
rLength,
+    void ClampRange(const OUString& rStr, sal_Int32& rIndex, sal_Int32& 
rLength,
                         std::vector<sal_Int32>* pDXAry = nullptr)
     {
-        const sal_uInt32 nStrLength = rStr.getLength();
-        rIndex = std::min<sal_uInt32>(rIndex, nStrLength);
-        rLength = std::min<sal_uInt32>(rLength, nStrLength - rIndex);
-        if (pDXAry && pDXAry->size() > o3tl::make_unsigned(rLength))
+        const sal_Int32 nStrLength = rStr.getLength();
+
+        if (rIndex < 0 || rIndex > nStrLength)
         {
-            pDXAry->resize(rLength);
+            SAL_WARN("vcl.gdi", "inconsistent offset");
+            rIndex = nStrLength;
         }
-        return rLength > 0;
+
+        if (rLength < 0 || rLength > nStrLength - rIndex)
+        {
+            SAL_WARN("vcl.gdi", "inconsistent len");
+            rLength = nStrLength - rIndex;
+        }
+
+        if (pDXAry && pDXAry->size() > o3tl::make_unsigned(rLength))
+            pDXAry->resize(rLength);
     }
 }
 
@@ -704,8 +712,8 @@ void SVMConverter::ImplConvertFromSVM1( SvStream& rIStm, 
GDIMetaFile& rMtf )
                     OUString aStr(OStringToOUString(aByteStr, eActualCharSet));
                     if ( nUnicodeCommentActionNumber == i )
                         ImplReadUnicodeComment( nUnicodeCommentStreamPos, 
rIStm, aStr );
-                    if (NormalizeRange(aStr, nIndex, nLen))
-                        rMtf.AddAction( new MetaTextAction( aPt, aStr, nIndex, 
nLen ) );
+                    ClampRange(aStr, nIndex, nLen);
+                    rMtf.AddAction( new MetaTextAction( aPt, aStr, nIndex, 
nLen ) );
                 }
 
                 if (nActionSize < 24)
@@ -794,8 +802,8 @@ void SVMConverter::ImplConvertFromSVM1( SvStream& rIStm, 
GDIMetaFile& rMtf )
                     }
                     if ( nUnicodeCommentActionNumber == i )
                         ImplReadUnicodeComment( nUnicodeCommentStreamPos, 
rIStm, aStr );
-                    if (NormalizeRange(aStr, nIndex, nLen, &aDXAry))
-                        rMtf.AddAction( new MetaTextArrayAction( aPt, aStr, 
aDXAry, nIndex, nLen ) );
+                    ClampRange(aStr, nIndex, nLen, &aDXAry);
+                    rMtf.AddAction( new MetaTextArrayAction( aPt, aStr, 
aDXAry, nIndex, nLen ) );
                 }
 
                 if (nActionSize < 24)
@@ -821,8 +829,8 @@ void SVMConverter::ImplConvertFromSVM1( SvStream& rIStm, 
GDIMetaFile& rMtf )
                     OUString aStr(OStringToOUString(aByteStr, eActualCharSet));
                     if ( nUnicodeCommentActionNumber == i )
                         ImplReadUnicodeComment( nUnicodeCommentStreamPos, 
rIStm, aStr );
-                    if (NormalizeRange(aStr, nIndex, nLen))
-                        rMtf.AddAction( new MetaStretchTextAction( aPt, 
nWidth, aStr, nIndex, nLen ) );
+                    ClampRange(aStr, nIndex, nLen);
+                    rMtf.AddAction( new MetaStretchTextAction( aPt, nWidth, 
aStr, nIndex, nLen ) );
                 }
 
                 if (nActionSize < 28)

Reply via email to