[gs-cvs] rev 7065 - trunk/gs/src
leonardo at ghostscript.com
leonardo at ghostscript.com
Thu Sep 21 13:24:01 PDT 2006
Author: leonardo
Date: 2006-09-21 13:24:01 -0700 (Thu, 21 Sep 2006)
New Revision: 7065
Modified:
trunk/gs/src/gdevpdfm.c
Log:
Fix (pdfwrite) : Don't use sscanf on a non 0-terminated PS strings.
DETAILS :
This redoes the revision 7062 change due to MSVC compiler warning.
The old code has 2 unpleasant hings :
1. MSVC yelds a warning about breaking 'const'.
2. It assumes no spaces at end of a serialized pdfmark argument value.
The new code should be clean.
EXPECTED DIFFERENCES :
None.
Modified: trunk/gs/src/gdevpdfm.c
===================================================================
--- trunk/gs/src/gdevpdfm.c 2006-09-21 19:21:48 UTC (rev 7064)
+++ trunk/gs/src/gdevpdfm.c 2006-09-21 20:24:01 UTC (rev 7065)
@@ -2024,17 +2024,17 @@
const pdfmark_name *pmn;
int code = 0;
- { char *data = pts[-1].data;
- int cnt, len = pts[-1].size;
+ { int cnt, len = pts[-1].size;
+ char buf[200]; /* 6 doubles should fit (%g == -0.14285714285714285e-101 = 25 chars) */
- if (size < 2 || len <= 0 || data[len - 1] != ']')
- return_error(gs_error_rangecheck);
- data[len - 1] = 0;
- cnt = sscanf(data, "[%g %g %g %g %g %g",
+ if (len > sizeof(buf) - 1)
+ return_error(gs_error_rangecheck);
+ memcpy(buf, pts[-1].data, len);
+ buf[len] = 0;
+ cnt = sscanf(buf, "[%g %g %g %g %g %g]",
&ctm.xx, &ctm.xy, &ctm.yx, &ctm.yy, &ctm.tx, &ctm.ty);
- data[len - 1] = ']';
- if (cnt != 6)
- return_error(gs_error_rangecheck);
+ if (cnt != 6)
+ return_error(gs_error_rangecheck);
}
size -= 2; /* remove CTM & pdfmark name */
for (pmn = mark_names; pmn->mname != 0; ++pmn)
More information about the gs-cvs
mailing list