2001.03.19 18:05 "Bug in tiff2ps", by Bruce A. Mallett
I think that I've just found two bugs in tiff2ps.c.
Bug # 1 - flushing the ASCII85 image stream fails:
When output of ASCII85 format the current program puts out a line as follows:
im_stream flushfile
to ensure that the current "hunk" of image data has been read to EOF (marked by the sequence "~>").
However the last time through the loop the image operator has completed rendering all of the image file and has therefore closed im_stream. The flushfile operator then fails (as shown below for ghostscript):
=======================================
GNU Ghostscript 5.50 (2000-2-13)
Copyright (C) 1998 Aladdin Enterprises, Menlo Park, CA. All rights reserved.
This software comes with NO WARRANTY: see the file COPYING for details.
Error: /invalidaccess in --flushfile--
Operand stack:
--nostringval--
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- 2 3
%oparray_pop --nostringval-- --nostringval-- false 1 %stopped_push 1 3 %oparray_pop .runexec2 --nostringval--
--nostringval-- --nostringval-- 2 %stopped_push --nostringval-- 0 --nostringval-- %repeat_continue --nostringval--
--nostringval-- --nostringval--
Dictionary stack:
--dict:903/941(G)-- --dict:0/20(G)-- --dict:50/200(L)-- --dict:3/100(L)--
Current allocation mode is local
Current file position is 17722309
=======================================
I've corrected line 841 of tiff2ps.c (your line number may be different since this is in my modified copy) to now output:
im_stream status { im_stream flushfile } if
Thus I've changed line 841 to now read:
fputs(" im_stream status { im_stream flushfile } if\n", fd);
Its prior value was:
fputs(" im_stream flushfile\n", fd);
Bug # 2 - no PS L2 CMYK support
Perhaps this is not a bug but rather just a "not implemented yet". However when a TIFF file having four samples per pixel is encountered the routine
"PS_Lvl2colorspace(FILE* fd, TIFF* tif)"
(on or about line 504) would blindly set the colorspace to RGB. I've modified this routine to output:
/DeviceCMYK setcolorspace
to fix this. In addition I modified the routine to base this decision on the setting of "photometric" using one of the defined PHOTOMETRIC_* values rather than the samplesperpixel as it had previously been based upon.
Note to Mr. Warmerdam:
Perhaps it would be better to wait on the changes (imagemask and pixel interpolation) that I e-mailed you last week and not put them in the CVS tree. I'll run with these additional changes for a week or so and send you another update iff things look A-ok.
- Bruce