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