components/ghostscript/patches/7201968.patch
author Sonam Gupta <sonam.x.gupta@oracle.com>
Thu, 11 Oct 2012 23:12:26 -0700
branchs11-update
changeset 2379 d4c844b5740d
permissions -rw-r--r--
7201968 Cannot convert some PDF files to postscript format

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;