--- fontforge/fontforge/fvimportbdf.c 15 Apr 2010 10:47:36 -0000 1.58 +++ fontforge/fontforge/fvimportbdf.c 3 Dec 2010 21:03:38 -0000 @@ -560,7 +560,7 @@ } if ( strcmp(tok,"FONT")==0 ) { - if ( sscanf(buf,"-%*[^-]-%[^-]-%[^-]-%[^-]-%*[^-]-", family, weight, italic )!=0 ) { + if ( sscanf(buf,"-%*[^-]-%99[^-]-%99[^-]-%99[^-]-%*[^-]-", family, weight, italic )!=0 ) { char *pt=buf; int dcnt=0; while ( *pt=='-' && dcnt<7 ) { ++pt; ++dcnt; } @@ -616,26 +616,30 @@ sscanf(buf, "%d", &defs->metricsset ); else if ( strcmp(tok,"VVECTOR")==0 ) sscanf(buf, "%*d %d", &defs->vertical_origin ); + /* For foundry, fontname and encname, only copy up to the buffer size */ else if ( strcmp(tok,"FOUNDRY")==0 ) - sscanf(buf, "%[^\"]", foundry ); + sscanf(buf, "%99[^\"]", foundry ); else if ( strcmp(tok,"FONT_NAME")==0 ) - sscanf(buf, "%[^\"]", fontname ); + sscanf(buf, "%99[^\"]", fontname ); else if ( strcmp(tok,"CHARSET_REGISTRY")==0 ) - sscanf(buf, "%[^\"]", encname ); + sscanf(buf, "%99[^\"]", encname ); else if ( strcmp(tok,"CHARSET_ENCODING")==0 ) { enc = 0; if ( sscanf(buf, " %d", &enc )!=1 ) sscanf(buf, "%d", &enc ); + /* These properties should be copied up to the buffer length too */ } else if ( strcmp(tok,"FAMILY_NAME")==0 ) { - strcpy(family,buf); + strncpy(family,buf,99); } else if ( strcmp(tok,"FULL_NAME")==0 || strcmp(tok,"FACE_NAME")==0 ) { - strcpy(full,buf); + strncpy(full,buf,99); } else if ( strcmp(tok,"WEIGHT_NAME")==0 ) - strcpy(weight,buf); + strncpy(weight,buf,99); else if ( strcmp(tok,"SLANT")==0 ) - strcpy(italic,buf); + strncpy(italic,buf,99); else if ( strcmp(tok,"COPYRIGHT")==0 ) { - strcpy(comments,buf); + /* LS: Assume the size of the passed-in buffer is 1000, see below in + * COMMENT */ + strncpy(comments,buf,999); found_copyright = true; } else if ( strcmp(tok,"COMMENT")==0 && !found_copyright ) { char *pt = comments+strlen(comments);