]> git.saurik.com Git - wxWidgets.git/commitdiff
clamp the point size of the font to a reaosnable range (second part of patch 1481722)
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 6 May 2006 20:23:36 +0000 (20:23 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 6 May 2006 20:23:36 +0000 (20:23 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@39082 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/unix/fontutil.cpp

index 2d04279540a4ac4c69b4f0d5102e8c18362cfd4d..8a9a029b267403810df0873d945ac870890ede50 100644 (file)
@@ -277,7 +277,32 @@ bool wxNativeFontInfo::FromString(const wxString& s)
     if (description)
         pango_font_description_free( description );
 
     if (description)
         pango_font_description_free( description );
 
-    description = pango_font_description_from_string( wxGTK_CONV_SYS( s ) );
+    // there is a bug in at least pango <= 1.13 which makes it (or its backends)
+    // segfault for very big point sizes and for negative point sizes.
+    // To workaround that bug for pango <= 1.13
+    // (see http://bugzilla.gnome.org/show_bug.cgi?id=340229)
+    // we do the check on the size here using same (arbitrary) limits used by
+    // pango > 1.13. Note that the segfault could happen also for pointsize
+    // smaller than this limit !!
+    wxString str(s);
+    const size_t pos = str.find_last_of(_T(" "));
+    double size;
+    if ( pos != wxString::npos && wxString(str, pos + 1).ToDouble(&size) )
+    {
+        wxString sizeStr;
+        if ( size < 1 )
+            sizeStr = _T("1");
+        else if ( n >= 1E6 )
+            sizeStr = _T("1E6");
+
+        if ( !sizeStr.empty() )
+        {
+            // replace the old size with the adjusted one
+            str = wxString(s, 0, pos) + sizeStr;
+        }
+    }
+
+    description = pango_font_description_from_string( wxGTK_CONV_SYS( str ) );
 
     return true;
 }
 
     return true;
 }