[Pkg-fonts-bugs] Bug#432762: [Fontforge-devel] Bug#432762: fontforge: segfaults during scrolling

George Williams gww at silcom.com
Fri Jul 13 01:14:28 UTC 2007


On Thu, 2007-07-12 at 15:27, Kęstutis Biliūnas wrote:
> forwarded 432762 fontforge-devel at lists.sourceforge.net
> tags 432762 pending
> thanks
> 
> Tr, 2007 07 11 22:19 +0200, Eugeniy Meshcheryakov rašė:
> > Package: fontforge
> > Version: 0.0.20070607-3
> > Severity: important
> > Tags: patch
> > 
> > Fontforge segfaults during scrolling (using PgDown button) of main window
> > when DejaVuSans font is loaded. It segfaults just after showing first
> > page with characters outside BMP.

-------------- next part --------------
--- gdraw/gdrawtxt.c~	2007-07-12 17:56:47.000000000 -0700
+++ gdraw/gdrawtxt.c	2007-07-12 17:56:48.000000000 -0700
@@ -624,7 +624,7 @@
     above = 0;
     if ( ch=='\t' ) some = 0;
     else for ( level=0; level<name_cnt+3; ++level ) {
-	some = unicode_backtrans[ch>>8][ch&0xff] | (1<<em_unicode);
+	some = (ch>=0x10000)? 0 : unicode_backtrans[ch>>8][ch&0xff] | (1<<em_unicode);
 	for ( ; level<name_cnt+3; ++level ) {
 	    if ( some&fi->level_masks[level] )
 	break;
@@ -651,7 +651,8 @@
 		/*  letter they combine with. Even if they aren't in that font*/
 	continue;
 	    else {
-		some = unicode_backtrans[ch>>8][ch&0xff] | (1<<em_unicode);
+		some = (ch>=0x10000) ? 0 :
+			(unicode_backtrans[ch>>8][ch&0xff] | (1<<em_unicode));
 	    }
 	    if ( some&above )		/* a better font matches this character*/
 	break;
@@ -731,7 +732,7 @@
 	for ( text = strt; text<end; ++text ) {
 	    ch = *text;
 	    some = 0;
-	    if ( text!=strt && iscombining(ch))
+	    if ( ch>=0x10000 || (text!=strt && iscombining(ch)))
 	continue;
 	    if ( (plane = unicode_backtrans[ch>>8])!=NULL )
 		some = plane[ch&0xff];
@@ -752,7 +753,7 @@
 	for ( text = strt+1; text<end; ++text ) {
 	    ch = *text;
 	    some = 0;
-	    if ( text!=strt && iscombining(ch))
+	    if ( ch>=0x10000 || (text!=strt && iscombining(ch)))
 	continue;
 	    if ( (plane = unicode_backtrans[ch>>8])!=NULL )
 		some = plane[ch&0xff];
@@ -936,7 +937,9 @@
     }
 
     for ( level=0; level<fi->fam->name_cnt+3; ++level ) {
-	some = unicode_backtrans[ch>>8][ch&0xff] | (1<<em_unicode);
+	some = 0;
+	if ( ch<0x10000 )
+	    some = unicode_backtrans[ch>>8][ch&0xff] | (1<<em_unicode);
 	some &= fi->level_masks[level];
 	if ( some==(1<<em_unicode) ) {
 	    if ( UnicodeCharExists(fi->mapped_to,fi->unifonts[level],ch,fi)) {
@@ -1251,7 +1254,7 @@
 		/* If it's not in a mapping see if there's an alternate */
 		/*  representation which might be (ie half vs. full width) */
 		/*  Also decomposes accented letters, long s to short, ligs, etc. */
-		if ( (ua_plane = unicode_alternates[ch>>8])!=NULL &&
+		if ( ch<0x10000 && (ua_plane = unicode_alternates[ch>>8])!=NULL &&
 			(str=ua_plane[ch&0xff])!=NULL &&
 			PickAccentFont(fi,NULL,*str,&accent)!=NULL ) {
 		    /* The final check means we've got at least one character*/
@@ -1298,7 +1301,7 @@
 		/* the first character is allowed to have an alternate */
 		/*  if we failed to find a font for it we'll drop down to here*/
 		for ( npt=text+1 ; npt<pt; ++npt )
-		    if ( (ua_plane = unicode_alternates[*npt>>8])!=NULL &&
+		    if ( *npt<0x10000 && (ua_plane = unicode_alternates[*npt>>8])!=NULL &&
 			    ua_plane[*npt&0xff]!=NULL )
 		break;
 	    } else


More information about the Pkg-fonts-bugs mailing list