[gs-cvs] rev 7062 - trunk/gs/src

alexcher at ghostscript.com alexcher at ghostscript.com
Wed Sep 20 11:26:18 PDT 2006


Author: alexcher
Date: 2006-09-20 11:26:17 -0700 (Wed, 20 Sep 2006)
New Revision: 7062

Modified:
   trunk/gs/src/gdevpdfm.c
   trunk/gs/src/gdevprn.c
   trunk/gs/src/gshtscr.c
Log:
Fix Valgrind warnings: (1) don't use sscanf on a non 0-terminated PS strings.
Temporaty replace the last character of the string with '\0' before scanning.
(2) Don't assign a structure to itself. Check for this case and skip the
assignment. Bug 688890.

DIFFERENCES:
None


Modified: trunk/gs/src/gdevpdfm.c
===================================================================
--- trunk/gs/src/gdevpdfm.c	2006-09-20 12:01:04 UTC (rev 7061)
+++ trunk/gs/src/gdevpdfm.c	2006-09-20 18:26:17 UTC (rev 7062)
@@ -2023,12 +2023,19 @@
     gs_matrix ctm;
     const pdfmark_name *pmn;
     int code = 0;
+    
+    { char *data = pts[-1].data;
+      int cnt, len = pts[-1].size;
 
-    if (size < 2 ||
-	sscanf((const char *)pts[-1].data, "[%g %g %g %g %g %g]",
-	       &ctm.xx, &ctm.xy, &ctm.yx, &ctm.yy, &ctm.tx, &ctm.ty) != 6
-	)
+      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",
+		   &ctm.xx, &ctm.xy, &ctm.yx, &ctm.yy, &ctm.tx, &ctm.ty);
+      data[len - 1] = ']';
+      if (cnt != 6)
 	return_error(gs_error_rangecheck);
+    }
     size -= 2;			/* remove CTM & pdfmark name */
     for (pmn = mark_names; pmn->mname != 0; ++pmn)
 	if (pdf_key_eq(pts, pmn->mname)) {

Modified: trunk/gs/src/gdevprn.c
===================================================================
--- trunk/gs/src/gdevprn.c	2006-09-20 12:01:04 UTC (rev 7061)
+++ trunk/gs/src/gdevprn.c	2006-09-20 18:26:17 UTC (rev 7062)
@@ -1039,7 +1039,8 @@
     } else
 	bdev = (gx_device *)mdev;
     /****** QUESTIONABLE, BUT BETTER THAN OMITTING ******/
-    bdev->color_info = target->color_info;
+    if (&bdev->color_info != &target->color_info) /* Pacify Valgrind */
+        bdev->color_info = target->color_info;
     *pbdev = bdev;
     return 0;
 }

Modified: trunk/gs/src/gshtscr.c
===================================================================
--- trunk/gs/src/gshtscr.c	2006-09-20 12:01:04 UTC (rev 7061)
+++ trunk/gs/src/gshtscr.c	2006-09-20 18:26:17 UTC (rev 7062)
@@ -481,7 +481,8 @@
                            gs_memory_t * mem)
 {
     penum->pgs = pgs;           /* ensure clean for GC */
-    penum->order = *porder;
+    if (&penum->order != porder) /* Pacify Valgrind */
+        penum->order = *porder;
     penum->halftone.rc.memory = mem;
     penum->halftone.type = ht_type_screen;
     penum->halftone.params.screen = *phsp;



More information about the gs-cvs mailing list