path: root/vcl/unx
diff options
authorCaolán McNamara <>2013-04-18 13:13:43 +0100
committerFridrich Strba <>2013-05-16 15:15:37 +0000
commitb4f4cdc231fb8f35954cd896d95c087933ab96b0 (patch)
treeda860b340c85b8a9ac836aac706c9a889a91b990 /vcl/unx
parente33f51a6bec412e988ab7750309358512a3c0614 (diff)
Resolves: rhbz#963276 rhbz#761009 lp#766153 lp#892904 HandleFontOptions crash
The mpServerFont member of a ImplServerFontEntry must not be deleted while the ImplServerFontEntry still exists see also 39cbce553da1834f78b77f48b2f1be9578d6cc05 for another reason a crash in the same place can happen. Its impossible from traces in crashes before 39cbce553da1834f78b77f48b2f1be9578d6cc05 was fixed to distinguish those crashes from this crash. This crash is a regression due to 7a416820ab5e03f8b988656e0f6a592cb1e81d07 where we went from modifying pServerFont in X11SalGraphics::setFont directly to modifying it/a-different-one indirectly via ImplServerFontEntry The various font caches and font thing lifecycles of LibreOffice are somewhat confusing. This crash had eluded me for years, to reproduce: insert->special chars->select a font with loads of glyphs, i.e. "AR PL UKai CN" click on the first row of glyphs and hold down page-down until you hit the bottom, then page-up until you hit the top. Pre patch it won't survive the whole down+up (and valgrind will moan quite a bit) (cherry picked from commit 3d6424a752902bba513102834966868f609d91e6) Change-Id: Ifde0cb375f487c556b04a640d77765a7dc2f0913 Reviewed-on: Reviewed-by: Fridrich Strba <> Tested-by: Fridrich Strba <>
Diffstat (limited to 'vcl/unx')
1 files changed, 4 insertions, 4 deletions
diff --git a/vcl/unx/generic/gdi/salgdi3.cxx b/vcl/unx/generic/gdi/salgdi3.cxx
index beaf8fd9d68b..21089cc82d5b 100644
--- a/vcl/unx/generic/gdi/salgdi3.cxx
+++ b/vcl/unx/generic/gdi/salgdi3.cxx
@@ -194,10 +194,10 @@ bool X11SalGraphics::setFont( const FontSelectPattern *pEntry, int nFallbackLeve
// apply font specific-hint settings if needed
// TODO: also disable it for reference devices
- if( !bPrinter_ )
- {
- ImplServerFontEntry* pSFE = static_cast<ImplServerFontEntry*>( pEntry->mpFontEntry );
- pSFE->HandleFontOptions();
+ if( !bPrinter_ )
+ {
+ ImplServerFontEntry* pSFE = static_cast<ImplServerFontEntry*>( pEntry->mpFontEntry );
+ pSFE->HandleFontOptions();
return true;