From: <jo...@us...> - 2009-02-02 08:29:25
|
Revision: 6862 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6862&view=rev Author: jouni Date: 2009-02-02 08:29:18 +0000 (Mon, 02 Feb 2009) Log Message: ----------- Avoid malloc errors in ttconv for fonts that don't have e.g. PostName as entry (1,0,0,6) in the name table (a version of Tahoma triggered this) Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/ttconv/pprdrv_tt.cpp Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009-01-30 16:31:47 UTC (rev 6861) +++ trunk/matplotlib/CHANGELOG 2009-02-02 08:29:18 UTC (rev 6862) @@ -1,3 +1,6 @@ +2009-02-02 Avoid malloc errors in ttconv for fonts that don't have + e.g. PostName (a version of Tahoma triggered this) - JKS + 2009-01-30 Remove support for pyExcelerator in exceltools -- use xlwt instead - JDH Modified: trunk/matplotlib/ttconv/pprdrv_tt.cpp =================================================================== --- trunk/matplotlib/ttconv/pprdrv_tt.cpp 2009-01-30 16:31:47 UTC (rev 6861) +++ trunk/matplotlib/ttconv/pprdrv_tt.cpp 2009-02-02 08:29:18 UTC (rev 6862) @@ -178,10 +178,18 @@ table_ptr = NULL; - /* Set default values to avoid future references to */ - /* undefined pointers. */ - font->PostName = font->FullName = - font->FamilyName = font->Version = font->Style = (char*)"unknown"; + /* Set default values to avoid future references to undefined + * pointers. Allocate each of PostName, FullName, FamilyName, + * Version, and Style separately so they can be freed safely. */ + for (char **ptr = &(font->PostName); ptr != NULL; ) { + *ptr = (char*) calloc(sizeof(char), strlen("unknown")+1); + strcpy(*ptr, "unknown"); + if (ptr == &(font->PostName)) ptr = &(font->FullName); + else if (ptr == &(font->FullName)) ptr = &(font->FamilyName); + else if (ptr == &(font->FamilyName)) ptr = &(font->Version); + else if (ptr == &(font->Version)) ptr = &(font->Style); + else ptr = NULL; + } font->Copyright = font->Trademark = (char*)NULL; table_ptr = GetTable(font, "name"); /* pointer to table */ @@ -222,6 +230,7 @@ /* Font Family name */ if( platform == 1 && nameid == 1 ) { + free(font->FamilyName); font->FamilyName = (char*)calloc(sizeof(char),length+1); strncpy(font->FamilyName,(const char*)strings+offset,length); font->FamilyName[length]=(char)NULL; @@ -237,6 +246,7 @@ /* Font Family name */ if( platform == 1 && nameid == 2 ) { + free(font->Style); font->Style = (char*)calloc(sizeof(char),length+1); strncpy(font->Style,(const char*)strings+offset,length); font->Style[length]=(char)NULL; @@ -252,6 +262,7 @@ /* Full Font name */ if( platform == 1 && nameid == 4 ) { + free(font->FullName); font->FullName = (char*)calloc(sizeof(char),length+1); strncpy(font->FullName,(const char*)strings+offset,length); font->FullName[length]=(char)NULL; @@ -267,6 +278,7 @@ /* Version string */ if( platform == 1 && nameid == 5 ) { + free(font->Version); font->Version = (char*)calloc(sizeof(char),length+1); strncpy(font->Version,(const char*)strings+offset,length); font->Version[length]=(char)NULL; @@ -282,6 +294,7 @@ /* PostScript name */ if( platform == 1 && nameid == 6 ) { + free(font->PostName); font->PostName = (char*)calloc(sizeof(char),length+1); strncpy(font->PostName,(const char*)strings+offset,length); font->PostName[length]=(char)NULL; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |