vcl/unx/generic/gdi/cairotextrender.cxx |    9 +++++++++
 1 file changed, 9 insertions(+)

New commits:
commit 9c47425041eb8c610da2963bdbaa707a6d3ea1f9
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Tue Apr 12 10:26:40 2022 +0100
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Tue Apr 12 20:50:39 2022 +0200

    ofz#46632 Direct-leak
    
    Change-Id: I01fe4ae8907fb95708d54a39d1cc78d89b4d6e64
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/132893
    Tested-by: Caolán McNamara <caol...@redhat.com>
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/vcl/unx/generic/gdi/cairotextrender.cxx 
b/vcl/unx/generic/gdi/cairotextrender.cxx
index 9fd3ec8b4745..31c2a73c2eb4 100644
--- a/vcl/unx/generic/gdi/cairotextrender.cxx
+++ b/vcl/unx/generic/gdi/cairotextrender.cxx
@@ -152,6 +152,15 @@ void CairoTextRender::DrawTextLayout(const 
GenericSalLayout& rLayout, const SalG
     if (nWidth == 0 || nHeight == 0)
         return;
 
+    if (nHeight > SAL_MAX_UINT16)
+    {
+        // as seen with freetype 2.11.0, so cairo surface status is "fail"
+        // ("error occurred in libfreetype") and no further operations are
+        // executed, so this error then leads to later leaks
+        SAL_WARN("vcl", "rendering text would fail with height: " << nHeight);
+        return;
+    }
+
     int nRatio = nWidth * 10 / nHeight;
     if (FreetypeFont::AlmostHorizontalDrainsRenderingPool(nRatio, rFSD))
         return;

Reply via email to