7201968 Cannot convert some PDF files to postscript format s11-update
authorSonam Gupta <sonam.x.gupta@oracle.com>
Thu, 11 Oct 2012 23:12:26 -0700
branchs11-update
changeset 2379 d4c844b5740d
parent 2378 f8a11e1fa6ac
child 2386 4b1a9590af26
7201968 Cannot convert some PDF files to postscript format
components/ghostscript/patches/7201968.patch
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/ghostscript/patches/7201968.patch	Thu Oct 11 23:12:26 2012 -0700
@@ -0,0 +1,82 @@
+This is a known bug with ghostscript-9.00
+http://bugs.ghostscript.com/show_bug.cgi?id=691619
+======================================================================
+--- ghostscript-9.00/base/gximag3x.c	Tue Aug 10 09:20:19 2010
++++ ghostscript-9.00/base/gximag3x.c	Mon Oct  8 03:56:41 2012
+@@ -546,6 +546,12 @@
+ 	return_error(gs_error_VMerror);
+     gx_device_bbox_init(bbdev, dev, mem);
+     gx_device_bbox_fwd_open_close(bbdev, false);
++
++    if (dev->device_icc_profile) {
++        bbdev->device_icc_profile = dev->device_icc_profile;
++        rc_increment(bbdev->device_icc_profile);
++    }
++
+     code = dev_proc(bbdev, begin_typed_image)
+ 	((gx_device *)bbdev, pis, pmat, pic, prect, pdcolor, pcpath, mem,
+ 	 pinfo);
+@@ -854,6 +860,11 @@
+     gx_device *pcdev = penum->pcdev;
+     int pcode = gx_image_end(penum->pixel.info, draw_last);
+ 
++    if (pcdev->device_icc_profile) {
++        rc_decrement(pcdev->device_icc_profile, "gx_image3x_end_image");
++        pcdev->device_icc_profile = NULL;
++    }
++
+     gs_closedevice(pcdev);
+     if (mdev0)
+ 	gs_closedevice(mdev0);
+--- ghostscript-9.00/base/gslib.c	Tue May  4 11:47:12 2010
++++ ghostscript-9.00/base/gslib.c	Mon Oct  8 03:57:33 2012
+@@ -178,6 +178,11 @@
+ 	ht.spot_function = odsf;
+ 	gs_setscreen(pgs, &ht);
+     }
++
++    code = gsicc_init_device_profile(pgs, dev);
++    if (code < 0)
++        return code;
++
+     /* gsave and grestore (among other places) assume that */
+     /* there are at least 2 gstates on the graphics stack. */
+     /* Ensure that now. */
+@@ -197,6 +202,11 @@
+ 	dprintf1("**** Test returned code = %d.\n", code);
+     dputs("Done.  Press <enter> to exit.");
+     fgetc(mem->gs_lib_ctx->fstdin);
++    if (dev->device_icc_profile) {
++        rc_decrement(dev->device_icc_profile, "gslib main");
++        dev->device_icc_profile = NULL;
++    }
++
+     gs_lib_finit(0, 0, mem);
+     return 0;
+ #undef mem
+--- ghostscript-9.00/base/gdevvec.c	Thu Dec  3 16:33:04 2009
++++ ghostscript-9.00/base/gdevvec.c	Mon Oct  8 03:34:56 2012
+@@ -326,6 +326,11 @@
+ 		     dev_proc(vdev, get_initial_matrix));
+ 	(*dev_proc(vdev->bbox_device, open_device))
+ 	    ((gx_device *) vdev->bbox_device);
++
++	if (vdev->device_icc_profile) {
++	    vdev->bbox_device->device_icc_profile = vdev->device_icc_profile;
++	    rc_increment(vdev->bbox_device->device_icc_profile);
++	}
+     }
+     return 0;
+ }
+@@ -802,6 +807,11 @@
+     FILE *f = vdev->file;
+     int err;
+ 
++    if (vdev->bbox_device && vdev->bbox_device->device_icc_profile) {
++        rc_decrement(vdev->bbox_device->device_icc_profile, "gdev_vector_close_file");
++        vdev->bbox_device->device_icc_profile = NULL;
++    }
++
+     gs_free_object(vdev->v_memory, vdev->bbox_device,
+ 		   "vector_close(bbox_device)");
+     vdev->bbox_device = 0;