vcl/CppunitTest_vcl_pdfexport.mk |    5 +++++
 vcl/source/outdev/font.cxx       |   16 ++++++++++++++--
 2 files changed, 19 insertions(+), 2 deletions(-)

New commits:
commit b04507b6cc36de337b6aae67ed51fd36cc4a3482
Author:     Caolán McNamara <[email protected]>
AuthorDate: Sat Aug 20 13:38:38 2022 +0100
Commit:     Caolán McNamara <[email protected]>
CommitDate: Mon Aug 22 16:13:44 2022 +0200

    ensure no font/glyph fallback is happening for repeatable results
    
    Change-Id: I7098ea59f1da2c80cde138109dd6a5c8e5b7e997
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/138681
    Tested-by: Jenkins
    Reviewed-by: Caolán McNamara <[email protected]>

diff --git a/vcl/CppunitTest_vcl_pdfexport.mk b/vcl/CppunitTest_vcl_pdfexport.mk
index 2721d15e410b..1810d69042e0 100644
--- a/vcl/CppunitTest_vcl_pdfexport.mk
+++ b/vcl/CppunitTest_vcl_pdfexport.mk
@@ -43,6 +43,11 @@ $(eval $(call gb_CppunitTest_use_rdb,vcl_pdfexport,services))
 
 $(eval $(call gb_CppunitTest_use_configuration,vcl_pdfexport))
 
+# assert if font/glyph fallback occurs
+$(call gb_CppunitTest_get_target,vcl_pdfexport): \
+    EXTRA_ENV_VARS := \
+        SAL_ABORT_ON_NON_APPLICATION_FONT_USE=1
+
 $(eval $(call gb_CppunitTest_use_more_fonts,vcl_pdfexport))
 
 # vim: set noet sw=4 ts=4:
diff --git a/vcl/source/outdev/font.cxx b/vcl/source/outdev/font.cxx
index af0faea6dd74..e334d1bb1fb9 100644
--- a/vcl/source/outdev/font.cxx
+++ b/vcl/source/outdev/font.cxx
@@ -613,11 +613,14 @@ void OutputDevice::RemoveFontsSubstitute()
 vcl::Font OutputDevice::GetDefaultFont( DefaultFontType nType, LanguageType 
eLang,
                                         GetDefaultFontFlags nFlags, const 
OutputDevice* pOutDev )
 {
-    if (!pOutDev && !utl::ConfigManager::IsFuzzing()) // default is NULL
+    static bool bFuzzing = utl::ConfigManager::IsFuzzing();
+    static bool bAbortOnFontSubstitute = 
getenv("SAL_ABORT_ON_NON_APPLICATION_FONT_USE") != nullptr;
+
+    if (!pOutDev && !bFuzzing) // default is NULL
         pOutDev = Application::GetDefaultDevice();
 
     OUString aSearch;
-    if (!utl::ConfigManager::IsFuzzing())
+    if (!bFuzzing)
     {
         LanguageTag aLanguageTag(
                 ( eLang == LANGUAGE_NONE || eLang == LANGUAGE_SYSTEM || eLang 
== LANGUAGE_DONTKNOW ) ?
@@ -631,6 +634,15 @@ vcl::Font OutputDevice::GetDefaultFont( DefaultFontType 
nType, LanguageType eLan
             aSearch = aDefault;
         else
             aSearch = rDefaults.getUserInterfaceFont( aLanguageTag ); // use 
the UI font as a fallback
+
+        // during SAL_ABORT_ON_NON_APPLICATION_FONT_USE cppunit tests we don't 
have any bundled fonts
+        // that support the default CTL and CJK languages of Hindi and 
Chinese, so just pick something
+        // (unsuitable) that does exist, if they get used, then glyph fallback 
will trigger std::abort
+        if (bAbortOnFontSubstitute)
+        {
+            if (eLang == LANGUAGE_HINDI || eLang == 
LANGUAGE_CHINESE_SIMPLIFIED)
+                aSearch = "DejaVu Sans";
+        }
     }
     else
         aSearch = "Liberation Serif";

Reply via email to