vcl/headless/CairoCommon.cxx |   13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

New commits:
commit 81fa9b03ca8175d2be8ff261916d22c54a4d73a3
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Sat Mar 16 21:20:20 2024 +0000
Commit:     Caolán McNamara <caolan.mcnam...@collabora.com>
CommitDate: Sun Mar 17 22:17:23 2024 +0100

    ofz#66825 Out-of-memory
    
    Change-Id: Ic3ce086dc6ba3f85824ec1e68d7501f278f758ab
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/164935
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com>

diff --git a/vcl/headless/CairoCommon.cxx b/vcl/headless/CairoCommon.cxx
index 9a84903e5483..38b0bf9418df 100644
--- a/vcl/headless/CairoCommon.cxx
+++ b/vcl/headless/CairoCommon.cxx
@@ -1095,14 +1095,17 @@ bool CairoCommon::drawPolyLine(const 
basegfx::B2DHomMatrix& rObjectToDevice,
     cairo_set_line_join(cr, eCairoLineJoin);
     cairo_set_line_cap(cr, eCairoLineCap);
 
-    constexpr int MaxNormalLineWidth = 64;
-    if (fLineWidth > MaxNormalLineWidth)
+    constexpr int MaxNormalLineWidthPx = 64;
+    if (fLineWidth > MaxNormalLineWidthPx)
     {
         const double fLineWidthPixel
             = bObjectToDeviceIsIdentity
                   ? fLineWidth
                   : (rObjectToDevice * basegfx::B2DVector(fLineWidth, 
0)).getLength();
-        if (fLineWidthPixel > MaxNormalLineWidth)
+        constexpr double MaxLineWidth = 0x20000000;
+        // if the width is pixels is excessive, or if the actual number is 
huge, then
+        // when fuzzing drop it to something small
+        if (fLineWidthPixel > MaxNormalLineWidthPx || fLineWidth > 
MaxLineWidth)
         {
             SAL_WARN("vcl.gdi", "drawPolyLine, suspicious input line width of: 
"
                                     << fLineWidth << ", will be " << 
fLineWidthPixel
@@ -1111,8 +1114,8 @@ bool CairoCommon::drawPolyLine(const 
basegfx::B2DHomMatrix& rObjectToDevice,
             {
                 basegfx::B2DHomMatrix aObjectToDeviceInv(rObjectToDevice);
                 aObjectToDeviceInv.invert();
-                fLineWidth
-                    = (aObjectToDeviceInv * 
basegfx::B2DVector(MaxNormalLineWidth, 0)).getLength();
+                fLineWidth = (aObjectToDeviceInv * 
basegfx::B2DVector(MaxNormalLineWidthPx, 0))
+                                 .getLength();
                 fLineWidth = std::min(fLineWidth, 2048.0);
             }
         }
  • core.git: vcl/headless Caolán McNamara (via logerrit)
    • core.git: vcl/headless Caolán McNamara (via logerrit)

Reply via email to