From: <and...@us...> - 2009-02-09 09:41:13
|
Revision: 9478 http://plplot.svn.sourceforge.net/plplot/?rev=9478&view=rev Author: andrewross Date: 2009-02-09 09:41:11 +0000 (Mon, 09 Feb 2009) Log Message: ----------- Fix up use of strncat and strncpy to correctly interpret the size parameter. Modified Paths: -------------- trunk/drivers/cairo.c trunk/drivers/psttf.cc trunk/src/plctrl.c Modified: trunk/drivers/cairo.c =================================================================== --- trunk/drivers/cairo.c 2009-02-08 22:34:26 UTC (rev 9477) +++ trunk/drivers/cairo.c 2009-02-09 09:41:11 UTC (rev 9478) @@ -498,17 +498,17 @@ switch(ucs4[i]) { case 38: - strncat(pangoMarkupString, "&", MAX_MARKUP_LEN); + strncat(pangoMarkupString, "&", MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); break; case 60: - strncat(pangoMarkupString, "<", MAX_MARKUP_LEN); + strncat(pangoMarkupString, "<", MAX_MARKUP_LEN)-1-strlen(pangoMarkupString); break; case 62: - strncat(pangoMarkupString, ">", MAX_MARKUP_LEN); + strncat(pangoMarkupString, ">", MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); break; default: ucs4_to_utf8(ucs4[i],utf8); - strncat(pangoMarkupString, utf8, MAX_MARKUP_LEN); + strncat(pangoMarkupString, utf8, MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); break; } i++; @@ -517,24 +517,24 @@ i++; if (ucs4[i] == (PLUNICODE)plplotEsc){ /* a escape character to display */ ucs4_to_utf8(ucs4[i],utf8); - strncat(pangoMarkupString, utf8, MAX_MARKUP_LEN); + strncat(pangoMarkupString, utf8, MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); i++; continue; } else { if(ucs4[i] == (PLUNICODE)'u'){ /* Superscript */ if(upDown < 0){ - strncat(pangoMarkupString, "</sub>", MAX_MARKUP_LEN); + strncat(pangoMarkupString, "</sub>", MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); } else { - strncat(pangoMarkupString, "<sup>", MAX_MARKUP_LEN); + strncat(pangoMarkupString, "<sup>", MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); } upDown++; } if(ucs4[i] == (PLUNICODE)'d'){ /* Subscript */ if(upDown > 0){ - strncat(pangoMarkupString, "</sup>", MAX_MARKUP_LEN); + strncat(pangoMarkupString, "</sup>", MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); } else { - strncat(pangoMarkupString, "<sub>", MAX_MARKUP_LEN); + strncat(pangoMarkupString, "<sub>", MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); } upDown--; } @@ -577,24 +577,24 @@ plP_fci2hex(fci, &fontStyle, PL_FCI_STYLE); plP_fci2hex(fci, &fontWeight, PL_FCI_WEIGHT); snprintf(openTag, TAG_LEN, "<span font_desc=\"%s %.2f\" ", familyLookup[fontFamily], fontSize); - strncat(pangoMarkupString, openTag, MAX_MARKUP_LEN); + strncat(pangoMarkupString, openTag, MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); snprintf(openTag, TAG_LEN, "style=\"%s\" ", styleLookup[fontStyle]); - strncat(pangoMarkupString, openTag, MAX_MARKUP_LEN); + strncat(pangoMarkupString, openTag, MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); snprintf(openTag, TAG_LEN, "weight=\"%s\">", weightLookup[fontWeight]); - strncat(pangoMarkupString, openTag, MAX_MARKUP_LEN); + strncat(pangoMarkupString, openTag, MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); /* Move to the right sub/super-script level */ if(upDown > 0){ while(upDown > 0){ - strncat(pangoMarkupString, "<sup>", MAX_MARKUP_LEN); + strncat(pangoMarkupString, "<sup>", MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); upDown--; } } if(upDown < 0){ while(upDown < 0){ - strncat(pangoMarkupString, "<sub>", MAX_MARKUP_LEN); + strncat(pangoMarkupString, "<sub>", MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); upDown++; } } @@ -610,18 +610,18 @@ { if(upDown > 0){ while(upDown > 0){ - strncat(pangoMarkupString, "</sup>", MAX_MARKUP_LEN); + strncat(pangoMarkupString, "</sup>", MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); upDown--; } } if(upDown < 0){ while(upDown < 0){ - strncat(pangoMarkupString, "</sub>", MAX_MARKUP_LEN); + strncat(pangoMarkupString, "</sub>", MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); upDown++; } } - strncat(pangoMarkupString, "</span>", MAX_MARKUP_LEN); + strncat(pangoMarkupString, "</span>", MAX_MARKUP_LEN-1-strlen(pangoMarkupString)); } /*--------------------------------------------------------------------- @@ -689,10 +689,12 @@ This was copied from the psttf driver. */ for(i=0;i<NPANGOLOOKUP;i++){ if((a = getenv(envFamilyLookup[i])) != NULL){ - strncpy(familyLookup[i],a,FAMILY_LOOKUP_LEN); + strncpy(familyLookup[i],a,FAMILY_LOOKUP_LEN-1); + familyLookup[i][FAMILY_LOOKUP_LEN-1] = '\0'; } else { - strncpy(familyLookup[i],defaultFamilyLookup[i],FAMILY_LOOKUP_LEN); + strncpy(familyLookup[i],defaultFamilyLookup[i],FAMILY_LOOKUP_LEN-1); + familyLookup[i][FAMILY_LOOKUP_LEN-1] = '\0'; } } Modified: trunk/drivers/psttf.cc =================================================================== --- trunk/drivers/psttf.cc 2009-02-08 22:34:26 UTC (rev 9477) +++ trunk/drivers/psttf.cc 2009-02-09 09:41:11 UTC (rev 9478) @@ -285,10 +285,12 @@ // or defaults. for (i=0;i<N_Pango_Lookup;i++) { if ( (a = getenv(EnvFamilyLookup[i])) != NULL ) { - strncpy(FamilyLookup[i],a,FAMILY_LOOKUP_LEN); + strncpy(FamilyLookup[i],a,FAMILY_LOOKUP_LEN-1); + FamilyLookup[i][FAMILY_LOOKUP_LEN-1] = '\0'; } else { strncpy(FamilyLookup[i],DefaultFamilyLookup[i],FAMILY_LOOKUP_LEN); + FamilyLookup[i][FAMILY_LOOKUP_LEN-1] = '\0'; } } Modified: trunk/src/plctrl.c =================================================================== --- trunk/src/plctrl.c 2009-02-08 22:34:26 UTC (rev 9477) +++ trunk/src/plctrl.c 2009-02-09 09:41:11 UTC (rev 9478) @@ -1893,9 +1893,10 @@ suffix = strstr (fnam, "%n"); - if (suffix == NULL) + if (suffix == NULL) { strncpy(pls->FileName, fnam, maxlen-1); pls->FileName[maxlen-1] = '\0'; + } else { strncpy (prefix, fnam, BUFFER_SIZE-1); prefix [(suffix - fnam)<BUFFER_SIZE?(suffix-fnam):BUFFER_SIZE-1] = '\0'; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |