Detailed History of Ghostscript versions 8.xx

Table of contents

This document is a record of changes in Ghostscript releases numbered 8.xx. For earlier versions, see the the history documents:

History of Ghostscript versions 7.n
History of Ghostscript versions 6.n
History of Ghostscript versions 5.n
History of Ghostscript versions 4.n
History of Ghostscript versions 3.n
History of Ghostscript versions 2.n
History of Ghostscript versions 1.n

For other information, see the Ghostscript overview.


Version 8.71 (2010-02-10)

This is the second release in the stable 8.7x series. It features improved handling of fonts, nesting and color fixes with transparency objects, reduced memory footprint for the halftone cache, as well as improvements to the pxl output devices, and the usual number of bug and robustness fixes.

New in this release is an experimental project file for Microsoft Visual Studio. This wraps the normal nmake build, and makes it easier for developers to get started building Ghostscript with that compiler.

Support for tiff file output is now provided using the libtiff implementation rather than our more limited native code as in previous releases. There is also a new 'tiffsep1' output device which produces halftoned separations at 1 bit-per-pixel, in contrast to the 'tiffsep' device which produces 8 bit-per-pixel plates.

Support for using FreeType as a type rasterizer has been greatly improved. We do not recommend its use as of this release, but it is much more functional than previously and our intent is that it will become the default in a future release.

The graphics library has been updated to provide more accurate scan conversion of vector art including fixes to dash behavior, transparent stroked paths, thick stroked paths, radial shadings, xps cap handling, "pie" joins, degenerate beziers, improved handling of dropouts in thin strokes and better thin axis-aligned strokes.

For a list of open issues, or to report problems with this release, please visit bugs.ghostscript.com.

Incompatible changes

No recorded incompatible changes.

Changelog

2010-02-09T16:13:39.643382Z Ralph Giles

Clean up some typos in the release notes, and mention the reduced memory
footprint of the halftone cache from r10006.

[doc/News.htm]

2010-02-08T22:10:30.586772Z Ralph Giles

Update the change logs for the second 8.71 release candidate.

[doc/Changes.htm doc/History8.htm doc/News.htm doc/Details8.htm doc/Details.htm]

2010-02-08T22:03:22.755385Z Ralph Giles

Add some notes on what's new in the 8.71 release.

[doc/News.htm]

2010-02-08T20:06:58.778484Z Ralph Giles

Update the the release dates for the second 8.71 release candidate.

[doc/History7.htm doc/Projects.htm doc/History8.htm man/dvipdf.1 base/gscdef.c man/ps2ascii.1 doc/Use.htm doc/Readme.htm doc/Source.htm doc/Deprecated.htm man/ps2epsi.1 doc/Install.htm doc/API.htm doc/Issues.htm doc/DLL.htm doc/Drivers.htm man/pfbtopfa.1 doc/Release.htm doc/Commprod.htm doc/Xfonts.htm doc/Devices.htm doc/Language.htm man/gs.1 man/pf2afm.1 doc/Fonts.htm doc/Ps2ps2.htm man/printafm.1 doc/Ps2pdf.htm doc/Develop.htm doc/Helpers.htm man/pdf2dsc.1 doc/Psfiles.htm doc/Lib.htm doc/gs-vms.hlp man/font2c.1 man/gsnd.1 base/version.mak man/pdfopt.1 doc/News.htm man/pdf2ps.1 man/ps2pdf.1 doc/Make.htm doc/Details8.htm doc/Unix-lpr.htm doc/C-style.htm doc/Ps-style.htm doc/History1.htm doc/History2.htm man/gslp.1 man/wftopfa.1 doc/History3.htm man/ps2ps.1 doc/Ps2epsi.htm doc/History4.htm man/ps2pdfwr.1 doc/History5.htm doc/History6.htm]

2010-02-08T17:35:32.033134Z Robin Watts

Update Visual Studio solutions to use the DEVSTUDIO= form of makefile
invocation, rather than MSVC_STUDIO=8 version. This should isolate the
solution/projects entirely from the version of visual studio in use.

Simplify the ReadMe.txt file accordingly.

Take the opportunity to add the resource files to the list in the
ghostscript.vcproj file. This makes no difference to the project in
terms of building, but enables easy navigation/editing of files
within VS.

[/trunk/ghostpdl/win32/ReadMe.txt /trunk/ghostpdl/win32/xps.vcproj ghostscript.vcproj /trunk/ghostpdl/win32/pcl.vcproj /trunk/ghostpdl/win32/svg.vcproj /trunk/ghostpdl/win32/language_switch.vcproj]

2010-02-08T16:45:47.345828Z Ken Sharp

Fix (pdfwrite) bug #691101 (part 2 of 2)

The revisions 10474 and 10476 were intended to address an indeterminism but actually
introduced a fairly serious regression. The code was changed to return any error value
from the glyph_info method before testing the members of the 'info' structure passed to
the method. Previously one of the member could be examined when an error had meant that
the member was still uniinitialised.

However, these revision missed the fact that the glyph_info method can return a
'rangecheck' error when they require a CDevProc to be executed. Because the error code
was tested before checking for a CDevProc, the pdfwrite code never executed the
CDevproc.

This resulted in a (very) few regressions, this is because the PDF interpreter uses
a CDevProc to alter the widths of glyphs if a /W array is present in a PDF file.

The code now initialises the member of the structure to 0, which we then test before
checking the return code. If we need to run a CDevProc we now do so.

Part 2 of this commit explains some further issues with CDevProcs.

[base/gdevpdtt.c]

2010-02-08T16:45:18.598274Z Ken Sharp

Fix (pdfwrite) bug #691101 (part 1 of 2)

The revision 10603 fixed a number of issues relating to FontMatrix and descendant fonts
of CIDFonts. However part of the fix, in CIDWProc, used 'currentfont' to address the
font dictionary instead of 'currentdict', as is done in the rest of the routine.

For rendering devices this works well, but for pdfwrite the two dictionaries are not 
the same, and this causes PostScript errors.

This error was initially hidden by the revisions 10474 and 10476 which inadvertently 
caused all CDevProc routines not to execute when using pdfwrite.

This patch alters the CIDWProc to use currentdict instead of currentfont, there are no
differences with rendering devices but with pdfwrite this causes the CDevProc to 
execute properly, eliminating a number of errors (when the faulty revisiions 10474
and 10476 are rolled back)

[Resource/Init/pdf_font.ps]

2010-02-04T17:47:57.663462Z Lars Uebernickel

Changed MaxStripSize for TIFF devices to default to 8 KB.

This is necessary, because libtiff keeps a whole strip in memory at a time,
which resulted in very large buffers for big files.  Support of MaxStripSize for
all TIFF devices which didn't have it before was also added.

[base/gdevtifs.c base/gdevtifs.h tiff/libtiff/tif_config.vc.h base/gdevtsep.c doc/Devices.htm base/gdevtfnx.c base/gdevtfax.c]

2010-02-04T03:38:54.455593Z Ralph Giles

Update change logs for the 8.71 release candidate.

[doc/Changes.htm doc/History8.htm doc/Details8.htm doc/Details.htm]

2010-02-03T22:46:15.528358Z Ralph Giles

Remove the list of open bugs.

It's grown long enough to be unhelpful to track explicitly in each release.

[doc/News.htm]

2010-02-03T22:42:50.644387Z Ralph Giles

Update release date for the 8.71 release candidate.

[doc/History7.htm doc/Projects.htm doc/History8.htm man/dvipdf.1 base/gscdef.c man/ps2ascii.1 doc/Use.htm doc/Readme.htm doc/Source.htm doc/Deprecated.htm man/ps2epsi.1 doc/Install.htm doc/API.htm doc/Issues.htm doc/DLL.htm doc/Drivers.htm man/pfbtopfa.1 doc/Release.htm doc/Commprod.htm doc/Xfonts.htm doc/Devices.htm doc/Language.htm man/gs.1 man/pf2afm.1 doc/Fonts.htm doc/Ps2ps2.htm man/printafm.1 doc/Ps2pdf.htm doc/Develop.htm doc/Helpers.htm man/pdf2dsc.1 doc/Psfiles.htm doc/Lib.htm doc/gs-vms.hlp man/font2c.1 man/gsnd.1 base/version.mak man/pdfopt.1 doc/News.htm man/pdf2ps.1 man/ps2pdf.1 doc/Make.htm doc/Details8.htm doc/Unix-lpr.htm doc/C-style.htm doc/Ps-style.htm doc/History1.htm doc/History2.htm man/gslp.1 man/wftopfa.1 doc/History3.htm man/ps2ps.1 doc/Ps2epsi.htm doc/History4.htm man/ps2pdfwr.1 doc/History5.htm doc/History6.htm]

2010-02-03T22:39:42.033100Z Ralph Giles

Document the location of the new vcproj file, and exclude it from the
extraneous files test.

[doc/Develop.htm toolbin/tests/check_dirs.py]

2010-02-03T22:29:34.129817Z Ralph Giles

Bump the copyright date for the windows metadata.

[psi/dwsetup.rc psi/winint.mak]

2010-02-02T22:48:55.363996Z Ralph Giles

Update our included copy of the libpng source to 1.2.42.

[libpng]

2010-02-02T22:45:55.167908Z Ralph Giles

Remove the in-tree copy of the libpng source to make way for a newer release.

[libpng]

2010-02-02T19:30:15.986507Z Ralph Giles

Update jbig2dec with the 0.11 release source.

[jbig2dec/aclocal.m4 jbig2dec/jbig2_metadata.c jbig2dec/install-sh jbig2dec/jbig2.c jbig2dec/mkinstalldirs jbig2dec/jbig2_image.c jbig2dec/configure jbig2dec/Makefile.in jbig2dec/jbig2_text.c jbig2dec/jbig2_metadata.h jbig2dec/jbig2_priv.h jbig2dec/depcomp jbig2dec/compile jbig2dec/jbig2dec.c jbig2dec/config.guess jbig2dec/jbig2_refinement.c jbig2dec/ltmain.sh jbig2dec/config.sub jbig2dec/README jbig2dec/jbig2_halftone.c jbig2dec/config.h.in jbig2dec/jbig2_segment.c jbig2dec/configure.ac jbig2dec/jbig2dec.1 jbig2dec/CHANGES jbig2dec/COPYING jbig2dec/Makefile.am jbig2dec/missing jbig2dec/jbig2_page.c]

2010-02-02T18:14:37.922390Z Hin-Tak Leung

Set rc.exe location according to MSSDK variable - fix build problem with windows 7 SDK - bug 691062.

[psi/msvc32.mak]

2010-02-02T07:23:57.821537Z Alex Cherepanov

Re-implement optional content support to avoid dependence on proper nesting
of optional content and q..Q blocks. Check for the visibility flag and skip
most graphic operations when needed. Skip test rendering operations by
installing nullpage device to minimize changes in a rather complicated code.
Bug 691076, customers 531, 850.

[Resource/Init/pdf_ops.ps Resource/Init/pdf_main.ps Resource/Init/pdf_draw.ps]

2010-02-01T19:41:49.001947Z Ray Johnston

Fix Windows UninstallString registry entry to use " " around the path and
uninistgs.exe so that (the usual) spaces in the path don't cause problems.
Thanks to Stefan Kanthak for pointing this out.

[psi/dwinst.cpp]

2010-02-01T00:02:04.763835Z Alex Cherepanov

Patch font resource category for CET testing to always return the font
memory usage as unknown (-1) to avoid differences between hosts.
Bug 691057.

[Resource/Init/gs_cet.ps]

2010-01-31T20:30:13.616671Z Alex Cherepanov

Use the sum of local and global VM usage for the value reported by
"/Font resourcestatus". This gives better estimation of memory consumption
and makes the result independent of the global state when the font was
loaded. With this patch CET case 23-33.PS shows different values for
"/Font resourcestatus".

[Resource/Init/gs_res.ps]

2010-01-31T00:46:38.360004Z Alex Cherepanov

Add a check whether the current layer is visible to Do operator.
This is a first step to replace implementation that relies on installation
of an non-rendering output device (nullpage) with an implementation
that uses direct checks. Bug 691059.

[Resource/Init/pdf_draw.ps]

2010-01-30T20:25:19.240406Z Alex Cherepanov

Fix 'undefined' error in 29-07C.PS CET test file that was happening because
.selectmedia procedure in gs_setpd.ps was building an error information
dictionary ('<failed>' in its comment) with many keys those doesn't exist in
<request> dictionary, such as /LeadinEdge or /InsertSheet.  This draws the
policy 0 procedure (line 544) to 'get' non-existant keys from <merged>
dictionary. Thanks to Masaki Ushizaka for the patch. Bug 691065.

[Resource/Init/gs_setpd.ps]

2010-01-30T06:50:14.586165Z Alex Cherepanov

Preserve /F and /BS attributes of /Link annotation during PDF to PDF
conversion. Thanks to Ken for the patch. Bug 691092, customer 1.

[Resource/Init/pdf_main.ps]

2010-01-29T21:40:45.586239Z regression

Added highres option to clusterpush.pl (opposite of lowres).

[toolbin/localcluster/build.pl toolbin/localcluster/clusterpush.pl toolbin/localcluster/run.pl]

2010-01-28T21:43:37.243405Z Marcos H. Woehrmann

Fixed typo in clusterpush.pl.

[toolbin/localcluster/clusterpush.pl]

2010-01-28T19:34:19.913293Z regression

Added a new option to clusterpush.pl: lowres.  This option can appear
anywhere on the comand line and signals the local cluster regression to
only run lowres (72 and 75 dpi) output, for example:

  clusterpush.pl pcl lowres

or

  clusterpush.pl lowres "gs pcl" henrys

Note that this will fail if we ever hire an engineer with the name lowres
or use that as an internal product name.  Also, there currently aren't
any 75 dpi baseline md5sums for the pcl product, so until the next pcl
svn commit it doens't make sense to run with this option.

Also added partial support for generating bitmaps with changes and running them through bmpcmp.

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/build.pl toolbin/localcluster/clusterpush.pl toolbin/localcluster/run.pl]

2010-01-28T15:18:36.842224Z Robin Watts

Squash a warning about %d and size_t spotted by Marcos. Thanks.

[toolbin/bmpcmp.c]

2010-01-28T15:13:05.688649Z Robin Watts

Fix free of incorrect pointer in bmpcmp.
Also tweak pnm reading so that no seeks are used, so we can use the

  bmpcmp < (zcat foo.pnm.gz)  < (zcat bar.pnm.gz) ...

trick if required (bmps still seek!).

[toolbin/bmpcmp.c]

2010-01-28T14:44:22.110825Z Ken Sharp

Remove accidental stupid inclusion of a C++ style comment ....

[psi/zfapi.c]

2010-01-28T14:32:52.354649Z Ken Sharp

Fix (FAPI)

Bit complex here. The FAPI code needs to tell the font rendering engine how much to
scale the font in order to get properly sized bitmaps. It does this by looking at the 
FontMatrix, comparing it with the 'original' FontMatrix and determining the scale from
there. 

The problem is that the 'original' FontMatrix was being retrieved from a copy of the 
font stored when it is defined, intended for use by pdfwrite. When we define a font we
check to see if it has an /OrigFont entry, and simply use the one which is present if
we do.

This causes us problems if we make a new scaled font by taking an existing font and 
changing its FontMatrix. We don't write the new FontMatrix into the OrigFont dict, and
so when we come to determine the font scale we divide the FontMatrix by the 'original'
stored matrix. This effectively results in any scale factor built into the FotnMatrix
being applied twice, once by FreeType because the FontMatrix isn't the default, and 
once by the FAPI when it divides the FotnMatrix by the original.

I didn't want to modify the OrigFont entry, as that would probably break pdfwrite, so
I've modified the FAPI code to take a copy of the FontMatrix at the time the font is
defined and store it in its own structure. We then use this to determine how much to
scale the font by dividing the current FontMatrix by the matrix at the time the font
was defined.

This fixes my hand-crafter test file and improves the output of Bug687615.ps and 
two_encodings.ps. The output is now the correct size, but the spacing is wrong in 
bug687615.ps and many glyphs are missing from two_encodings.ps.

[psi/fapi_ft.c psi/zfapi.c psi/ifapi.h psi/fapiufst.c]

2010-01-27T19:08:07.958712Z Robin Watts

Updated version of bmpcmp.c to support maxdiffs parameter. Also, bitmaps
are output numbered 00000, 00001, etc rather than 0, 1, etc to tidy
directory listings.

Updated htmldiff.pl file to cope with the rejigged number formats.

[toolbin/bmpcmp.c toolbin/htmldiff.pl]

2010-01-27T14:55:55.064385Z Robin Watts

Introduce new gs_currentdevicecolor function (and inline macro version) to
retrieve the current device color from the graphics state. Use this in the
2 places in pl that require it. This restricts all the knowledge of the
way colors are stored in the graphics state to being within the gs code.

This is done as a precursor to the work to support 2 color's in the graphics
state to enable a branch to be taken on gs only.

Regression tests predict 128 changes, but local testing with htmldiff.pl shows
none.

[base/gscolor2.c base/gscolor2.h /trunk/ghostpdl/pl/plchar.c /trunk/ghostpdl/pl/pldraw.c base/gzstate.h]

2010-01-26T01:15:46.612807Z Michael Vrhel

Fix for memory leak reported in bug 690754.  The memory leak occurred when processing xps transparency files.  The softmask group buffer was not being deallocated properly.  We now properly deallocate an old soft mask buffer that will no longer be used when new one is coming in to replace it.  There should not be any rendering differences with this commit.

[base/gdevp14.c]

2010-01-24T17:27:38.965229Z Robin Watts

Fix problems with htmldiff.pl introduced when introducing iframes mode.
(Javascript wasn't working, image source was incorrect).

[toolbin/htmldiff.pl]

2010-01-24T16:20:43.098277Z Robin Watts

Correct some errors in htmldiff.pl. Firstly, perl doesn't have true/false,
so use 0/1. Secondly, move framenum increment out of if where I'd incorrectly
put it before, resulting in everything going into the same dir unless iframes
were used.

[toolbin/htmldiff.pl]

2010-01-23T17:42:47.176361Z Robin Watts

Updated htmldiff; neater output structure - each files diffs go into their
own subdirectory. Option to use iframes to avoid regenerating the html
twice. Config file include now uses ENV{"HOME"} rather than ~ to work on
Mac OS.


[toolbin/htmldiff.pl]

2010-01-22T17:46:02.036283Z Till Kamppeter

"cups" output device: Reallocate memory for raster data only if the size of the bitmap has changed, to avoid data getting messed up by unneeded reallocation. This should finally fix bug #691029.

[cups/gdevcups.c]

2010-01-22T09:01:28.663933Z Ken Sharp

Fix (pswrite)

The pswrite device only partially implemented the 'file per page' output model. It
closed the output file and the bbox device, but did not open a new output file or
reopen the bbox device, leading to potential crashes later when the pswrite device
tried to access the bbox device.

This patch reopens the bbox device, and opens a new output file, at the end of every
page when we are outputting one file per page. The problem is that this will emit an
empty EPS after the last page is completed. Fixing this would mean delaying opening the
output file until we had received a marking operation. That's more work than we want
to do on this device, so this is being left as an issue.

[base/gdevps.c]

2010-01-21T03:04:21.383005Z Hin-Tak Leung

adding the tiff directory to the list of files to zip up during a windows build. Thanks Gennadiy Tsarenkov or the report and patch. Fixes bug 691069

[psi/winint.mak]

2010-01-20T19:07:01.585691Z Till Kamppeter

Fixed handling of back sides when duplex printing via the CUPS Raster output device. With PostScript as input format the y-axis of the back sides was often flipped (bug #691029).

[cups/gdevcups.c]

2010-01-20T18:11:39.888031Z Michael Vrhel

This commit is a fix for bug 691021 which had quantized (unsmooth) shading artifacts when transparency was present.

The primary changes to the code are:

The adaptive (non-fixed) smoothness method is now used in the shading code when transparency is present.  Previously there was a check put in place and if there was transparency a fixed amount of smoothing was enforced.

The color cache used in the shading code was updated to use the color information in the transparency device that is contained in the imager state.  This object is initialized with either the target device when there is no transparency or with the PDF14 device when there is transparency.  In this way, the proper color information is used by the cache.

The shading code makes use of the member variables comp_shift and comp_bits in the color_info member variable of the target device.  This information is now properly updated in the PDF14 device as the transparency group color space changes.

A clist change was also required for proper XPS rendering of gradients.  When it has a gradient with a transparency component, the XPS code first creates a soft mask group and draws the alpha shading.  It then creates a transparency group to draw the color components portion of the shading.  When the transparency group is popped, is is composed using the soft mask buffer which is the XPS opacity shading.  When we are going through the clist writer, the writer will end up drawing the shadings for both the opacity component and the color component with trapezoid fills.  Later, during the clist reading and execution of the trapezoid filling, a clipping device is created.  This device is created with the color info properties of the target device, which in our case is a PDF14 device.  The clipping device is first created during the soft mask group.  This group has color information associated with a grey device since it is just a single channel (the XPS alpha channel).  Later, the same clipping device is used when we are doing the trapezoid filling during the transparency group fills.  The problem is that the color information of the target device may have changed, for example if the transparency color group is RGB or CMYK.  We need to test for that and update the color info for the clipping device. 

There are several regression test files that are affected by this commit.  I looked at all of them. Changes appear to be progressions or visually unnoticeable.  Files are

Bug688807.pdf
Bug689918.pdf
Bug690115.pdf
Bug690206.pdf
Bug690535.pdf
Bug690709.pdf
CATX1101.pdf
CATX4135.pdf
CATX5233.pdf
CATX6508.pdf
CATX9004.pdf
IA3Z0302.pdf
IA3Z0303.pdf
as well as most of the fts_##xx.xps tests.  


[base/gscicach.h base/gxshade6.c base/gdevp14.c base/gdevp14.h base/gxshade.c base/gscicach.c base/gxclrast.c base/gxshade.h]

2010-01-19T21:38:16.998845Z Hin-Tak Leung

adding comment about possible future rewrite with XGetPixel() ; no code change

[base/gdevx.c]

2010-01-19T15:48:57.559895Z Robin Watts

Attempt to fix bug 691030, regression with thin lines. This regression was
caused by revision 10391, where I pulled the rectangle special cases into
line with the more general case. Sadly, the more general case appears to be
wrong in the way it rounds lines lying on integer values.

The fix is to correct the rounding in the general case, and to keep the
rectangle special cases in line with this. Unfortunately this produces
unacceptable results with the PCL interpreter.

We therefore commit a compromise solution, whereby we make the code do the
'correct' thing (or what we believe the correct thing is) for postscript,
and leave operation alone for the other languages. We spot this by examining
the fill_adjust values. This seems to works, with the minor problem that we
still see some changes in PCL due to it sometimes using non-zero fill_adjust
to thicken lines. A visual check shows the diffs to be reasonable.

Expected Differences: MANY. But extensively checked with htmldiff and they
seem OK.


[base/gxdevcli.h base/gdevtxtw.c base/gdevtrac.c base/gdevbbox.c base/gdevmem.c base/gdevnfwd.c base/gdevddrw.c base/gxstroke.c]

2010-01-19T11:18:24.072283Z Robin Watts

Move ghostscript.vcproj from win32 to gs directory, and adjust solution file
accordingly. This serves 2 purposes; firstly, the solution now correctly
supports tag jumping (that is, the ability to click on a warning or error
and jump to that line in the file). The second is that the ghostscript
project now lives in the ghostscript directory, and hence may be usable by
people wanting to build *just* ghostscript, rather than ghostscript as a
component of GhostPDL.

Update ReadMe.txt to reflect this change, and document a known problem.

No expected differences.

[/trunk/ghostpdl/win32/ghostscript.vcproj /trunk/ghostpdl/win32/ReadMe.txt ghostscript.vcproj /trunk/ghostpdl/win32/GhostPDL.sln]

2010-01-18T11:28:29.454584Z Ken Sharp

Addendum to revision 10615. Use the *y* scale factor for computing the vertical character
advance, not the x scale which the previous commit used. Also note that the text of the
previous log said:

"as a parameter to zchar_set_cache to set the horizontal advance"

That should, of course, read vertical advance.

[psi/zfapi.c]

2010-01-18T11:16:55.954810Z Ken Sharp

Fix (FAPI - FreeType). The current FAPI implementation for FreeType ignores any vertical
advance defined in a glyph. This causes type 1 glyphs defined with an sbw (not hsbw) 
which have a vertical advance as well as, or instead of, a horizontal advance to not
advance the current point correctly.

There is a separate issue with FreeType which does not return the correct vertical 
advance which will be addressed in a separate patch.

This patch adds the vertical advance to the metrics structure and uses it as a 
parameter to zchar_set_cache to set the horizontal advance in GS for the glyph.

[psi/fapi_ft.c psi/zfapi.c psi/ifapi.h]

2010-01-18T08:41:20.191771Z Ken Sharp

Fix (FAPI). The code to 'serialise' a CFF font (that is to convert the internal GS
representation back to a stream resembling a disk font) was seriously broken when writing
a local Subrs DICT.

The offset to the Subrs DICT is stored in the Private DICT as an offset from the
start of  the Private DICT. This means it depends on the length of the Private DICT,
but the Private DICT includes that offset, so the length of the Private DICT is
dependent on the size of the offset (CFF integers use between 1 & 5 bytes depending
on their value).

The normal method for dealing with this is a process of refinement; assume that a 1 byte
representation will suffice, calculate the size of the DICT, see if that size can be 
represented in 1 byte. If not assume a 2 byte representation, recalculate the size
of the DICT, see if it can be represented in 2 bytes and so on.

It looks like the code was intended to do this, but it was in fact seriously broken
and ended up incrementing an integer for size of DICT until it became negative, and
then stored a negative (and incorrect) offset to the Subrs.

Replaced the code with a simple for loop surrounding a switch.

[psi/write_t2.c]

2010-01-14T16:38:45.881264Z Ken Sharp

Fix the syntax error accidentally committed in revision 10608 which prevented
Ghostscript from building.

[base/gdevpdtw.c]

2010-01-14T16:25:03.707208Z Ken Sharp

Fix (pdfwrite) Bug #691058 "Incorrect embedding of CIDToGIDMap for CIDFontType 2".

Previously we would embed a CIDToGIDMap for a CIDFontType 2 font (TrueType outlines) if
the font had a non-identity CIDToGIDMap, or if we were producing PDF/A output.

However the spec (PDF 1.7, Section 5.6, "Glyph Selection in CIDFonts') says that we
should *always* embed a CIDToGIDMap if the font is embedded, and never if the font is
not. 

This patch modified the CIDToGIDMap production so that we ignore the production of PDF/A
files, and instead check whether the font is being embedded. If it is being embedded
then we create a CIDToGIDMap, if it is not, then we don't.

[base/gdevpdtw.c]

2010-01-14T02:24:19.739891Z Masaki Ushizaka

Fix two warnings introduced in rev. 10603.  Signed/unsigned incompatibility.

[base/gschar0.c]

2010-01-13T21:04:09.482842Z regression


General cleanup and minor improvements of the local cluster code:
  changed timeout values
  keep logs of machine status messages
  change previous md5sum cache size
  better differentiate pdfwrite vs bitmap output errors


[toolbin/localcluster/clustermaster.pl toolbin/localcluster/readlog.pl toolbin/localcluster/build.pl toolbin/localcluster/run.pl toolbin/localcluster/compare.pl]

2010-01-12T21:42:28.034208Z Robin Watts

Fix overallocation in bmpcmp.c that was causing out of memory errors.


[toolbin/bmpcmp.c]

2010-01-12T20:22:32.464302Z Robin Watts

Updated bmpcmp.c and htmldiff.pl. bmpcmp.c now outputs metadata about each set
of difference bitmaps (which page, bbox etc). htmldiff.pl now reads that
metadata and outputs that into the file. Some javascript hackery is used to
display the device coords of the point under the mouse pointer.

Finally, if the $parallel option is set, htmldiff will fork jobs in parallel
to try to make better use of multicore machines.


[toolbin/bmpcmp.c toolbin/htmldiff.pl]

2010-01-12T09:49:58.118243Z Masaki Ushizaka

Fix for bug #690834 & #687832

Bug #690834: text garbled in PS viewer; PDF works
 - Fixed to concatenate CIDFont FDArray font's FontMatrix when running under 'cshow' or 'glyphshow'.
 - Fixed to use correct FDArray font when concatenate its FontMatrix.
 - Changed the meaning of 'fstack.items[n].index' to keep track of FDArray font and FontMatrix.
 - Reverted the rev. 5613 which was a fix for bug #687832.
Bug #687832: (PDF interpreter) : CID Font in PDF
 - Fixed the interpretaion of W/W2/DW/DW2 value from glyph space (wrong) to 1000th of text space (correct).

Applying this patch makes some one dot differences on text in 19 files of LocalCluster test. (List is in Bugzilla #687832 comment #9).

[base/gxchar.c Resource/Init/pdf_font.ps base/gdevpdtc.c base/gschar0.c base/gxtext.h]

2010-01-11T12:08:26.301794Z Ken Sharp

Bug #691044 ""

Another problem caused by a corrupt compressed data stream, resulting in garbage data
being sent to the TrueType interpreter.

Caused when the TT interpreter is given an argument of 0 to the MINDEX operator. Rather
than flag this as an error I've chosen to simply return. This is because it seems that
a value of 0 is actually legal (stupid, but legal), and simply leaves the stack
unchanged.

[base/ttinterp.c]

2010-01-10T15:51:48.168326Z Alex Cherepanov

Don't use operator 'execute' because it resets the /command attribute
in $error dictionary. Use '.execute pop' instead. Keep 'execute' as an
operator for backward compatibility. Thanks to dakka.akka@gmail.com
for analysis of the bug. Bug 691050.

[toolbin/smoke.ps Resource/Init/gs_init.ps]

2010-01-09T23:59:33.690907Z Robin Watts

Updated version of bmpcmp. Now loads bmp, pgm, pbm, ppm files. Diffs are
always written as bmps though.

No expected differences.

[toolbin/bmpcmp.c]

2010-01-09T16:01:24.458674Z Ken Sharp

Fix a Coverity warning. We were potentially passing a NULL pointer to a routine which
would unconditionally dereference it. Fixed by taking no action if the pointer is NULL.

[base/gsgdata.c]

2010-01-08T01:17:24.694675Z Ray Johnston

Add documentation on the limitations of -sstdout=_____ where users expected
_all_ stdout I/O to be redirected, not just PS writing to stdout. Bug 691037.

[doc/Use.htm]

2010-01-07T10:53:36.539549Z Robin Watts

Changes to the MSVC makefiles to prepare for the prototype vs2005 solution
file. Firstly, we introduce an SBR symbol; if this is set when invoking the
makefile, we add a new flag to the C compiler (held in SBRFLAGS) to cause
the generation of the browse data for each source file. Next, we introduce a
new bsc build target to combine those .sbr files into appropriate .bsc ones.
The final change is enable debug builds to put their builds into debugobj
rather than obj directories.

With luck, this should cause no differences for anyone other than me.

[/trunk/ghostpdl/common/msvc_top.mak /trunk/ghostpdl/language_switch/pspcl6_msvc.mak /trunk/ghostpdl/svg/svg_msvc.mak base/msvccmd.mak /trunk/ghostpdl/xps/xps_msvc.mak psi/msvc32.mak base/msvclib.mak /trunk/ghostpdl/main/pcl6_msvc.mak]

2010-01-07T10:31:53.862753Z Ken Sharp

Update the example file. The old file used a single 'charpath pathbbox' to determine the
height of the text. It then used the 'scale' operator to draw larger text.

If the path was fixed to pixel boundaries, and the point size was low (default 15
points) this could lead to a small error which was magnified by the cumulative scale
operations.

This led to significant differences when using the FreeType font code, as it seems to 
return a hinted path which is bounded by pixel co-ordinates, unlike the regular GS
code.

The altered code scales the font and recalculates the height of the text each time
giving more accurate results. In addition a minimum size has been introduced (50 points)
for the calculation of the text height. Together these result in much closer output.

[examples/alphabet.ps]

2010-01-06T11:19:01.103028Z Ken Sharp

Fix bug #691043 "Vulnerability report : Ghostscript gs_type2_interpret null ptr
dereference (Segmentation Fault)". The problem appears to be caused by a corrupt
compressed data stream which results in garbage font data being sent to the type 2 and
under some conditions the type 1, font interpreters.

As noted these font interpreters are normally coded to be intolerant of faults, and
do not normally perform much error checking. As a result badly formed (or as in this
case, garbage) fonts can cause serious problems.

Although the null dereference is the cause of the error, this is actually caused by
interpreting the data as a font, and decrementing the font instruction pointer below
the bottom of the instruction stack. 

The patch here adopts the suggestion from the original bug reporter of checking the
pointer before the dereference, but in addition adds some checking when the
instruction pointer is decremented to see that it does not descend past the bottom of
the stack. This is because tests showed that it was possible to reach this point with
a non-NULL pointer, which was still invalid and caused a segmentation violation.

In addition the free_glyph routine has been modified to check the pgd (pointer to 
glyph data) parameter is non-NULL, and that its 'procs' member is non-NULL, before
attempting to call the free procedure. This fault was exposed by selecting the pdfwrite
device.

Although improved this is not a comprehensive fix, there are other locations where the
font instruction pointer may be incremented past the top, or decremented past the
bottom, of the instruction stack. However the FreeType font interpreter correctly
detects the problems without causing a crash, so I don't think we should expend too
much effort on rewriting our current font code to cope.

[base/gsgdata.c base/gstype1.c base/gstype2.c base/gxtype1.c]

2010-01-05T15:57:58.786575Z Ken Sharp

Revert code introduced in revision 10578. This code is no longer required since the
test in the FreeType code, which this code evaded, is no longer present when built
using the incremental interface.

[psi/fapi_ft.c]

2010-01-05T00:52:07.186738Z Alex Cherepanov

Remove duplicate call to errwrite() introduced by the rev. 10568.
Thanks to Henry for spotting this.

[base/gsmisc.c]

2010-01-04T15:09:22.066340Z Ken Sharp

Add a comment to explain the arbitrary choice of value for num_glyphs in revision 10578.

[psi/fapi_ft.c]

2010-01-04T09:27:21.029560Z Ken Sharp

FreeType interface fix. When using the incremental interface to FreeType (which in fact
we always use), Ghostscript is responsible for locating and passing the glyph
description data to FreeType, and so we don't bother to track certain kinds of data
in the FreeType structure.

However, even when using the incremental interface, FT still tests some of this data, in
particular it tests the requested glyph index against the reported number of glyphs
in the font, and aborts if the index is too large.

This patch simply sets the num_glyphs member of the FT_face structure to a large number
(65534) so that the internal FreeType test is successful, and we don't have to bother
with the record-keeping that would be required to keep this member updated when fonts
change.

[psi/fapi_ft.c]

2010-01-03T01:07:12.832443Z Alex Cherepanov

Fix error recovery code that messed up operand stack trying to break out
of post table processing when the offset to the glyph name is beyond the
table length. Bug 690837.

[Resource/Init/gs_ttf.ps]

2010-01-02T18:48:40.508429Z Alex Cherepanov

Remove description of -dIgnoreTTEncoding flag from the documentation.

[doc/Use.htm]

2010-01-02T18:45:15.635704Z Alex Cherepanov

Implement symbolic glyph mapping as described in PDF 1.7. Use it for TrueType
fonts with symbolic flag set or having no encoding entry.
The flag -dIgnoreTTEncoding is removed because symbolic fonts always do this
now and non-symbolic fonts should never ignore encoding.
Bug 691035, customer 220.

The new spec includes cmap 3,0 in the supported list. We discovered this
before but didn't use cmap 3,0 as a first choice. PDF 1.7 is not clear about
the choice between symbolic and non-symbolic branches. Current algorithm
is based on a few experiments with AR 8.

The patch causes rendering differences in comparefiles/keyboard.pdf
A few undefined characters change from boxes to empty space.
Current rendering of undefined characters in Ghostscript doesn't match
Adobe Acrobat and should be revised.

[Resource/Init/pdf_font.ps Resource/Init/gs_ttf.ps]

2009-12-30T17:30:30.315764Z Alex Cherepanov

Remove C++ comments (//) and commented out code because this is not compatible
with old compilers and breaks our coding standard. Comments were introduced
by rev. 9664 and 9778. Bug 691032.

[contrib/gdevcd8.c psi/iscannum.c]

2009-12-30T15:06:40.609490Z Alex Cherepanov

Add a check whether the entry in post table of TrueType font crosses
the end of the table. Fill the rest of the table with /.notdef and
continue. Bug 691031.

[Resource/Init/gs_ttf.ps]

2009-12-29T22:18:01.420560Z Alex Cherepanov

Use safer function vsnprintf() instead of vsprintf() for error reporting.
Truncate long messages, issue a warning, and continue. Bug 690829.

[base/lib.mak base/gsmisc.c base/stdio_.h]

2009-12-29T01:17:48.171480Z Alex Cherepanov

Remove stage 2 from seticcspace() and a corresponding PS procedure because
it's no longer needed. Since rev. 10563 the string data source is converted
to reusable stream without a call-out. Bug 690828.

[psi/zcolor.c Resource/Init/gs_cspace.ps]

2009-12-28T07:03:59.416178Z Alex Cherepanov

Don't use long and buggy call-out process to convert a string to a
reusable stream. Do it in 3 lines of C code. Bug 690828.

DETAILS:
The patch fixes string data source handling but leaves most of call-out
machinery in place. Clean-up will be done as anoter commit to separate
material and cosmetic changes.

[psi/zcolor.c psi/zfrsd.c psi/zfrsd.h psi/int.mak]

2009-12-27T15:58:42.012990Z Alex Cherepanov

Assume /FirstChar is 0 and /LastChar is 255 when they are not defined, and
issue a warning. Bug 691022.

[Resource/Init/pdf_font.ps]

2009-12-27T15:35:32.126971Z Alex Cherepanov

Consider fonts without font stream and with wrong or missing /Subtype
attribute as Type 1 fonts. Bug 691023.

[Resource/Init/pdf_font.ps]

2009-12-26T22:21:45.513158Z Alex Cherepanov

Fix a compile error on UN*X platforms introduced by the previous commit
(rev. 10558).

[base/gp_psync.c]

2009-12-26T20:05:44.539107Z Alex Cherepanov

Fix a Coverity warning about checking after dereferencing.
In this case dereferencing means &((foo *)0)->bar, which is harmless.

[base/gp_psync.c]

2009-12-26T18:32:35.542626Z Alex Cherepanov

Move checking gstate for 0 immediately after allocation. Fix a Coverity
warning about checking after dereferencing.

[base/gsstate.c]

2009-12-26T18:22:04.265168Z Alex Cherepanov

Don't dereference a pointer before checking it for NULL. Fix a Coverity
warning about checking after dereferencing.

[base/gxdhtserial.c]

2009-12-26T01:35:11.234623Z Alex Cherepanov

Include stdlib.h for a prototype for abs().

[base/gdevpdtt.c]

2009-12-26T01:13:12.801372Z Alex Cherepanov

Fix a case where a pointer is first dereferenced and then checked for 0.

[base/ttobjs.c]

2009-12-26T00:48:30.642019Z Alex Cherepanov

Clear Coverity warnings about unreachable code. Fix incorrect error
processing in some contributed drivers. Also remove a spurious *.orig file.

[contrib/lips4/gdevl4v.c.orig contrib/lips4/gdevl4v.c contrib/eplaser/gdevescv.c contrib/lips4/gdevl4r.c]

2009-12-24T00:33:05.486056Z Ray Johnston

Fix detection for nearing/passing command list buffer limit to allow for
the condition when the pointer is past the limit (which is NOT the end
of the buffer, but is only a warning). Change this variable name to
'warn_limit' to avoid confusion with the 'limit' used in most other
buffer management areas, such as streams. Bug 691016.

[base/gxclrast.c]

2009-12-23T21:12:34.206998Z Robin Watts

Add new assert_.h header file. Convert existing code to use it.

[contrib/gdevcd8.c /trunk/ghostpdl/pl/pldebug.h base/assert_.h contrib/pcl3/eprn/mediasize.c contrib/lips4/gdevlprn.h contrib/pcl3/eprn/eprnrend.c]

2009-12-22T23:32:30.888745Z regression

Remove -dNOOUTERSAVE and related commands from command line and optionally
read in list of fast to process files (so that long commands can be
processed first).

[toolbin/localcluster/build.pl]

2009-12-21T16:03:38.968428Z Ken Sharp

Fix (pdfwrite) Bug #691009 "Regression: 14-01.PS fails with pdfwrite". revision 10297,
a fix for pdfwrite involving composite fonts with type 3 descendants, did not check a
return value. This could cause a segment fault later, if a type 0 font was invalid.

The Genoa file 14-01.ps specifically runs tests with invalid type 0 fonts to check the
behaviour under error conditions and appears to be the only test file we have which
does this.

[base/gdevpdtt.c]

2009-12-21T07:20:23.809940Z Ralph Giles

Revert c10520 which causes problems with the MSVC build.

$(CC_) enforces 'ansi' C under msvc32.mak, disabling any Microsoft
extensions. This often causes problems with 3rd party libraries
which try to take advantage of those extensions.

This means that the -fPIC flag is again not propagated in the GCC
build; this is just to unbreak the build until I can test a different
solution which works on both platforms.

[base/libtiff.mak]

2009-12-20T19:54:00.274659Z Alex Cherepanov

Fix a Coverity warning: comparing array against NULL is not useful.

[base/gxclthrd.c]

2009-12-20T19:43:10.432199Z Alex Cherepanov

Fix a Coverity warning about an expression with undefined order of evaluation.

[contrib/gdevbjca.c]

2009-12-20T18:54:08.195262Z Alex Cherepanov

Fix a Coverity warning about an expression with undefined order of evaluation.

[contrib/pcl3/eprn/eprnrend.c]

2009-12-20T14:24:39.934442Z Alex Cherepanov

Fix Coverity warnings about unchecked return code.

[base/gxchar.c]

2009-12-20T06:52:50.539169Z Alex Cherepanov

Fix Coverity warnings about unchecked return code.

[base/gsptype1.c]

2009-12-19T17:14:09.025653Z regression

Minor improvements:

skip.lst is now processed by compare.pl instead of build.pl, so tests
to be skipped will be run, just not reported.

Store the archive count in the md5sum.archive so the report email will
be accurate.

Treat indeterminate errors (mostly timeouts) the same as indeterminate
md5sums (i.e. report them below the fold).

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/build.pl toolbin/localcluster/cachearchive.pl toolbin/localcluster/compare.pl]

2009-12-19T01:16:49.970378Z Alex Cherepanov

Fix an array overrun in zsethalftone5() caused by an unchecked error code
when the number of colorants exceeds the current implementation limit;
throw a /limitcheck error instead. Also fix an unrelated Coverity warning
about unchecked return value from dict_int_param(). Bug 691001.

[psi/zht2.c]

2009-12-18T22:24:19.154314Z Ralph Giles

Update some obsolete gs_throw() calls. Bug 691010.

This code seemed to be using an early version of the gs_throw() error
reporting macros, passing an undefined -997 error code, a redundant
__func__ error message, and expecting the macro to break flow control.

This commit updates it to the modern version's behaviour.

[base/gdevdbit.c]

2009-12-18T21:14:17.100541Z Ralph Giles

Add a missing header to ensure delaration and definition match
for mem_mono_strip_copy_rop(). Fixes a warning in the gcc build.

[base/lib.mak base/gdevmr1.c]

2009-12-18T18:32:46.014514Z Ralph Giles

Add .libs and autom4te.cache to the exclude list for clusterpush.

Builds which generate .deps directories also generally create the
other two. The autom4te.cache files aren't necessarily large but
aren't appropriate to copy to another system since they represent
details of the local build environment.

[toolbin/localcluster/clusterpush.pl]

2009-12-18T16:24:12.002354Z Marcos H. Woehrmann

Added .deps to the exclude list for clusterpush.pl.

[toolbin/localcluster/clusterpush.pl]

2009-12-18T07:04:10.684226Z Ralph Giles

Add graphics library support for raster operations and extended halftone
methods to the default gcc build.

This allows ghostpcl to build linked against the default 'so' build of
the gs library. On my Linux x86_64 this increases the size of the library
by 29K. While significant, I prefer this to the maintenance burden of
the two different configurations. 

[base/Makefile.in]

2009-12-18T06:37:02.606724Z Ralph Giles

Derive the libtiff compiler line from $(CC_) instead of $(CC) so
the common flag set is propagated.

Without this, additional options, like XCFLAGS=-fPIC aren't used when
compiling the libtiff source files.

[base/libtiff.mak]

2009-12-18T05:23:14.353404Z Henry Stiles

Export the the type 42 component parser procedure for pcl, no expected
differences.

[base/gxfont42.h base/gstype42.c]

2009-12-18T01:38:29.130442Z Ralph Giles

And the 'nogc' allocator to the default gcc build.

This allows ghostxps to build linked against the default 'so' build of
the gs library, simplifying some build options. The code size increase
is negligible.

[base/Makefile.in]

2009-12-17T20:14:08.344945Z Robin Watts

Fix for bug 690620. Original patch from HenryS. This adjusts rectangular
fills to more closely match that used by Acrobat v8.

DETAILS:

This patch updates the rectangle rendering to follow the mathematical
description of scan conversion more closely. It also includes special case
code to emulate the peculiarities of Adobe Acrobat 8.

A specific test is used to ensure that zero width/height clips are handled
correctly. I am not entirely convinced that relying on the inner bbox is
mathematically correct, but in the tests I've done (see clipbug.ps on the
bug, it seems to be enough to match Acrobat).

[base/gsdps1.c]

2009-12-17T18:13:48.602966Z regression

Cache the previous revisions crc values to improve compare.pl performance.

Also remove the no longer needed splitjobs.pl from the repository.

[toolbin/localcluster/splitjobs.pl toolbin/localcluster/clustermaster.pl toolbin/localcluster/cachearchive.pl toolbin/localcluster/compare.pl]

2009-12-17T17:57:14.753910Z Robin Watts

Update the arguments passed to ghostscript by htmldiff.pl so that they
more closely match those used by the localcluster.

DETAILS

localcluster uses "-dNOOUTERSAVE -dJOBSERVER -c false 0 startjob pop -f"

The use of -dJOBSERVER changes the output given for some of the ps3cet files
due to having different stack contents at the outer level.

This seems to eliminate most of the differences between htmldiff results
and local cluster results. Those that remain seem to be caused by differences
in the output of devices (htmldiff uses bmp, wheras the localcluster uses
pgm/pbm/etc).

One minor point; the use of -dJOBSERVER is defined in doc/Use.htm
to require input to be supplied via stdin. I originally wrote the code to
do this, but it seems this gives problems on Windows for some files
(for reasons that are beyond my comprehension at this time). Accordingly,
I've swapped back to supplying the filenames on the command line and
everything seems to be fine.

If this presents a problem on platforms other than windows, simply
edit the value of $redir as shown at the top of the file and redirection
will be used. If this turns out to be necessary, it may be possible to
automate this.

[toolbin/htmldiff.pl]

2009-12-17T15:24:07.353413Z regression

Minor cleanup/improvement of local cluster code.

DETAILS:

compare.pl: ignore missing archive directory

clustermaster.pl: rather than pausing 60 seconds after the first compile
error is detected wait until all nodes report compile fail or 60 seconds
has elapsed.  in the former case don't bother to send abort to nodes.

build.pl: add support for skip.lst (lists specific tests to skip)

add tests_private/customer_tests to test lists

force tests_private/customer_tests to be dispatached earlier
in the run (some of these tests take a long time and often
the regression run is waiting for one or more to be completed).

clusterpush.pl:  remove cluster_command.run before syncing

run.pl: more intelligently report compile fails.

save the previous non-user build of gs to be used for the following user
builds that don't build gs (previously whatever gs build as last build
was used).


[toolbin/localcluster/clustermaster.pl toolbin/localcluster/build.pl toolbin/localcluster/clusterpush.pl toolbin/localcluster/run.pl toolbin/localcluster/compare.pl]

2009-12-16T18:46:20.783419Z Robin Watts

Fix for incorrect bbox test in bmpcmp.

bmpcmp would correctly assess the changed region, but then incorrectly accept
changes restricted to a single row or column as not being changes at all.

DETAILS:

This resolves most of the differences between the results given by htmldiff.pl
and those given by the regression cluster. Some remain, but they are due (I
think) to a) different invocations of ghostscript, or b) differences in
device output (pgmraw vs bmp16m).

[toolbin/bmpcmp.c]

2009-12-16T18:33:40.102435Z Robin Watts

Broken fix for incorrect bbox test in bmpcmp; please ignore this revision
and use 10507 instead.

bmpcmp would correctly assess the changed region, but then incorrectly accept
changes restricted to a single row or column as not being changes at all.

[toolbin/bmpcmp.c]

2009-12-16T17:40:49.399642Z Robin Watts

Improved version of htmldiff.pl: New HTML file started every 100 or so sets
of image differences (configurable). This should stop browsers grinding to a
halt. Improved reporting of conversion errors.

[toolbin/htmldiff.pl]

2009-12-15T22:14:58.866880Z Alex Cherepanov

Increase the limit on the number of color components to 12. A file with
9 components has been found in the wild, add 3 more for a small reserve.
Bug 691002.

[base/gsccolor.h]

2009-12-15T14:34:56.554574Z Alex Cherepanov

Fix a botched use of references where a pointer to a reference in a
PostScript VM was used as a temporary variable. Bug 690828.

[psi/zcolor.c]

2009-12-15T09:55:23.729025Z Ken Sharp

Fix (FAPI) : Silence a compiler warning

Details
Flagged by Marcos, the variable 'ep' was unused and raised a gcc warning.

[psi/zfapi.c]

2009-12-13T01:31:59.081596Z Alex Cherepanov

Accept ASCII85 stream that ends with bare '~' in PDF files for compatibility
with Acrobat Reader. Add /PDFRules ASCII85Decode filter parameter to select
between PS and PDF logic. Bug 690976, customer 870.

[base/sa85d.h Resource/Init/pdf_base.ps base/sa85d.c psi/zfdecode.c]

2009-12-12T23:05:18.157328Z Ray Johnston

Fix RasterOp texture rendering from uninitialized memory (past end of buffer)
when the texture was 'expanded' and the unexpanded texture had repitions in y.
Bug 690299.

DETAILS:

The expansion was only needed if the device color space was RGB, but not 8 bit.
This doesn't really give valid output anyway for RasterOps, but at least
we no longer reference past buffer bounds (see the 'trow' calculation in
gdevmr8n.c).

[base/gdevdrop.c]

2009-12-12T22:39:17.759602Z regression

Added abort option to clusterpush.pl (i.e. 'clusterpush.pl abort') to
abort current job and remove any jobs queued for a user (it is possible
to abort/remove jobs for other users, but I'll leave that undocumented).

Also partially added support for mupdf regression testing.

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/build.pl toolbin/localcluster/clusterpush.pl toolbin/localcluster/run.pl]

2009-12-12T18:25:25.212987Z regression

Added --max-size=2500000 to avoid sending very large files.

Divide queueing and syncing into two steps, so that it's possible
to ^C if you decide the files being transmistted are incorrect.

[toolbin/localcluster/clusterpush.pl]

2009-12-12T03:46:55.487466Z Hin-Tak Leung

Coverity warning #4475, uninitialized value

[base/gdevpxut.c]

2009-12-12T03:45:55.759446Z Hin-Tak Leung

Coverty warning #1158, unchecked return values

[base/gdevpx.c]

2009-12-12T03:45:13.363455Z Hin-Tak Leung

Coverity warning #2555, removing unused header

[base/gdevpx.c]

2009-12-12T03:43:49.383201Z Hin-Tak Leung

treat depth 15 the same as depth 16 in get_bits_rectangle()

It looks to be 'just work' (or no worse than depth 16) by treating depth 
15 the same as depth 16 in get_bits_rectangle. The pcl files in the original report
works now; but a pxl file shows some visual artifects (and different one) at depth
15, 16 and will be filed separately.

This fix fix bug 690328 (make X11 device continue for those pcl files; caveate 
visual artefacts for at least one pxl file)

[base/gdevx.c doc/Devices.htm]

2009-12-12T00:28:26.868635Z Ray Johnston

Fix hang condition due to pointer comparison, bug 690638.

DETAILS:

The clist buffer management mostly checked the amount of data in the buffer
by computing the difference between the limit and the current pointer. This
patch fixes the places that computed a new pointer of the desired amount
plus the current pointer and compared to the limit. If this overflowed
the register, then the sum was less than the (unsigned) limit pointer.

[base/gxclrast.c]

2009-12-11T19:18:57.300388Z Alex Cherepanov

Fix incorrect calculation of the operand stack base (pdfemptycount) in PDF
interpreter, which caused incorrect processing of scn operator. Bug 690977.

[Resource/Init/pdf_draw.ps]

2009-12-10T03:29:32.317033Z regression

Removed bitrgb and pgmraw from pcl regression tests.

Fixed a bug where failed compiles would cause a job restart loop.

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/build.pl toolbin/localcluster/run.pl]

2009-12-09T17:24:34.115310Z Ken Sharp

Fix (pdfwrite) : regressions with revision 10474

Details
Revision 10474 unexpectedly caused a number of regressions resulting in unreadable
PDF files. This revision changes the way we deal with the indeterminacy caused by 
not checking the return value. In this case if the return value is an error we *set*
the members field of the gs_glyoh_info struct to 0 and allow the code to test the
value

[base/gdevpdtt.c]

2009-12-09T15:32:27.320916Z Ken Sharp

Fix (pdfwrite) : Unchecked return value causing indeterminisms

Details
Bug #690762 ""
Reported and investigated by Marcos using Valgrind. The return value from a glyph_info
method was not checked before accessing the members of the 'gs_glyph_info' structure. If
an error occurred the fields of the structure were potentially not initialised, leading
to indeterminate results.

Modified to check the return value properly.

[base/gdevpdtt.c]

2009-12-08T16:09:01.319365Z Ken Sharp

Fix (FAPI) : Handle Type 42 fonts with CharStrings dictionaries with real PS glyphs

Details
The FAPI code regarded a Type42 font which contained a CharStrigns dictionary where the
contents of the dictionary were not simply integers but actual glyph descriptions to be
an invalid font. Regular Ghostscript, Jaws and Acrobat Distiller happily accept such
bizarre fonts and correctly render the glyphs in them, even the PostScript ones.

Modified FAPI to execute the glyph descriptions in this case rather than raising an
error.

[psi/zfapi.c]

2009-12-08T07:52:26.208006Z Ralph Giles

Revert remaining changes to the clusterpush script inadvertently 
included in r10461. This version is now identical with the version
in r10435. In particular, the more sophisticated gs/ghostpdl detection
which works for branches and custom-named directories is restored.

[toolbin/localcluster/clusterpush.pl]

2009-12-08T07:41:12.811962Z Ralph Giles

Update local cluster documentation to reference the 'regression' account
instead of 'marcos' and other minor cleanup.

[toolbin/localcluster/setupcluster toolbin/localcluster/clusterpush.pl toolbin/localcluster/readme toolbin/localcluster/clusterpush.txt]

2009-12-08T07:25:03.670058Z Ralph Giles

Use the new 'regression' username in the clusterpush script.

This corrects what looks like an inadvertent commit of an older version
in r10461.

[toolbin/localcluster/clusterpush.pl]

2009-12-08T06:31:51.930815Z Alex Cherepanov

Fix a Coverity warning. Don't assign a value to a variable if it isn't used.

[psi/imainarg.c]

2009-12-08T03:33:05.781180Z Alex Cherepanov

Fix Coverity warnings caused by a recurring error in opvp driver where
'if (i > sizeof(foo)/sizeof(*foo)) ...' was used to prevent out-of-bounds
access to foo[i] .

[contrib/opvp/gdevopvp.c]

2009-12-08T03:32:18.888688Z regression

Improve the node failure job reallocation logic.

Details

Since the cluster jobs are now distributed to the cluster nodes in
batches a node failure no longer requires a job restart.  Instead the
jobs that had been sent to the failed node are put back into the pending
queue and sent to the remaining node(s).

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/clusterpush.pl toolbin/localcluster/run.pl toolbin/localcluster/compare.pl]

2009-12-08T00:42:59.473070Z Alex Cherepanov

Fix a Coverity warning. Avoid a FILE pointer leak in an unlikely
case when gs_main_init2() fails.

[psi/imainarg.c]

2009-12-07T15:49:53.218004Z Ken Sharp

Fix (FAPI) : Ignore some TrueType faults

Details
The file Bug689516.pdf contains TrueType fonts with problems, one of the fonts has 
multiple fatal errors:

1) GLYF and LOCA tables contain more than NumGlyphs glyphs, and some of these
glyphs are used.
2) At least one glyph uses more points than the declared maxPoints value.
3) The FPGM is invalid.

Acrobat ignores these but elides the glyphs with problems, GS's internal TT rendering
engine issues a warning and also elides these glyphs.

Modified the FreeType FAPI code to catch certain classes of error and emit slightly
different, possibly slightly more informative, warnings, and continue, ignoring the
faulty glyph(s).

[psi/fapi_ft.c]

2009-12-07T05:46:36.982240Z Alex Cherepanov

Fix a Coverity warning. Add missing assignment to 'code' variable. The later
use of 'code' in the conditional expression indicates that this was the
author's intention. 

[base/gsfont.c]

2009-12-06T19:12:08.897785Z Alex Cherepanov

Fix a Coverity warning. Add missing assignment to 'code' variable. The later
use of 'code' in the conditional expression indicates that this was the
author's intention. 

[base/gxttfb.c]

2009-12-06T14:55:58.088044Z Alex Cherepanov

Fix a Coverity warning. Check the return code from sget_variable_uint()
in image4 serialization.

[base/gximage4.c]

2009-12-06T02:21:36.356914Z Alex Cherepanov

Fix a Coverity warning and improve readability. Don't define a local variable
with the same name as a function argument.

[psi/ziodevsc.c]

2009-12-06T00:56:38.018707Z Alex Cherepanov

Fix a Coverity warning and improve portability. Don't access sequential
members of a structure as an array.

[psi/zht1.c]

2009-12-05T23:10:32.160743Z Alex Cherepanov

Fix a Coverity warning. Change the logic in obj_cvs() to handle all possible
combinations and avoid a potential SEGV.

[psi/iutil.c]

2009-12-05T19:21:42.203093Z Alex Cherepanov

Fix a Coverity warning and a potential SEGV caused by a wrong pointer
checked for NULL after memory allocation.

[psi/zfcid1.c]

2009-12-05T17:27:01.175245Z Alex Cherepanov

Fix a Coverity warning. Remove dead and commented out code that didn't
change since April 2000, rev 324.

[psi/zfcmap.c]

2009-12-04T15:52:08.152428Z Ken Sharp

Fix (FAPI) : empty glyphs causing problems after revision 10434

Details
As noted by SaGS in the thread for bug 690448, the revision for 10434 does not 
properly cater for 0 length glyphs, and instead makes such glyphs the same as the next
(in GLYF table) non-empty glyph.

Also as pointed out by SaGS, the glyph length is already calculated so we don't need to
repeat the performance with the LOCA table anyway. Modified the code to use the 
pre-calculated glyph lengths instead of recalculating them incorrectly.

[psi/zfapi.c]

2009-12-04T15:38:03.727531Z Ken Sharp

Fix (FAPI) : TT tables > 64Kb not read properly.

Details
If, while reading a TrueType table for serialisation, we ran off the end of an sfnts
string, we switch to the next string, and carry on reading the data. However, we did not
update the destination pointer leading to corruption of the already processed data and 
general corruption of the table.

We now update the destination pointer before continuing to write data to it.

[psi/zfapi.c]

2009-12-04T03:51:10.377640Z Alex Cherepanov

Rearrange JP2 color space processing code to facilitate experiments with
enumerated color spaces.

[Resource/Init/pdf_draw.ps]

2009-12-04T00:33:04.330450Z Robin Watts

Extend ghostscript graphics library with the capability to handle different
start, end and dash caps.

The existing gs_setlinecap function sets all 3 caps in lockstep, so no change
with current code. New functions gs_setlinestartcap, gs_setlineendcap,
gs_setlinedashcap set the different cap styles.

The dashing code now leaves segment notes in the output path to inform the
choice of which caps to use. The stroking code is updated to honours these
notes.

gxclpath.c and gdevvec.c assume that all caps are the same as start_cap.
Check that this is valid.

[base/gsstate.c base/gxclpath.c base/gxline.h base/gxpdash.c base/gxpath.h base/gdevpdtt.c base/gsline.c base/gdevvec.c base/gdevpdfg.c base/gsline.h base/gxstroke.c base/gxclrast.c]

2009-12-03T19:21:12.315688Z Marcos H. Woehrmann

I missed a file that should have been part of the r10440 commit.

[toolbin/localcluster/clusterpull.sh]

2009-12-03T19:14:12.694527Z Alex Cherepanov

Fix a Coverity warning by removing redindant checks. The 'pie' pointer cannot
be null here because it is dereferenced earlier.

[psi/zimage.c]

2009-12-03T17:30:38.929684Z Robin Watts

Remove stray (incorrect) initialisation. This removes a "removing const"
warning.


[base/gdevpdfe.c]

2009-12-03T16:18:00.535689Z Marcos H. Woehrmann

Improved cluster reliability (automatically reset stale nodes, move
watchdog from cron to run.pl, check for periodic transfer, etc.).

[toolbin/localcluster/clustermonitor.pl toolbin/localcluster/clustermaster.pl toolbin/localcluster/run.pl]

2009-12-03T06:08:39.915454Z Ray Johnston

Add argument list and 'minst' address to -Z: debugging report to assist in tracking
cluster test logs (to see which, if any, jobs start but don't finish).

[psi/imain.c psi/imainarg.c]

2009-12-03T00:02:30.276576Z Hin-Tak Leung

send images with Interpolate=true back to gx_default.

comparefiles/148-01.ps have a few Type 1 images with
<<Interpolate true>> are not rendered with Interpolate.

Since pxlcolor/pxlmono cannot do Interpolate within, 
and has no code to do such thing, the correct solution 
is simply detect such images and use gx_default_*. Fixes bug 690970.

[base/gdevpx.c]

2009-12-02T19:57:05.281734Z Marcos H. Woehrmann

Improved logic in clusterpush.pl to detect if running from a gs or ghostpdl director.

[toolbin/localcluster/clusterpush.pl]

2009-12-02T14:20:41.078998Z Ken Sharp

Fix (FAPI): error in revision 10433

Details
Accidentally committed a version where the calculation of the initial offset to test
against was the end of the LOCA table, instead of the theoretical maximum size of the
GLYF table.

[psi/zfapi.c]

2009-12-02T14:13:44.401916Z Ken Sharp

Fix (FAPI) : FAPI code not expecting unsorted LOCA/GLYF tables

Details
The FAPI code needs to copy the GLYF data, to do this it needs to know how long the 
data is. The only way to do this is to consult the LOCA table which gives the offset
to each glyph in the GLYF table. Subtracting the start of the glyph from the start of
the next glyph in the GLYF table gives the length.

The existing code assumed that the GLYF (and therefore LOCA) tables was ordered, that is
that glyph 1 followed glyph 0 and so on. There is no such restriction, glyphs can
appear in any order, so the simple subtraction caused incorrect glyph lengths, which
could lead to truncation of the data and caused errors.

We now pick up the offset of the glyph we want from the LOCA table, and then search the 
entire table to find the glyph whose offset is nearest (but after) the offset of the
glyph we want.

[psi/zfapi.c]

2009-12-02T07:00:16.393155Z Ray Johnston

Fix vertical positioning of interpolated images that caused images to be moved
down, possibly past the end of the band. An extra multiplication by -1 was the
culprit. Bug 690885, customers 531 and 850.

[base/gxiscale.c]

2009-12-01T19:39:06.587717Z Robin Watts

Fix dropouts seen with thin lines by using the method described in bug 687721,
namely, that of extending the trapezoids filled by a small triangular region
at each end.

Local cluster testing shows 66 changes, of which only 20 or so are real.
Of these, most are clearly improvements, and the rest are neutral. 

[base/gdevddrw.c]

2009-12-01T19:10:35.168567Z Ralph Giles

Update the clustermonitor cgi script to read the new combined queue 
file for pending jobs.

[toolbin/localcluster/clustermonitor.cgi]

2009-12-01T19:08:27.833775Z Ralph Giles

Update the clustermonitor cgi script to return regression results.

This makes use of the CGI module to parse an optional 'report' query
parameter, which if present, returns a specific regression result
instead of the default json dashboard status. Current it only supports
svn jobs, not custom runs submitted through the clusterpush script.

Also cleans up the the paths to use a $clusteroot variable for the 
prefix.

[toolbin/localcluster/clustermonitor.cgi]

2009-12-01T18:36:08.279176Z Robin Watts

Factor out the miter checking code into a single function rather than having it
repeated 3 times.

Add a test to the extracted code to spot the case where the cdelta's are too
small to be reliably used to calculate the correct miter point. In such cases
revert to using the raw vectors suitably scaled.

Testing reports 69 changes in the regression files, none of which can be
reproduced locally. This fixes bug 690098.

[base/gxstroke.c]

2009-12-01T18:08:58.973794Z Alex Cherepanov

Fix a Coverity warning and a potential array overrun in obj_cvp().

[psi/iutil.c]

2009-12-01T16:04:36.569081Z Marcos H. Woehrmann

Another clusterpush.pl change that was lost, should have been part of r10421.

[toolbin/localcluster/clusterpush.pl]

2009-12-01T15:37:15.738865Z Marcos H. Woehrmann

Fixed localcluster/clusterpush.pl to work with casper3.

[toolbin/localcluster/clusterpush.pl]

2009-12-01T09:02:10.394257Z Marcos H. Woehrmann

All local cluster jobs are now queued (instead of just user jobs).
This eliminates a race condition that could have occured if the
ghostpdl/ghostscript repository is updated after the cluster master
initiates a cluster run but before the nodes perform the svn update.
As a side-effect of this change svn commit jobs are not longer given
priority over user jobs.

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/build.pl toolbin/localcluster/clusterpush.pl toolbin/localcluster/run.pl]

2009-12-01T03:40:54.743929Z Alex Cherepanov

Fix a Coverity warning about unchecked negative return and a possible
access to an array at a negative position.

[psi/zupath.c]

2009-11-30T23:37:23.019948Z Michael Vrhel

Fix for bug 690218.   If the SeparationOrder was specified, then we should only allocate buffer space for those colorants.  See devn_put_params for details on this.  Right now, the PDF14 device will always include CMYK.  A future optimization is to be able to NOT have those included in the bufferallocations if we don't specify them.  In that case it would then be possible to output 8 separations at a time without using compressed color.  Note that if SeparationOrder is not specified, the number of colorants used in the pdf14 device buffer allocations is equal to the number of colorants in the document up to a maximum of 64.

[base/gstrans.c]

2009-11-30T23:12:19.025235Z Marcos H. Woehrmann

Change from batch job distribution system to polled system.

[toolbin/localcluster/splitjobs.pl toolbin/localcluster/clustermaster.pl toolbin/localcluster/build.pl toolbin/localcluster/clusterpush.pl toolbin/localcluster/run.pl]

2009-11-30T22:57:24.661785Z Ray Johnston

Fix for segfault when image 'clues' are accessed during a GC after a
restore has erased (set to zero) the contents. Bug 690915.

DETAILS:

As described in gx_image_free_enum comment, the penum may not be freed if
it is at a higher (outer) save level, so the contents (including the
"clues" are zeroed, but the ENUM in image_enum_enum_ptrs (gxipixel.c)
did not check for this. This was indeterministic since it depended on
when the GC scan ran.

[base/gxipixel.c]

2009-11-30T20:34:48.913220Z Henry Stiles

Remove an unnecessary diagnostic debug printf which should not have
been checked in.  No expected differences.

[base/gsalloc.c]

2009-11-30T16:40:08.309112Z Henry Stiles

New procedure to dump memory chunks with less detail.  This will be
used by the non garbage collecting client languages to print memory
leak information at the end of jobs.  No expected differences.

[base/gsalloc.c]

2009-11-30T09:05:26.245478Z Ken Sharp

Fix (FAPI): Can't handle FontBBox as 't_mixedarray'

Details
The FAPI code extracts the entries in the FontBBox, but only catered for the internal
GS 't_array' or 't_shortarray' types, we can also get the 't_mixedarray' type.

[psi/zfapi.c]

2009-11-30T02:47:11.189285Z Hin-Tak Leung

updating begin_image and fill_mask to cope with white/black+transparent

Apparently not all black/white+transparent uses the copy_mono code path, which
has been recently updated to do white-on-mask. There are two other ways
black/white+transparent can pass through pxl - in begin_image() (as part of an
RGB/Gray image with an alpha channel) which is most of the files in bug
690947, and fill_mask() which has no known cases yet.

Note the new addition to fill_mask() and begin_image() is not identical to that
in copy_mono() in the case of the drawing color being white - fill_mask() and
begin_image() both try to draw white on the blacks of a black/white mask and
transparent on the white, whereas copy_mono() draws white on the white and draw
transparent on the opposite (set to black but really transparent), so the
source is inverted in fill_mask() and begin_image() compared to copy_mono().

[base/gdevpx.c]

2009-11-30T02:41:19.062276Z Hin-Tak Leung

set ROP to paint through character glyphs (pattern tiles).

Apparently complete pattern tiles are sent as a character in a custom symbol
font (rather than small rectangles for incomplete tiles), thus allowing re-use.
The code set the fill color but never set ROP to "paint with brush color" thus
glyphs appears as black. This patch set the ROP3 operation to paint through
complete pattern tiles. Fixes bug 690949, also some of the problems in bug
690585 (for ghostpdl).

[base/gdevpx.c]

2009-11-30T02:36:44.876347Z Hin-Tak Leung

fix typo introduced in r5556

It appears that 'r5556: Added macros for assertions' introduced a typo.
There is no known effect from this typo, except possibly stroke color 
not being set where it should.

[base/gdevpx.c]

2009-11-30T02:30:52.552359Z Hin-Tak Leung

another ID to name update

[doc/AUTHORS]

2009-11-30T02:29:45.556262Z Hin-Tak Leung

avoid setting join to invalid value; issue found in bug 690585

[base/gdevpx.c]

2009-11-29T02:43:31.722821Z Ray Johnston

Fix to correct mask offsets (bit order) for big_endian as well as sharing this
array for the various devices. Bug 690954.

[base/gdevtsep.c]

2009-11-28T10:59:10.646748Z Ken Sharp

Fix (FAPI) : segmentation violation with Multiple Master fonts

Details
When extracting the $Blend procedure from a Multiple Master font, if the procedure
contained a name object, there was a typo which used an uninitialised variable
instead of the extracted name element to convert the name to a string.

Fixed by using the correct name object instead

[psi/zfapi.c]

2009-11-28T04:39:43.983110Z Marcos H. Woehrmann

Changes to accomodate the transition from casper2 to casper3.

[toolbin/localcluster/clustermonitor.pl toolbin/localcluster/clustermaster.pl toolbin/localcluster/clusterpull.sh toolbin/localcluster/build.pl toolbin/localcluster/clusterpush.pl toolbin/localcluster/run.pl]

2009-11-27T19:15:08.980517Z Ray Johnston

Fix dereference of NULL when target device passed to gx_forward_put_params
was NULL. This occurred with the standalone 'bbox' device.

[base/gdevnfwd.c]

2009-11-27T19:07:02.726122Z Ray Johnston

Fix for Device N capable device segfaults (psdcmyk, tiffsep, tiffsep1, ...) that use
the gdevdevn.c parameter handling. A 'restore' could free up separation names but
the pointers in the device were unchanged. Bug 690956.

[base/gdevdevn.c]

2009-11-27T14:19:19.911778Z Ken Sharp

Fix (FAPI) : invalid fonts resulting in errors

Details
The files Adobe Garamond CE.pdf, Bauhaus CE.pdf and Futura CE.pdf alll contain subset CFF
fonts, and use the same (ecaron) glyph. In all three cases the font uses the deprecated
'SEAC' endchar construction and in all three cases at least one component glyph is not
present in the font.

Probably the producer didn't realise the component glyphs were required amd did not 
include them in the subset.

As a result the FAPI code properly rasied an error, sicne the required glyph is not 
presemt. Adobe Acrobat (of course) ignores the error and simply elides the missing 
glyph. Regular Ghostscript has at some time been coded to do the same and emit a 
warning.

For compatibility this 'feature' has been implemented in  the FAPI interface.

[psi/fapi_ft.c]

2009-11-27T00:55:09.262519Z Robin Watts

Part 2 of commit 10391. Reinitroduce special cases in a way that doesn't change
the output. A clustertest shows 33 differences overall, but testing of those
files on my local machine shows them all to be identical.

This fixes bug 687666.

[base/gdevddrw.c]

2009-11-26T20:48:31.400887Z Robin Watts

First of a 2 part commit, fixing the special case horizontal/vertical
rectangle code in the thin line code in gdevddrw.c, as it doesn't match
the general case. This will cause many differences in the regression tests.

Part 2 will commit a fixed version that will hopefully show none.

[base/gdevddrw.c]

2009-11-26T16:53:25.042900Z Ken Sharp

Removed commented out code that should not have been left behind in revision 10389

[psi/zfapi.c]

2009-11-26T16:44:03.688193Z Ken Sharp

Fix (FAPI) : intermittent crashes with TrueType fonts

Details
The sfnts reader code in the FAPI module maintains a pointer to a string from an array
of strings (the /sfnts array). It then used the offset member to point along the string
to the current byte within it. When reading multiple bytes, it checks there is
sufficient data by checking ptr+offset against the size of the string. However the code
did not increment the offset member after reading multiple bytes, instead it incremented
the actual pointer. This completely bypassed the size checking, which could cause a
crash depending on the memory layout. This was only likely to happen with fonts with
very large TrueType tables (ie those not conforming to Type 42 recommendations
regarding string sizes, see tech note 5012)

Altered the code to always increment the offset rather than the pointer so that size
checking works properly.

[psi/zfapi.c]

2009-11-26T10:18:15.394246Z Ken Sharp

Fix (FAPI) : Incorrect GID supplied to font interpreter for CIDFonts with TT outlines

Details
CIDFonts use a CID, for CIDFonts with TrueType outlines the font contains a CIDToGIDMap
entry which is used to convert the CID into a TrueType Glyph ID (GID). We were not using
the data, which resulted in us passing the CID directly to the font interpreter, which
caused the wrong glyph to be extracted, or failures to occur because the GID was larger
than the number of glyphs in the font.

The type 42 font code in GS converts the CIDToGIDMap into a CIDMap entry, we now use
this to convert the CID into a correct GID for the font interpreter to use.

[psi/zfapi.c]

2009-11-26T10:13:00.448002Z Ken Sharp

Fix (FAPI) : CIDFonts not working with fonts containing a CDevProc

Details
When calling zchar_set_cache we always used the glyph name as one of the arguments,
this argument was later pushed onto the stack for use by a CDevProc if required. The 
problem is that with CIDFonts the name is always a null object and we should actually 
be supplying the CID to the procedure.

Modified the call to zchar_set_cache when we have a CIDFont to supply the CID instead 
of the name

[psi/zfapi.c]

2009-11-26T07:13:02.012525Z Marcos H. Woehrmann

Report enhancments as a separate category in the the weekly bug aging report.  Closes bug 690524.

[toolbin/bugsByEngineer.pl]

2009-11-26T00:47:35.579155Z Robin Watts

Fix for bug 688655: stroking of wide curves with high curvature would
previously have left strange effects under the curve, and had nasty
flattening artifacts on the outside of joins.

Here we alter the stroking logic to spot that line segments come from curves
and we render using round joins both above and below the curve.

This gives us correct rendering of tests/ps/jointest.ps for the first time.

This causes about 4000 diffs. I've generated a huge number of them locally
and they all seem to be the odd pixel changed do to rounding. Where differences
are larger I've convinced myself that the difference is correct.

[base/gxstroke.c]

2009-11-25T19:59:11.063393Z Henry Stiles

Remove the string list implementation from the "nogc" allocator.  This
makes the implementation much simpler and there was little or no
performance improvement with the string lists.  Also this file has
been cleaned up of archaic comments about VMS, compiler support
comments, pragmas, etc.  No expected differences.

[base/gsnogc.c]

2009-11-24T16:51:12.328850Z Robin Watts

Fix for bug 690938. Revert revision 10294, an attempt to fix a valgrind bug,
and instead initialise the bbox of paths to the maximally invalid bbox.

As soon as any point is added to the bbox, we'll get a valid bbox. Note that
the "bbox_set" flag does NOT mean "the bbox is valid", it instead means "the
bbox has been set, as per the setbbox postscript operator".


[base/gxpath.c base/gxpath2.c base/gxpath.h]

2009-11-24T12:31:17.678731Z Robin Watts

In revision 10351 I commited a partial fix for Bug 690531 that added a new
method for stroking a path. Due to a silly mistake on my part when stroking
paths with round caps, we could occasionally fail due to a confusion over
which caps to use.

Ralph reported this issue as bug 690639. The error is fixed here, but this
doesn't solve all the rendering problems. Investigations continuing.

[base/gxstroke.c]

2009-11-24T08:36:27.174072Z Lars Uebernickel

Don't use sed's extended regular expression syntax in configure.ac.

GNU and Mac OS X have different command line options to enable them and since
it was only used once, it's easier to simply use the standard regexp format.

[base/configure.ac]

2009-11-24T01:31:19.408746Z Ralph Giles

Implement JBIG2Decode generic regions using TPGDON.

Closes bug 690791.

[jbig2dec/jbig2_generic.c]

2009-11-23T17:35:16.098214Z Ray Johnston

Fix for segfault reported in 690880 with separation devices. The is_open flag
was not being properly maintained when put_params resulted in a target device
closing due to DeviceN color state changing.

DETAILS:

The check in zputdeviceparams relied on code > 0 or the width or height change
in order to determine that the device needed to be reinitialized. The put_params
forwarding needed to check if the target device closed (such as when DeviceN
parameters changed) and return code=1 to trigger the device reinitialization.

Also the forwarding of close_device needed to make sure and set is_open=false
if it called the target device procedure directly instead of using gs_closedevice
(which takes care of this detail).

[base/gdevp14.c base/gdevnfwd.c]

2009-11-23T02:44:56.504420Z Marcos H. Woehrmann

Report pdfwrite differences separately from other differences.

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/build.pl toolbin/localcluster/compare.pl]

2009-11-22T23:46:21.529560Z Ray Johnston

Add description of the tiffsep1 device. It was mentioned in the previous update,
but the basic device characteristics were missing.

[doc/Devices.htm]

2009-11-22T20:09:44.171077Z Lars Uebernickel

Added a -sCompression parameter to all TIFF devices.

This parameter sets the compression scheme of the resulting file and can take
the values 'none', 'crle', 'g3', 'g4', 'lzw', and 'pack'.  crle, g3, and g4
only work for 1-bit devices.  For tiffsep, it sets the compression scheme of
the separation files, the composite cmyk file is always saved uncompressed.

Libtiff supports many more compression formats (e.g. jpeg, deflate).  Adding
them to this implementation is trivial.

doc/Devices.htm documents the parameter further.

[base/gdevtifs.c base/gdevtifs.h base/gdevtsep.c doc/Devices.htm base/gdevtfnx.c base/gdevtfax.c]

2009-11-21T09:44:54.242928Z Ken Sharp

Fix (pdfwrite) : problems with type 3 fonts and glyphshow

Details
Bug #690738 "pdfwriter garbles/omits glyphs"
Bug #690836 "Bug during eps to pdf conversion"
Bug #690882 "ps2pdf mangles type 3 fonts"

Revision 9804 modified pdfwrite to try and make text in type 3 bitmap fonts, derived
from PCL input, more likely to produce a PDF file with searchable text. Part of the 
change was to try and group multiple glyphs together into a single string instead of
emitting them as single glyphs.

Unfortunately that was an optimisation too far. There is no way currently to tell the
difference between a type 3 font which has been converted into a bitmap, one which
started as a bitmap, and one where the CharProc has been captured (PostScript). We do
however store bitmap and outline glyphs in different fonts, the problem arose if we
converted a CharProc to a bitmap, and then stored a CharProc, the code did not realise
that we had switched fonts and tried to use the bitmap font for both.

This occurs because matplotlib defines all its fonts as type 3, applies an Encoding 
to them, but never uses it, instead showing all glyphs with a glyphshow operation.
This makes it difficult for pdfwrite to assemble an output type 3 font with a valid
Encoding, and PDF doesn't support glyphshow. In this case if we find that the glyphshow
uses a glyph which is not in the font's Encoding (eg /multiply) we end up producing a
bitmapped glyph instead.

Ideally we would capture the CharProc, but doing so would be very difficult in this case
for a very minor benefit. Instead I've chosen to remove this optimisation.

Previously we would emit text something like:

x y moveto
(ABC) show

Now we do:

x y moveto
(A) show
x1 y1 moveto
(B) show
x2 y2 moveto
(C) show

There seem to be no differences in the test suite with PostScript and PDF files, 
probably because no files apart from matplotlib use glyphshow in this demented fashion.
However, this does result in a large number of PCL test files exhibiting very small
differences with text, especially at low resolution, due to tiny shifts in position.

[base/gdevpdts.c]

2009-11-20T20:09:26.637666Z Ray Johnston

Fix segfaults in tiffsep and tiffsep1 -- After TIFFCleanup, need to set the tiff
structure pointer to NULL to prevent later use. Fix separation file name logic
to substitute a harmless '_' character for characters that cause file system
action ('/'. '\' and ':').

Set default compression for tiffsep output 'gray' pages to LZW and default for
tiffsep1 to G4. While not strictly backwards compatible, any competent tiff
reader will be able to handle this.

[base/gdevtsep.c]

2009-11-20T18:10:12.230365Z Ralph Giles

Skip JBIG2Decode generic regions using TPGDON.

We don't yet implement this, and discarding the data is better than
proceeding with the incorrect decoding proceedures, which generally
just produce noise. Work-around for bug 690791.

[jbig2dec/jbig2_generic.c]

2009-11-19T20:17:02.559183Z Ray Johnston

Fix for segfault reported in bug 690927 and two of the segfaults of bug 690880.

DETAILS:

The pdf14_compressed_encode_color (and _decode_) assumed that the device was
a pdf14_device and directly accessed the devn_params using that structure offset,
but when filling gradients the device was the target device (a gx_device_printer
subclass) so the pointer was wrong.

The primary change is in base/gxblend1.c and uses the device's ret_devn_params
procedure (if possible). If the proc is NULL, or if it returns NULL, then and
only then use the devn_params structure assuming that the device is a pdf14
variant (usually pdf14cmykspot or pdf14clistcmykspot).

A check for this is performed in DEBUG builds in case this expected invariant
is ever violated. In order for the check to be made simpler, the names of all
of the devices were changed to all start with "pdf14" (some were PDF14).

[base/gdevp14.c base/gxblend1.c]

2009-11-19T16:48:11.876622Z Robin Watts

Fix stupid typo: ; for , - pointed out by tor. Sorry everyone.

[base/gspath.h]

2009-11-19T13:56:18.594001Z Robin Watts

Fix for Bug 690531, excessive slowdown while rendering a complex stroked
path with anti-aliasing.

The problem is caused by the gs filling code grinding to a halt under the
weight of an extremely complex path produced by stroking an already complex
path and then filling it all at once.

This change can be seen as a workaround in that it does not change the
filling code at all (this may be considered in future after the freetype
changes have gone in), but instead adds a new mechanism for stroking that
produces (broadly) equivalent strokes which happen to fill more easily.

[base/gxpath2.c base/gxpath.h base/gxstroke.c]

2009-11-19T00:09:15.456317Z Ralph Giles

Replace only the initial definition of the gs executable
in the script wrappers.

It is possible to change the name of the compiled gs executable; this is
generally used to distinguish multiple installed versions. In r5212 a
sed command was added to the unix build scripts to rewrite the name of
the gs executable embedded in the various wrapper scripts so that they
would call the corresponding version.

This was broken in r8107 where an extra clause was added to have the
wrapper scripts prefer the gs executable in their local directory
over any in the path. Unfortunately the sed command rewrites both
attempts to set GS_EXECUTABLE.

This commit only rewrites the specific assignment of the default name.
Thanks to Vince Dean for suggesting the fix. Bug 686863.

[base/unixinst.mak]

2009-11-18T04:46:21.000840Z Alex Cherepanov

Handle optional content following the default viewing optional content
configuration dictionary. Skip invisible XObjects and render invisible
parts of content streams to nulldevice. Bug 690633, customer 1110.

[Resource/Init/pdf_ops.ps Resource/Init/pdf_main.ps Resource/Init/pdf_draw.ps]

2009-11-17T22:26:38.187446Z Lars Uebernickel

Call libtiff's configure script when configuring ghostscript.

This also removes the (now) unnecessary tiff config files from the repository,
which fixes build problems on compilers where headers are always first searched
in the current directory.

[tiff/libtiff/tif_config.h tiff/libtiff/tiffconf.h base/configure.ac]

2009-11-17T20:10:20.126305Z Lars Uebernickel

Use TIFFCleanup instead of TIFFClose in all tiff devices, as the fd is already
closed in gp_prn_close.

[base/gdevtifs.c base/gdevtsep.c base/gdevtfax.c]

2009-11-17T18:01:22.576735Z Marcos H. Woehrmann

Several small changes to the local cluster code:

clusterpush.pl - you can now specify what products to test via the command line. 

e.g. clusterpush.pl gs
     clusterpush.pl 'svg pcl'

By default all products ('gs','pcl','xps','svg') are tested.

compare.pl - no longer report not changed non-value return codes.

build.pl - remove all pcl tests except for 600 dpi/banded and most svg tests.
no longer randomize jobs (helps with the indeterminisms and improves load balancing).

clustermaster.pl - changes to support new clusterpush.pl options and improvement in the
load balancing algorithm.

run.pl - add support for semaphore to insure only on copy is run at a time
(currently disabled pending additional testing).


[toolbin/localcluster/clustermaster.pl toolbin/localcluster/build.pl toolbin/localcluster/clusterpush.pl toolbin/localcluster/run.pl toolbin/localcluster/compare.pl]

2009-11-17T15:45:42.467605Z Ken Sharp

Fix (TT font substitution) : Incorrect Widths applied to CIDFont glyphs from PDF file

Details
Bug #690876 "Spacing issues with mixed asian/roman characters"

The PDF interpreter applies the /Widths array from a PDF CIDFont by applying a custom
CDevProc to alter the width of the glyph before it is cached. This procedure relies
on the CID of the glyph being correct, as this is the index into the Widths array.

This works correctly for genuine (embedded or from disk) CIDFonts. However, if we use
a disk-based TrueType font as a substitute for a missing CIDFont, the integer which gets
passed into the CDevProc routine is the TrueType glyph ID (GID). This is because the
CID from the CIDKeyed instance must be converted into a GID for us to consult the font.
Using the GID instead of the CID results in incorrect widths being applied.

This conversion happens in PostScript and the original CID is not available at the time
CDevProc is executed.

Since this only affects substitution of fonts its arguable that the CDevProc is useless
in its original intent anyway. 

This patch detects a CIDFont being replaced by a TrueType font by checking the font
type is type 11 (CIDFont with TT outlines), that the font dictionary contains a key
called /File (has been read from disk) and that the font_name and key_name strings
are different (substituted font).

In this case we ignore the CDevProc routine, and simply use the original widths from 
the TrueType font. The widths won't be the same as requested by the job, but then 
neither are the glyphs. For this job, because the widths of the TrueType glyphs are
sensible, the result is an improvement in the output.

[psi/zcharout.c]

2009-11-16T17:01:59.813716Z Ken Sharp

Details
After revision 8465 it is no longer possible for
show_state_setup in gxchar.c to alter the value of 'can_cache' but a comment in 
gx_default_text_begin still said that it may do so.

Removed the misleading comment.

[base/gxchar.c]

2009-11-16T16:48:21.437679Z Ken Sharp

Fix (TT fonts) : regression with TrueType fonts

Details:
Bug #690642 "conversion to PDF aborts after 800 pages"
Bug #690921 "Regression: /invalidaccess in --run-- starting with r9897"

The patch for #690642 was an interim fix which was known to have flaws and was supposed
to be revisited to fix them. Unfortunately a file appeared which exhibited an attempt to
put a key in a read-only dictionary before this was done.

This patch resolves both issues by removing the need for a temporary key (hence we no
longer write into a read-only dictionary) and also removes some ugliness (and slight
performance penalty) by not creating a dict from the stack, patching the dict, and
loading its contents back to the stack.

[Resource/Init/pdf_font.ps Resource/Init/gs_ttf.ps]

2009-11-14T18:20:52.369823Z Robin Watts

Bug fix for Bug 688604, "incorrect rendering of a returning curve".

The code currently in ghostscript checks for the bbox of a beziers control
points being of zero width/height and to avoid a division by zero just chooses
not to subdivide this curve. This is wrong in some cases.

The fix here is a cheap and cheerful one; in the case where one dimension is
zero and the other isn't, we basically do the same calculation as would be
done in the two dimensional case, but just with a one dimensional distance
as input.

This causes various diff; all look good in my tests.

[base/gxpcopy.c]

2009-11-13T00:16:47.523271Z Robin Watts

This patch fixes Bug 688269, by making ghostscript use pie joins rather than
round ones when stroking in non CPSI_mode.

This produces 3000 or so bitmap diffs, but after leaving my machine running
all night generating lots of diffs for me to examine this morning, they all
look like stray pixel changes (i.e. differences caused by rounding).


[base/gxstroke.c]

2009-11-11T17:42:22.705154Z Robin Watts

Final msvc makefile changes to make ghostPDL targets build with the new
libtiff stuff.

[/trunk/ghostpdl/svg/svg_msvc.mak base/gs.mak]

2009-11-11T15:50:28.792827Z Lars Uebernickel

Changed all tiff devices to use libtiff.

Affected Devices are tiffgray, tiff12nc, tiff24nc, tiff32nc, tiffsep, tiffsep1,
tiffcrle, tiffg3, tiffg32d, tiffg4, tifflzw, and tiffpack.  Also, two new
devices: tiff48nc and tiff64nc (16 bits per component rgb and cmyk respectively)
have been added.

Libtiff 3.9.2 is included in the source tree as tiff/.  It is possible to link
to the system's libtiff by passing --with-system-libtiff to configure.  Passing
--without-system-libtiff will force the build to use the in-source version. By
default, the newer library (based on TIFFLIB_VERSION in tiffvers.h) is used.

[tiff/libtiff/tif_predict.c tiff/contrib/addtiffo/tif_ovrcache.c tiff/html/images/bali.jpg tiff/libtiff/tif_predict.h tiff/man/tiffdither.1 tiff/contrib/addtiffo/tif_ovrcache.h tiff/libtiff/tiffconf.h tiff/libtiff/tif_apple.c tiff/html/v3.7.1.html tiff/html/v3.5.7.html tiff/test/check_tag.c tiff/man tiff/contrib/iptcutil/iptcutil.c tiff/html/addingtags.html tiff/contrib/dbs/tiff-palette.c tiff/html/man/TIFFbuffer.3tiff.html tiff/html/index.html tiff/contrib/win_dib/Tiffile.cpp base/gdevtifs.c base/gxcmap.c tiff/config/install-sh tiff/man/TIFFReadRGBATile.3tiff base/gdevtifs.h tiff/html/man/tiffsplit.1.html tiff/html/man/TIFFPrintDirectory.3tiff.html tiff/contrib/tags/xtif_dir.c tiff/contrib/stream/README tiff/contrib/acorn/SetVars tiff/contrib/mac-mpw/mactrans.c tiff/contrib/mfs/mfs_file.c tiff/test/short_tag.c tiff/tools/fax2tiff.c tiff/config/depcomp tiff/html/man/TIFFReadScanline.3tiff.html tiff/contrib/tags tiff/contrib/ras/Makefile.am tiff/libtiff/tif_aux.c tiff/libtiff/tif_packbits.c tiff/libtiff/tif_zip.c tiff/html/v3.5.4.html tiff/man/TIFFbuffer.3tiff tiff/contrib/mac-cw tiff/contrib/acorn/Makefile.am tiff/html/man/TIFFmemory.3tiff.html tiff/html/v3.5.6-beta.html tiff/m4/ltsugar.m4 tiff/tools/ycbcr.c tiff/html/man/TIFFRGBAImage.3tiff.html tiff/man/TIFFWriteRawStrip.3tiff tiff/html/v3.4beta007.html tiff/libtiff/tif_unix.c tiff/html/man/tiffinfo.1.html tiff/html/man/tiffset.1.html tiff/tools/rasterfile.h tiff/html/man/TIFFFlush.3tiff.html tiff/man/tiffdump.1 tiff/contrib/dbs/tiff-rgb.c tiff/contrib/dbs/Makefile.in tiff/html/man/fax2tiff.1.html tiff/contrib/mac-cw/mkg3_main.c tiff/contrib/win_dib/Makefile.in tiff/configure.com tiff/html/man/TIFFReadRGBAStrip.3tiff.html tiff/html/man/sgi2tiff.1.html tiff/tools/tiff2ps.c tiff/html/v3.5.1.html tiff/html/intro.html tiff/libtiff/tif_atari.c tiff/html/v3.8.0.html tiff/contrib/dbs/README tiff/config tiff/libtiff/tiffiop.h tiff/html/internals.html tiff/html/images/cover.jpg tiff/html/build.html tiff/libtiff/tiffconf.h.in tiff/html/man/TIFFWarning.3tiff.html tiff/contrib/mac-cw/metrowerks.note tiff/man/TIFFReadEncodedStrip.3tiff tiff/man/tiff2bw.1 tiff/HOWTO-RELEASE tiff/man/tiff2pdf.1 tiff/man/tiffsplit.1 tiff/html/man/TIFFcodec.3tiff.html tiff/man/bmp2tiff.1 tiff/html/v3.4beta016.html tiff/tools/fax2ps.c tiff/html/libtiff.html tiff/html/v3.4beta028.html tiff/html/man/tiffmedian.1.html tiff/html/man/TIFFWriteRawTile.3tiff.html tiff/man/TIFFError.3tiff tiff/tools/tiffmedian.c tiff/man/rgb2ycbcr.1 tiff/libtiff/uvcode.h tiff/html/images/dave.gif tiff/man/TIFFWriteEncodedStrip.3tiff tiff/html/man/Makefile.in tiff/contrib/dbs/xtiff/Makefile.am tiff/config/config.sub tiff/libtiff/Makefile.vc tiff/libtiff/tif_fax3.c tiff/man/TIFFWarning.3tiff tiff/tools/tiffgt.c tiff/man/TIFFWriteScanline.3tiff tiff/html/v3.9.2.html tiff/SConstruct tiff/contrib/tags/Makefile.am tiff/contrib/acorn/install tiff/libtiff/tif_fax3.h tiff/contrib/pds/tif_pdsdirwrite.c tiff/contrib/mac-mpw/Makefile.am tiff/man/TIFFcodec.3tiff tiff/man/tiffsv.1 tiff/html/Makefile.am tiff/contrib/mac-mpw/tools.make tiff/html/images/oxford.gif tiff/html/man/TIFFsize.3tiff.html tiff/contrib/iptcutil/Makefile.in tiff/html/man/TIFFReadEncodedTile.3tiff.html tiff/contrib/ras/tif2ras.c tiff/configure tiff/html/images/note.gif tiff/contrib/mfs/README tiff/html/man/tiff2bw.1.html tiff/config/mkinstalldirs tiff/libtiff/tif_jpeg.c psi/msvc32.mak tiff/test/Makefile.am tiff/html/man/TIFFGetField.3tiff.html tiff/m4/ltoptions.m4 tiff/html/man/TIFFReadRGBATile.3tiff.html tiff/libtiff/libtiff.def tiff/contrib/tags/listtif.c tiff/man/raw2tiff.1 tiff/html/v3.7.0beta.html tiff/tools/tiffdump.c tiff/html/man/TIFFWriteEncodedTile.3tiff.html tiff/man/ppm2tiff.1 tiff/html/v3.6.0.html tiff/contrib/addtiffo/Makefile.vc base/unix-gcc.mak tiff/man/TIFFDataWidth.3tiff tiff/contrib/mfs/Makefile.in tiff/contrib/pds/Makefile.in tiff/tools/Makefile.am tiff/contrib/dbs/tiff-bi.c tiff/contrib/iptcutil/test.iptc tiff/man/TIFFcolor.3tiff tiff/html/man/TIFFWriteScanline.3tiff.html tiff/man/tiff2rgba.1 tiff/contrib/addtiffo tiff/contrib/acorn/convert tiff/html/v3.4beta034.html tiff/tools/tiff2pdf.c tiff/port/libport.h tiff/html/man/TIFFSetDirectory.3tiff.html tiff/man/tiff2ps.1 base/devs.mak tiff/tools/bmp2tiff.c tiff/contrib/iptcutil/test.txt tiff/RELEASE-DATE tiff/contrib/iptcutil tiff/html/man/TIFFReadTile.3tiff.html tiff/test/strip.c tiff/man/libtiff.3tiff tiff/libtiff/tif_win32.c tiff/html/v3.7.2.html tiff/libtiff/tif_ojpeg.c tiff/html/contrib.html tiff/build/Makefile.am tiff/html/man/tiffcmp.1.html tiff/html/man/TIFFClose.3tiff.html tiff/html/man/TIFFquery.3tiff.html tiff/html/TIFFTechNote2.html tiff/html/images/ring.gif tiff/test tiff/libtiff/tif_config.h-vms tiff/html/v3.4beta031.html tiff/contrib/mfs tiff/contrib/win_dib/tiff2dib.c tiff/man/TIFFswab.3tiff tiff/html/images/Makefile.in tiff/contrib/mac-mpw/libtiff.make tiff/contrib/mac-cw/mac_main.c tiff/man/thumbnail.1 tiff/libtiff/tiff.h tiff/port/lfind.c tiff/libtiff/Makefile.in tiff/contrib/mac-cw/mac_main.h tiff/libtiff/tif_strip.c tiff/tools/raw2tiff.c tiff/html/v3.5.5.html tiff/TODO tiff/man/TIFFWriteTile.3tiff tiff/tools/ppm2tiff.c tiff/port/strcasecmp.c tiff/man/TIFFReadEncodedTile.3tiff tiff/html/man/tiffdither.1.html tiff/tools/sgisv.c tiff/contrib/tags/xtiffiop.h tiff/man/tiffmedian.1 tiff/libtiff/tif_config.h.in tiff/contrib/addtiffo/addtiffo.c tiff/html/images/quad.jpg tiff/html/images/warning.gif tiff/html/man/tiffsv.1.html tiff/html/images/cat.gif tiff/man/tiffcp.1 tiff/man/tiffcrop.1 tiff/man/TIFFReadRGBAStrip.3tiff tiff/libtiff/tif_version.c tiff/ChangeLog base/gdevtfnx.c tiff/test/long_tag.c tiff/port/Makefile.am tiff/man/TIFFSetField.3tiff tiff/man/Makefile.in tiff/libtiff/tif_swab.c tiff/build tiff/contrib/addtiffo/Makefile.in tiff/html/v3.5.2.html tiff/configure.ac tiff/html/man/TIFFWriteEncodedStrip.3tiff.html tiff/html/v3.8.1.html tiff/contrib/stream/Makefile.am tiff/man/TIFFmemory.3tiff tiff/man/TIFFsize.3tiff tiff/Makefile.am tiff/contrib/Makefile.am tiff/html/images tiff/autogen.sh base/winlib.mak tiff/libtiff/tif_jbig.c tiff/man/tiffinfo.1 tiff/libtiff/tif_extension.c tiff/html/images/smallliz.jpg tiff/port/strtoul.c tiff/html/man/TIFFReadEncodedStrip.3tiff.html tiff/html/man/fax2ps.1.html base/configure.ac tiff/VERSION tiff/contrib/mac-cw/Makefile.script tiff/man/TIFFWriteEncodedTile.3tiff tiff/html/v3.4beta029.html tiff/contrib/mac-cw/Makefile.in tiff/man/ras2tiff.1 tiff/libtiff/t4.h tiff/README tiff/contrib/README tiff/html/man/tiff2ps.1.html tiff/contrib/tags/maketif.c tiff/contrib/win_dib/README.tiff2dib tiff/html/man/rgb2ycbcr.1.html tiff/contrib/mac-mpw/BUILD.mpw tiff/html/man/tiffgt.1.html tiff/html/man/TIFFReadDirectory.3tiff.html base/gxdevice.h tiff/libtiff/tif_warning.c tiff/html/v3.7.0alpha.html tiff/tools/tiffcmp.c tiff/html/images/strike.gif tiff/contrib/stream/tiffstream.cpp tiff/contrib/ras/README tiff/html/man/TIFFcolor.3tiff.html tiff/tools/tiffset.c tiff/contrib/dbs/xtiff tiff/contrib/pds/tif_pdsdirread.c tiff/contrib/stream tiff/contrib/tags/xtiffio.h tiff/html/man/tiffcrop.1.html tiff/tools/tiffcrop.c tiff/port/dummy.c tiff/contrib/mac-mpw/port.make tiff/man/TIFFReadRawTile.3tiff tiff/html/man/TIFFtile.3tiff.html tiff/html/v3.6.1.html tiff/libtiff/tif_fax3sm.c tiff/html tiff/contrib/ras/Makefile.in tiff/libtiff/tif_close.c tiff/libtiff/tif_luv.c tiff/man/gif2tiff.1 tiff/html/man/libtiff.3tiff.html tiff/libtiff/tif_config.h tiff/contrib/pds/tif_imageiter.c tiff/man/TIFFPrintDirectory.3tiff tiff/contrib/dbs/Makefile.am tiff/libtiff/tif_flush.c tiff/contrib/win_dib/Makefile.am tiff/contrib/acorn/Makefile.in tiff/contrib/pds/tif_imageiter.h tiff/tools/Makefile.vc tiff/html/v3.4beta035.html tiff/contrib/stream/tiffstream.h tiff/libtiff/mkg3states.c tiff/tools/tiffinfo.c tiff/tools/tiffsplit.c tiff/contrib/pds tiff/contrib/win_dib/README.Tiffile tiff/man/TIFFReadDirectory.3tiff tiff/html/v3.9.0beta.html tiff/tools tiff/tools/rgb2ycbcr.c tiff/tools/ras2tiff.c tiff/html/images/cramps.gif tiff/m4/libtool.m4 tiff/html/v3.7.3.html tiff/html/tools.html tiff/COPYRIGHT base/libtiff.mak tiff/man/TIFFReadRGBAImage.3tiff tiff/contrib/win_dib/Makefile.w95 tiff/libtiff/tif_thunder.c tiff/html/man/TIFFReadRawStrip.3tiff.html tiff/man/fax2ps.1 tiff/libtiff/tif_lzw.c tiff/man/TIFFSetDirectory.3tiff tiff/html/man/TIFFReadRGBAImage.3tiff.html tiff/contrib/acorn/Makefile.acorn tiff/libtiff/tif_color.c tiff/m4 tiff/man/TIFFGetField.3tiff tiff/html/v3.4beta032.html tiff/libtiff/tif_win3.c tiff/html/man/TIFFWriteDirectory.3tiff.html tiff/contrib/ras tiff/libtiff/SConstruct tiff/man/sgi2tiff.1 tiff/html/man/Makefile.am tiff/contrib/iptcutil/README tiff/libtiff/tif_dirwrite.c tiff/build/README tiff/libtiff/tif_dirinfo.c tiff/libtiff/tif_write.c tiff/config/compile tiff/man/tiffgt.1 tiff/libtiff/tif_tile.c tiff/README.vms tiff/html/misc.html tiff/html/v3.7.0.html tiff/man/tiffcmp.1 tiff/libtiff/tif_open.c tiff/contrib/iptcutil/Makefile.am tiff/test/strip_rw.c tiff/contrib/dbs/xtiff/Makefile.in tiff/libtiff/tiffconf.vc.h tiff/contrib/win_dib tiff/man/tiffset.1 tiff/contrib/tags/Makefile.in tiff/libtiff/tif_config.wince.h tiff/tools/gif2tiff.c tiff/contrib/mac-mpw/Makefile.in tiff/contrib/dbs/xtiff/README tiff/libtiff/tiffio.h tiff/html/Makefile.in tiff/tools/tiff2rgba.c tiff/html/man/tiffcp.1.html tiff/contrib/mfs/Makefile.am tiff/contrib/acorn/ReadMe tiff/contrib/pds/Makefile.am tiff/man/TIFFstrip.3tiff tiff/html/man/TIFFswab.3tiff.html tiff/test/Makefile.in tiff/html/v3.5.3.html tiff/html/man/TIFFSetField.3tiff.html tiff/contrib/dbs/xtiff/patchlevel.h tiff/html/v3.8.2.html tiff/html/man/TIFFOpen.3tiff.html tiff/contrib/dbs/xtiff/xtifficon.h tiff/libtiff/tiffconf.wince.h tiff/port/getopt.c tiff/html/images/info.gif tiff/port/Makefile.vc tiff/contrib/addtiffo/tif_overview.c tiff/tools/tiffdither.c tiff/tools/pal2rgb.c tiff/html/images.html tiff/libtiff/tif_dumpmode.c tiff/html/man/TIFFWriteTile.3tiff.html tiff/aclocal.m4 tiff/config/missing tiff/html/man tiff/libtiff/tif_dir.c tiff/tools/Makefile.in tiff/Makefile.vc tiff/port tiff/html/man/tiff2pdf.1.html tiff/libtiff/tif_dir.h tiff/html/v3.4beta018.html tiff/html/man/tiff2rgba.1.html tiff/libtiff/tif_msdos.c base/gdevfax.c tiff/html/man/index.html tiff/contrib/dbs/tiff-grayscale.c tiff/contrib/dbs/xtiff/xtiff.c tiff/html/images/jim.gif base/gdevfax.h tiff/libtiff/tif_print.c tiff/tools/sgi2tiff.c tiff/man/TIFFOpen.3tiff tiff/contrib tiff tiff/contrib/mac-mpw tiff/config/ltmain.sh tiff/contrib/mac-cw/README tiff/tools/thumbnail.c tiff/libtiff/tiffio.hxx tiff/man/TIFFReadRawStrip.3tiff tiff/html/man/ppm2tiff.1.html tiff/contrib/acorn/cleanlib tiff/man/TIFFRGBAImage.3tiff tiff/html/images/back.gif tiff/libtiff/tif_read.c tiff/libtiff/tif_stream.cxx tiff/man/TIFFWriteDirectory.3tiff tiff/libtiff/tif_codec.c tiff/build/Makefile.in tiff/html/images/Makefile.am tiff/contrib/mac-cw/version.h tiff/test/ascii_tag.c tiff/libtiff/tif_pixarlog.c tiff/man/TIFFReadTile.3tiff tiff/libtiff/Makefile.am tiff/html/man/TIFFWriteRawStrip.3tiff.html tiff/contrib/tags/README tiff/libtiff/tif_error.c tiff/man/TIFFtile.3tiff tiff/nmake.opt tiff/libtiff/tif_compress.c tiff/libtiff/tiffvers.h tiff/html/man/TIFFError.3tiff.html tiff/html/man/tiffdump.1.html tiff/html/man/ras2tiff.1.html tiff/man/TIFFClose.3tiff tiff/man/TIFFquery.3tiff base/Makefile.in tiff/html/man/raw2tiff.1.html tiff/html/v3.9.1.html tiff/html/man/TIFFReadRawTile.3tiff.html tiff/m4/lt~obsolete.m4 tiff/html/man/pal2rgb.1.html tiff/libtiff/tif_dirread.c tiff/contrib/mac-mpw/top.make tiff/man/TIFFFlush.3tiff tiff/html/v3.7.0beta2.html tiff/man/TIFFWriteRawTile.3tiff tiff/html/v3.4beta024.html tiff/contrib/pds/README tiff/man/fax2tiff.1 tiff/libtiff/tif_getimage.c tiff/man/Makefile.am tiff/html/v3.4beta036.html tiff/man/TIFFReadScanline.3tiff doc/Devices.htm tiff/contrib/addtiffo/Makefile.am tiff/tools/tiffcp.c tiff/html/images/jello.jpg tiff/contrib/mac-mpw/README tiff/config/config.guess tiff/test/test_arrays.c tiff/contrib/acorn base/gs.mak tiff/man/pal2rgb.1 tiff/html/man/thumbnail.1.html tiff/libtiff/tif_acorn.c tiff/test/test_arrays.h tiff/html/man/TIFFstrip.3tiff.html tiff/html/v3.7.4.html tiff/port/Makefile.in tiff/html/bugs.html tiff/contrib/dbs base/gdevtfax.c tiff/contrib/addtiffo/README tiff/contrib/stream/Makefile.in tiff/html/man/TIFFDataWidth.3tiff.html tiff/libtiff tiff/contrib/mac-cw/Makefile.am tiff/contrib/ras/ras2tif.c tiff/libtiff/tif_next.c tiff/html/man/gif2tiff.1.html tiff/contrib/Makefile.in tiff/Makefile.in tiff/html/v3.4beta033.html tiff/html/support.html tiff/libtiff/tif_config.vc.h tiff/m4/ltversion.m4 tiff/tools/tiff2bw.c base/gdevtsep.c tiff/html/document.html tiff/m4/acinclude.m4]

2009-11-11T15:01:20.119636Z Hin-Tak Leung

silent two compiler warnings for casting from const to non-const introduced by r10313

[base/gdevpx.c]

2009-11-11T14:53:05.840060Z Hin-Tak Leung

partly reverting r8576, and other file-size improvements.

After r10313, it becomes possible to revert r8576 (which was
a work-around to bug 688992, but increases file-sizes in some cases). 
It is also found that r8576 is in fact more efficient for 
small rasters; so it is only partly reverted. In two other places where
write_image_data() is called, switching to gx_default_copy_* for single-line
images/masks is likely to work well also. 

This fixes bug 690857, where 12-07C.PS uses a lot of 1-bit images,
and shrinks the file size by a factor of 4. 

There are a total of 4 places where write_image_data() is called
(copy_mono/copy_color/fill_masks/image_write_rows) - the 4th does
not use the data_bit field, nor is it likely to be called
with small rasters; so it is left unmodified.

[base/gdevpx.c]

2009-11-11T14:26:17.282201Z Till Kamppeter

The cups_map_cmyk() function applied density corrections to RGB values. They can only get applied to CMYK values. Fixed by applying the cupsDensity correction before converting CMYK to RGB.

[cups/gdevcups.c]

2009-11-11T13:53:23.399755Z Hin-Tak Leung

handles the case of data_bit being multiple of 8.

Try to handle the case of data_bit being multiple of 8 This fixes 690862,
and also make it possible to revert r8576 (which was a work-around to 
bug 688992, but increases file-size) to fix bug 690857 (file-size issue).

Non-multiple of 8 are not handled, but by-passed at the callers'.

[base/gdevpx.c]

2009-11-11T13:52:23.912583Z Alex Cherepanov

Increase the size of the initial buffer in the scanner dynamic area to accept
the string of maximum valid size. Protect the buffer from overflow when the
scanner state is saved during reading of a name that exceed max name length.
Bug 690902.

[psi/iscan.c psi/int.mak psi/iscan.h]

2009-11-11T13:37:03.631859Z Hin-Tak Leung

caching SetPen/SetBrush Null calls

For some test files (the PS3 CET set), the pxlcolor/pxlmono code
emits a lot of setpen/setbrush nulls. There is no need to set it again
if the printer already got a previous setpen/brush null. So this patch
caches the null/non-null state of both pen and brush in the
driver and not re-issue set nulls if the last set was a null.

This only gives about 5% file size saving for the test file I wrote it
for. Part of the fix to bug 690857.

[base/gdevpx.c]

2009-11-11T09:51:26.353930Z Ken Sharp

Fix (pdfwrite) : correct introduced regression 

Details
Bug #690906 "Regression: Several PostScript CET files hang pdfwrite"
Revision 10297 failed to check the return value from next_char_glyph for composite fonts
because the fact that an error return was possible was hidden inside a macro.

Adding error return checking resolves the problem

[base/gdevpdtt.c]

2009-11-10T20:44:18.431838Z Hin-Tak Leung

fix (signed 16-bit)0 problem with r10267, and separate signed/unsigned numbers.

r10267 'write signed 16-bit integers properly' contains a mistake with ">" 
(should be ">=") - it puts (signed 16-bit)0 as 32768. Historically, 
the old code does 16-bit integers unsigned eventually. This current change 
also separate signed and unsigned numbers. Apologies.

[base/gdevpxut.h]

2009-11-09T23:41:11.015200Z Hin-Tak Leung

implements white on mask (and added black on mask) in copy_mono.

This adds white on mask as mask=black and (D & ~S) | S . 
Black on mask is treated specially as (S & D). Fixes bug 688372
(which uses white on mask) and 690830 (which uses black on mask)
and 690025 (which uses both white on mask and black on mask).

[base/gdevpx.c]

2009-11-09T20:55:30.861525Z Hin-Tak Leung

reverting r8733, which was a faulty fix to bug 688372.

reverting most of r8733 (except the two debug statements), which was
a faulty fix to bug 688372. The faulty fix seems to be the source of
bug 690861 and 690868. The correct fix to 688372 to follow.

[base/gdevpx.c]

2009-11-09T20:20:51.490553Z Hin-Tak Leung

purge cached palette whenever color space changes.

The current pxlmono/pxlcolor code caches colorspace and palette calls
and not re-transmitting them if it hasn't changed since the last time
they were set. Whenever the color space changes, the current palette
should be purged, and a new palette should be (re-)transmitted to
the printer the next time an indexed colored image is sent.
This fixes bug 690859.

[base/gdevpx.c]

2009-11-09T18:42:04.818284Z Alex Cherepanov

Buffer mask data source in a reusable stream when needed for type 3 image with
separate data sources. Check all possible combinations of data source types and
fix a bunch of bugs in the code that handles cases untested before. Bug 688389.

[Resource/Init/gs_ll3.ps]

2009-11-09T16:04:58.791370Z Ken Sharp

Fix (pdfwrite) : type 0 fonts with type 3 descendants could confuse pdfwrite by using
stringwidth

Details
Bug #690875 "Ghostscript locks up writing PDF file"
There is code in gdev_pdf_text_begin which skips caching of type 3 glyphs when using
stringwidth. This prevents glyphs becoming bitmapped and ensures that pdfwrite and
the glyph cache are coherent.

The code did not check for composite fonts using type 3 descendants. In this case if a
job used some glyphs for stringwidth, then later used at least one of those glyphs and
one glyph not previously encountered in a single string pdfwrite would enter an
endless loop.

pdfwrite would notice that a glyph was not marked as 'used' in its internal cache, and
exit pdf_text_process to run the outline for the first glyph. GS would note that the
first glyph was already cached (from the stringwidth) and move on to the next glyph.
GS would render that glyph, pdfwrite would capture it and mark that character code as
used.

On returning to pdf_text_process the first glyph should be marked as used now, but it
was not, so pdfwrite would once again exit and the loop would repeat.

Fixed by checking string using composite fonts to see if any glyph used a type 3
descendant, and disabling caching if it does.

[base/gdevpdtt.c]

2009-11-09T14:19:54.384020Z Robin Watts

Adding comment as suggested by Hin-Tak to document why we need a particular
header file.

[base/gdevpx.c]

2009-11-09T14:15:32.309537Z Robin Watts

Fix to devs.mak: PXL requires a runlength compression function from PCL, so
correctly add the dependency to the makefile.

This issue was seen when building using macosx.mak on a Snow Leopard Macbook.

Maybe in future if codesize is an issue we should pull this function out to a
separate file.

[base/devs.mak]

2009-11-08T00:40:19.198456Z Robin Watts

Fix for valgrind problem in bug 690864.

We were scaling the bbox of a path even when the bbox had never been set.
The fix is to respect the bbox_set flag.

[base/gxpath2.c]

2009-11-07T17:31:12.980350Z Alex Cherepanov

Adobe Acrobat considers the use of clip operation on new path a no-op.
Check this and don't clip when there's no path. Bug 690891.

DETAILS:
Besides the change in clipping, this patch reverts the code that preserves
current point position after fill operations and interferes with new path
detection. Reverted code predates source control and its purpose is not clear.
Perhaps, it was an attempt to avoid nocurrentpoint errors, which are now
trapped and handled.

[Resource/Init/pdf_ops.ps]

2009-11-07T02:31:37.642669Z Ray Johnston

Save and restore the graphics state around the dummy fill that was added in
rev 10284 in order to make sure that pages have at least one fill_path call.
The 'copypage' operator does not perform initgraphics so the FTS test that
expected the graphics state to be unperturbed by copypage would fail.
Bug 690894. Thanks to Alex for spotting the cause of the regression.

[base/gsdevice.c]

2009-11-06T20:40:48.453064Z Robin Watts

Fix for bug 690890. We always use the CPSI_mode version of the gs_strokepath
code (when executing strokepath or ustrokepath postscript operators). This
means we better match acrobat.

This frees us to optimise the non CPSI_mode version so as to produce simpler
stroked paths with the same outlines. This should allow us to be faster in
the non strokepath cases.

[base/gxpaint.c base/gspath.h base/gxpaint.h /trunk/ghostpdl/xps/xpspath.c base/gspaint.c base/gxstroke.c base/gxclrast.c]

2009-11-06T14:23:40.138345Z Alex Cherepanov

Clamp coordinates when the path is scaled up for anti-alias rendering.
Leave 1000pt slack at the edge because the path drawing routines can't
handle values close to the edge of the representable space. Bug 690864.

[base/gxpath2.c]

2009-11-05T23:35:59.860092Z Robin Watts

Update htmldiff.pl to cope with svg files (and pdfwrite svg files).
Also update the invocation of .PS files to use gs_cet.ps


[toolbin/htmldiff.pl]

2009-11-05T22:24:30.858232Z Ray Johnston

This is the initial commit of the 'tiffsep1' device code that emits
separation files as 1-bit per pixel TIFF files, a separate file for
each separation. This is a CMYK plus Spot color device, and the
number of separations (spot colors) supported depends on the gdevdevn.h
setting of USE_COMPRESSED_ENCODING. By default this is true as long as
the sizeof(gx_color_index) is >= 8, so up to GX_DEVICE_COLOR_MAX_COMPONENTS
layers can be generated (current default 64). Without compressed color
encoding, then only 8 total (C, M, Y, K and 4 spot colors) can be
supported.

Files are named with the separation layer in ( ), e.g. x(Black).tif if
the OutputFile is 'x.tif'. Since no composite CMYK is generated, the
base file is deleted ('x.tif' in the example).

DETAILS:

This device uses a hook of the 'fill_path' device call to collect the
threshold arrays from the imager state. In case a file does not perform
a 'fill' operations, the gsdevice.c code does a dummy fill of an empty
path to allow the 'sep1_fill_path' code to convert the 'order' into
threshold arrays.s

The 'open' and 'put_params' device functions are modified to make sure
that if the clist device is being used, the 'sep1_fill_path' proc will
be re-hooked (the clist initialization overwrites some procs including
the 'fill_path' proc). The sep1_fill_path then forwards to whatever
fill_path proc was set by the gdev_prn_open or put_params.

A later commit will move the 'thresholds_from_order' function to another
common file (probably gsht1.c) and change it to generate a threshold
array of type 'gs_threshold_halftone' with NULL transfer and closure
functions. This function is in gdevtsep.c now since it is the only
device that needs it (for now) and development was easier with all
changes more or less localized (at least non-trivial ones).

The make files are modified so that the 'tiffsep1' device is included
by default (where the tiffsep device is included).

The actual halftoning is done using 32-bit writes of the dithered line
since testing showed this to be 27% faster (although more complex).

Note that the compressed color encoding (the current default) is about
half the throughput compared to direct encoding. Users that are sensitive
to performance (who isn't) and that only need 8 or less total colors
(CMYK plus 4 spot colors) will want to turn compressed color encoding
off.

[base/gsdevice.c psi/os2.mak base/bcwin32.mak base/openvms.mak base/watcw32.mak base/Makefile.in base/gdevtsep.c base/configure.ac base/unix-gcc.mak base/unixansi.mak psi/msvc32.mak base/macos-mcp.mak base/devs.mak]

2009-11-05T17:01:01.144368Z Marcos H. Woehrmann

Add support for only testing only langauges which were affected by a commit.

[toolbin/localcluster/splitjobs.pl toolbin/localcluster/clustermaster.pl toolbin/localcluster/readlog.pl toolbin/localcluster/build.pl toolbin/localcluster/clusterpush.pl toolbin/localcluster/run.pl toolbin/localcluster/compare.pl]

2009-11-05T08:14:47.560103Z Hin-Tak Leung

updating the internal graphic state as in the else part; 2nd half of fix to bug 690853

[base/gdevpx.c]

2009-11-03T23:43:48.930105Z Ralph Giles

Fix a const propagation warning.

Also remove some trailing whitespace.

[base/gdevp14.c]

2009-11-03T23:43:47.356550Z Ralph Giles

Remove some unused variables from the PDF 1.4 compositor device,
fixing several warnings. Also cleans up some formatting.

[base/gdevp14.c]

2009-11-03T23:43:45.299604Z Ralph Giles

Move some static prototypes from gdevp14.h to gdevp14.c.

These two functions, internal to gdevp14.c, need forward prototypes
but where declared in the public header, causing gcc warnings when
the declarations where included in other source files.

[base/gdevp14.c base/gdevp14.h]

2009-11-03T17:54:36.738828Z Hin-Tak Leung

revert to PXL 1.1 - it is possible some old printers dislike PXL 2.1 header

[base/gdevpxut.c]

2009-11-03T16:59:25.556772Z Alex Cherepanov

Fix a line split without the '\' at the end of the line. By some reason gmake
tolerates this but MSVC nmake doesn't. Bug 690886, customer 661.

[base/lib.mak]

2009-11-03T14:39:04.429643Z Hin-Tak Leung

Use SetPageScale and SetPageOrigin to work around 16-bit limit in paths.

This is a similar but more extensive change to the last (16-bit limit in 
SetCursor), which use SetpageScale to make path co-ordinates fit within 
16-bit. In so doing some paths can become inaccurate if one of the
points are not large; so SetPageOrigin is used to shift to one such point
before the scaling. This is the last part to fix bug 690858 and bug 690860 .

[base/gdevpx.c]

2009-11-03T14:06:53.986640Z Hin-Tak Leung

Use SetPageScale to work around 16-bit limit in SetCursor.

Here SetPageScale is used so that large cursor co-ordinates can fit 
within 16-bit signed integer limit. This fixes bigpath.ps in
bug 690855, and also fixes some of the problems seen in bug 690858 and 
bug 690860. 

[base/gdevpx.c]

2009-11-03T13:54:22.932026Z Hin-Tak Leung

new SetPageScale/Unset utility routine before the fix to bug 690858

[base/gdevpx.c]

2009-11-03T13:50:17.551314Z Hin-Tak Leung

new SetPageOrigin utility routine before the fix to bug 690858

[base/gdevpx.c]

2009-11-03T13:41:54.478161Z Hin-Tak Leung

fixes age-old typo.

This appears to be a typo - the gray conversion code is doing
out = (red + green + next_red) instead of (red + green + blue).

[base/gdevpx.c]

2009-11-03T13:36:48.031673Z Hin-Tak Leung

write signed 16-bit integers properly.

The pxl utlity code has never been able to write negative numbers as 
signed 16-bit integers properly. This fixes bug 690863 primarily, and also 
some of the problems seen in bug 690858, file  CATX8874.pdf mentioned 
in bug 690859, and part of the problems in bug 690860.

[base/gdevpxut.h base/gdevpxut.c]

2009-11-03T13:20:30.378093Z Hin-Tak Leung

Do rounding of co-ordinates rather than clipping.

This set of change tries to calculating the co-ordinates more accurately by
doing rounding of fractional parts instead of clipping off the fractional 
parts. This is part of the fix to bug 690869. Also needs -r1200 to work 
for the intended purpose of matching with ppmraw output.

[base/gdevpx.c]

2009-11-03T13:14:51.306299Z Hin-Tak Leung

Tightening the standard media size matching.

Drop the tolerance to 0.05 from 5/72 of an inch.
One of the test files is 36-pixels @r600 within a standard size.
Fixes bug 690866.

[base/gdevpxut.c]

2009-11-03T12:59:24.143346Z Hin-Tak Leung

flush stream data in close_device().

For a whole set of postscript files (the ps3cet set), the close_device() 
finalizer code is called before the PXL output is flushed. This causes 
the PJL job footer to be outputted in the middle of the last portion of 
PXL output, thus corrupting the PXL data. Adding a flush fixes this problem. 
Fixes one of the many problems in bug 690858.

[base/gdevpx.c]

2009-11-03T12:50:17.079568Z Hin-Tak Leung

Removes two redundant SetBrushSource black

The two SetBrushSourcewas introduced by:

r8732: marcos - Add support to pxlcolor and pxlmono for 24 bpp images.

After r8732, whenever one tries to output an image, the brush color is reset to
black. This affects later drawings that relies on a non-black brush color being
set previously and still considered being active. Fixes bug 690853.

[base/gdevpx.c]

2009-11-03T06:21:49.323464Z Ralph Giles

Add missing return type and static scope to the definitions of
pdf14_push/pop_transparency_state. Fixes a gcc warning.

[base/gdevp14.c]

2009-11-03T05:27:32.955847Z Ralph Giles

Include the implicitly required headers for gxpcolor.h in gdevp14.h.

This declares dev_color_proc_save_dc and related function pointers
before use, correcting a serious gcc warning and fixing compilation
on AIX 5.3 TL 8 SP2. Bug 690883.

[base/lib.mak base/gdevp14.h]

2009-11-02T17:36:56.958032Z Alex Cherepanov

When a stream error occurs, Ghostscript sometimes print a spurious "Additional
information" line containing uninitialized data as part of the error message.
Initialize error_string in s_init_state to fix this. Thanks to
Michael Constant for the patch. Bug 690874.

[base/stream.c]

2009-11-02T16:24:35.721695Z Marcos H. Woehrmann

Add psdcmyk to regression testing (currently only at 72/75 dpi).

[toolbin/localcluster/build.pl]

2009-11-02T05:21:28.471147Z Marcos H. Woehrmann

Quiet Ubuntu 9.10 gcc/ld warning:

./obj/gdevpsft.o: In function `T.107':
gdevpsft.c:(.text+0x992): warning: memset used with constant zero length parameter; this could be due to transposed parameters

[base/gdevpsft.c]

2009-11-01T23:36:17.798485Z Ray Johnston

Fix for indeterminism from psdcmyk and any other devices that use rgb_cs_to_spotn_cm
or other gx_cm_color_map_procs that don't set all color_info->num_components elements
of the "frac out[]" array. Fix for Bug 690713.

DETAILS:

All of the cmap_***_direct and cmap_***_halftoned functions in gxcmap.c called into
the corresponding device's color mapping proc (supplied by the dev_proc
get_color_mapping_proc) for that color space, but it is not a requirement (invariant)
that those functions set all 'num_components' elements of the array, and some did
not (such as the rgb_cs_to_spotn_cm function mentioned above.

[base/gxcmap.c]

2009-11-01T22:47:33.338243Z Alex Cherepanov

Fix a typo in a recently committed patch (rev. 10246) that broke a branch 
that handles Type 3 images with string data source in the image and file data
source in the mask. Bug 690451, customer 200.

[Resource/Init/gs_ll3.ps]

2009-11-01T19:50:29.144138Z Alex Cherepanov

Consider '0000000000 00000 n' as a free entry, issue a warning, and continue
processing xref table. Files with this error, generated by Quartz PDFContext
are getting increasingly common. Bug 690873.

[Resource/Init/pdf_main.ps]

2009-11-01T18:32:50.921078Z Alex Cherepanov

Implement support of large resource dictionaries. Store XObject dictionaries
that exceed 65534 elements as arrays of dictionaries. Increase default operand
stack limit to 300000 elements. Bug 690778, customers 850, 531.

[Resource/Init/gs_init.ps Resource/Init/pdf_main.ps Resource/Init/pdf_base.ps]

2009-11-01T15:40:28.684192Z Marcos H. Woehrmann

Always allocate pcl and xps jobs to i7 and i7a along with xps jobs (splitjobs.pl).

Fix race condition when machine goes down during regression (clustermaster.pl).

Repeated timeouts on a machine now cause it to abort the run and report this (run.pl and readlog.pl).

[toolbin/localcluster/splitjobs.pl toolbin/localcluster/clustermaster.pl toolbin/localcluster/readlog.pl toolbin/localcluster/run.pl]

2009-10-30T01:25:56.717628Z Alex Cherepanov

Work around a requirement of .image3 operator to have image and mask data
sources to be of the same type. Convert the data sources to the same type
on PostScript level. Bug 690850, customer 870.

[Resource/Init/gs_ll3.ps]

2009-10-29T02:07:58.374375Z Ray Johnston

Fix for clist setcolor when compressed color encoding is used which is the
default build case for the tiffsep and psdcmyk and others . Bug 690851.

DETAILS:

The compressed color encoding always uses 64 bit (sizeof(gx_color_index)).
The (num_components * 8) is not the correct depth (number of bits) for color
encoding in the clist. This patch detects (at run time) that compressed
color encoding is using by examining the 'my_encode_color' procedure since
there is no direct way to determine if compressed color encoding is being
used.

[base/gdevp14.c]

2009-10-27T18:13:49.866447Z Hin-Tak Leung

Adding all the commit ids ever found in svn log to the AUTHORS file.

For those I don't know the real name of, the id was duplicated as the name.
This should make it easier for somebody who wants to fill in the info.

[doc/AUTHORS]

2009-10-27T17:44:51.858107Z Hin-Tak Leung

Adding my commit id<->name mapping to the AUTHORS file

Apparently this file is used by split_changelog.py for
building the History files.

[doc/AUTHORS]

2009-10-27T17:28:17.755993Z Hin-Tak Leung

Declare binary communications explicitly for IJS, where the default behavior
isn't clear for non-MS-VC compilers.

This makes the IJS code works correctly when compiled by mingw or borland.
It also fixes some issue for Watcom. Watcom-compiled client
still seems to be buggy (as in not inter-operating with the others).
Closes bug 688714.

[ijs/ijs_client_example.c ijs/ijs_exec_win.c ijs/unistd_.h ijs/ijs_server.c]

2009-10-27T17:21:38.456605Z Hin-Tak Leung

Reset color space to eRGB just in case a previous fill/stroke
had set it to eGray. Fixes 688320.

[base/gdevpx.c]

2009-10-27T17:02:59.376757Z Hin-Tak Leung

Implements DeltaRow compression as an option, plus updated user documentation.

The new compression scheme is activated by -dCompressMode=3. 
1=RLE is still the default, and under some conditions:
1-pixel-high image (which does not compress well with DeltaRow) and out
of memory conditions (noCompression can run without allocating
memory), specifying -dCompressionMode=3 will still use the current RLE code.
These are documented in comments.

[base/gdevpx.c doc/Devices.htm base/gdevpxut.c]

2009-10-27T16:53:05.423045Z Hin-Tak Leung

custom media size patch + bug fix.

This implements the CustomMediaSize as discussed; on the way I also found an
old bug with the pxl utility code which was just written but not used (until
now). See comments within. Fixes bug 690827.

[base/gdevpxut.h base/gdevpxut.c]

2009-10-27T16:13:23.571814Z Robin Watts

Fix for bug 690831.

The test file uses a radial shading, where the final circle almost contains
the initial one, with 'extension' at the end selected.

Our code incorrectly fills the final extended circle, causing us to wipe out
all the correct fading we've done to that point.

The fix is to recognise whether we are moving 'inwards' or 'outwards', and only
to fill in the 'inwards' case.

This fixes the original issue, and causes no visible regressions.

[base/gxshade1.c]

2009-10-27T15:54:05.886068Z Robin Watts

Make htmldiff.pl output resolution information in html file.

[toolbin/htmldiff.pl]

2009-10-27T04:31:04.180870Z Michael Vrhel

Fix so that the monochrome devices do not use the non-separable blending 
operations that are used for RGB devices. This was the source of an 
indeterminism in Bug 690477. Thanks to Marcos for the detailed bug 
information.
 
DIFFERENCES EXPECTED:
  
None. Apparently no other files use the non-separable luminosity 
blending.

[base/gdevp14.c]

2009-10-26T00:20:11.207073Z Robin Watts

bmpcmp.c: Fix bounding box calculation that could cause SEGV.

[toolbin/bmpcmp.c]

2009-10-26T00:19:31.018870Z Robin Watts

Make htmldiff.pl output TITLEs for each IMG saying the source file, page,
resolution, and whether it's the candidate or reference image.

[toolbin/htmldiff.pl]

2009-10-25T12:39:53.222871Z Robin Watts

Fix for bug 687295; force transparent stroking to construct the entire path
before stroking it, thus eliminating nasty effects where edges overlap.

[base/gxstroke.c]

2009-10-23T20:17:15.860218Z Robin Watts

Another couple of tweaks to bmpcmp.c: Avoid producing bitmaps that have no
changes in (from pages with well separated changes).
Shrink bbox of bitmaps where possible.

[toolbin/bmpcmp.c]

2009-10-23T19:22:10.011416Z Robin Watts

Tweaks to bmpcmp.c.
 * 'Small' differences are shown in green, large differences in red.
 * Don't print an error message when no differences found, as the script
   does this better (and we are only looking at a page at a time).

[toolbin/bmpcmp.c]

2009-10-23T19:20:18.949144Z Robin Watts

Tiny tweak to htmldiff.pl script; now lists files which it failed to find 
changes in at the end.

[toolbin/htmldiff.pl]

2009-10-23T19:13:36.932446Z Robin Watts

Fix bounding box adjustments that were causing rendering glitch in bug 687295.


[base/gdevp14.c]

2009-10-23T07:17:56.276513Z Ralph Giles

Use document.domain instead of a hardwired value for the AJAX cgi 
request. This allows the dashboard page to function on both the 
ghostscript.com and the www.ghostscript.com server aliases.

[toolbin/localcluster/dashboard.html]

2009-10-22T18:28:22.955248Z Ralph Giles

Revert the changes from r10210. This was experimental code accidentally 
committed with an unrelated log message.

[base/gxfcache.h base/gxistate.h base/gsfont.c base/gsistate.c]

2009-10-22T18:24:04.424606Z Ralph Giles

Correct a tranposed digit in the A4Small imageable area in
the ghostpdf ppd. Bug 690814.

[lib/ghostpdf.ppd]

2009-10-22T18:23:57.528033Z Ralph Giles

Add display of the pending 'clusterpush' job queue to the dashboard.

Runs to check commits to the central repository preempt clusterpush
jobs, but it is still useful to see the queue when several jobs are
waiting.

Because we now have more than two elements, we replace the entire
'status' div element, rather than trying to find and replace each
sub-element within the div.

[base/gxfcache.h base/gxistate.h base/gsfont.c base/gsistate.c]

2009-10-22T09:44:43.697488Z Ken Sharp

Fix (pdfwrite) : Unchecked return value from pdf_write_spot_function

Details
Bug # 690796 "Invalid Halftone objects in PDF (negative object references)"

Two fixes, firstly the return value from pdf_write_spot_function() was not being
checked in pdf_write_spot_halftone. We now check the value and return an error if
required.

Secondly when unable to write a spot function because of the num_bits required we were
returning a rangecheck error. This was hidden by the failure to check the return value
noted above. The problem is that rangecheck is a special case return when called via
gdev_pdf_fill_path() and causes it to assume transparency is involved and use a
different fill method. We actually want an error so instead of returning rangecheck
we no return limitcheck instead.

[base/gdevpdfg.c]

2009-10-22T07:01:27.775454Z Michael Vrhel

Fix mistype of which procs to set to when we change the color space for a transparency group.  If we are running with a separation device with spot colors then we need to use the compressed encoding and decoding.  This fixes bug 690816.

DIFFERENCES EXPECTED:

None since it will only show up for separation devices.

[base/gdevp14.c]

2009-10-21T18:09:25.061089Z Ralph Giles

Add display of the pending 'clusterpush' job queue to the dashboard.

Runs to check commits to the central repository preempt clusterpush
jobs, but it is still useful to see the queue when several jobs are
waiting.

Because we now have more than two elements, we replace the entire
'status' div element, rather than trying to find and replace each
sub-element within the div.

[toolbin/localcluster/clustermonitor.cgi toolbin/localcluster/dashboard.html]

2009-10-21T18:09:23.409841Z Ralph Giles

Add a dashboard html page displaying the status of the local cluster.

This page retrieves the status information from the clustermonitor.cgi
script and parses it in javascript, constructing an html display. It
updates every five seconds.

This dashboard is currently installed as http://ghostscript.com/regression/

[toolbin/localcluster/dashboard.html]

2009-10-21T18:09:20.856618Z Ralph Giles

Add a cgi version of the clustermonitor script.

This is a perl cgi script which returns similar information to the
clustermonitor.pl terminal-based dashboard in a json structure for
easy parsing from javascript or other remote applications.

[toolbin/localcluster/clustermonitor.cgi]

2009-10-21T03:50:46.157782Z Michael Vrhel

Reintegration of gs_extendgraphic branch into trunk.  This fixes bug690777.pdf.  The main purpose of this commit is to relay information about q and Q operations (extended graphic state push and pops) to the pdf14 compositor.  The reason this is needed is that the softmask is part of the extended graphic state.

DIFFERENCES EXPECTED:

Bug688807.pdf has a minor progression.  Bug688159.pdf and Bug689509.pdf also reported differences but I could not see any using cmpi.  Also, we may need to take a look at the XPS output.  It was unclear to me which were regressions and which were indeterministic.

DETAILS:

The following example (as well as bug690777) drove the need for this commit.

Consider a transparency group that covers an entire page and let there be a 
soft mask that is set as part of a graphic state.  Let there be 2 bands in 
this clist and let the soft mask bounding box be such that it intersects band 
1 and band 2.   Currently, there will be  a Push Transparency Soft Mask and an 
End Transparency Soft Mask compositor action added into the clist for BOTH 
bands.  Now, let there be a transparency group that is drawn only into band 
one. There will be a Push Transparency group and End Transparency group into 
band 1.  Now let there be a Q followed by a transparency group that is drawn 
only in band 2.  What should happen, is that the soft mask should no longer be 
present due to the Q operation.  Unfortunately, in the current architecture, 
there is no compositor action to let band 2 know that the soft mask is not 
valid to use.

Another example is a case were we set a graphic state with a softmask, which 
will introduce the Push Transparency Soft Mask and an End Transparency Soft 
Mask compositor actions.  Follow this by a q operation. Set another graphic 
state, with another softmask.  This introduces another Push Transparency Soft 
Mask and an End Transparency Soft Mask compositor action.  During the clist 
reader stage the maskbuffer for our pdf14 context will be the last soft mask 
that was specified. Now on the writer side do a Q and draw.  What should occur 
is that the first transparency softmask should be active.  Unfortunately, this 
information is not communicated through the clist AND the old soft mask buffer 
has been lost.

The primary issue in these examples, is that we need to detect and store in 
the clist graphic state changes that occur and have an impact on our 
transparency state.

To solve this problem, the following is proposed:

1) At the PDF interpreter level for the /q and /Q operators, check if the page 
uses transparency. If it does, then execute a .pushextendedgstate for /q and 
a .popextendedgstate for /Q.

2) Add zpushextendedgstate and zpopextendedgstate commands in the c code. 
These operations will respectively execute a gs_push_transparency_state and a 
gs_pop_transparency_state during the clist writer process.  Deep in the 
graphics library there will also be gx_push_transparency_state and 
gx_pop_transparency_state.  These are executed during the clist reader side.

4) Two new device procedures were added related to the transparency state.
(push_transparency_state and pop_transparency_state).  These were added at
the end of the device procs for backward compatibility with older devices.

4) A change to the pdf14 ctx stack such that the maskbuffers are a 
stack.   In fact, they are now reference counted since they can be multiple
copies (actually pointers to the same data buffer) in the mask buffer stack.

5) A flag xstatepending was added to the graphic state to communicate when a softmask transparency
group pop had occurred.  In that case, we need to keep track of the q and Q 
operations.  Otherwise, they are ignored early in the process to reduce the
number of compositor actions.

In addition fixes were made to the background content handling (BC) of the soft mask.
Now the softmask bounding box is the same as the parent group unless the BC value
is white which would indicate that the BC will not have any effect on areas drawn outside
the softmask group bounding box.  Changes were made in the code that computes the band range for the 
softmask group.



[base/gdevrops.c base/gxclimag.c base/gxistate.h base/gdevdflt.c base/gdevbbox.c base/gxcomp.h psi/ztrans.c base/gxclipm.c base/gsovrc.c base/gdevpdft.c /trunk/gs base/gxclip2.c base/gxdevcli.h base/gdevp14.c Resource/Init/pdf_ops.ps base/gxclist.c base/gdevp14.h base/gstrans.c base/gstrans.h base/gxclip.c]

2009-10-21T01:18:51.593536Z Marcos H. Woehrmann

Allow for newly added regression files to produce errors (compare.pl).

Fixed missing nice on some commands (build.pl).

Fixed spurious error message when running svn commit regression  (run.pl).

Reordered code so that the user regression queue is updated even while a regression run is in progress (clustermaster.pl).

Initial check-in (clustermonitor.pl).

[toolbin/localcluster/clustermonitor.pl toolbin/localcluster/clustermaster.pl toolbin/localcluster/build.pl toolbin/localcluster/run.pl toolbin/localcluster/compare.pl]

2009-10-21T01:11:47.945166Z Marcos H. Woehrmann

Perform rsync based on checksum, not mod-time & size.

[toolbin/localcluster/clusterpush.pl]

2009-10-20T23:10:13.904636Z Marcos H. Woehrmann

Modififed clusterpush.pl to print out the rsync status messages
(there should probably be a command line option to disable this).

[toolbin/localcluster/clusterpush.pl]

2009-10-20T21:28:46.305832Z Marcos H. Woehrmann

Report build failures with more detail.

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/readlog.pl toolbin/localcluster/build.pl toolbin/localcluster/run.pl]

2009-10-20T19:17:09.055802Z Hin-Tak Leung

Handles images rotated by 90/-90/180 degree as high level object.

This change implement rotated image as a high-level object by
emitting a PXL rotation intruction, draw the image with rotated
user co-ordinate, then the reverse PXL rotation. Fixes bug 690733. 

[base/gdevpx.c]

2009-10-20T16:53:11.304991Z Robin Watts

Fix for bug 690805.

If a dash pattern exactly fits into the path to be stroked, a 0 length dash
note is emitted, with (0,0) tangents. This causes an extra cap to be put on
the path when rendering, causing stray marks.

The fix is to recognise the case when we are about to emit a dash note with
no useful information in the note (i.e. if udx and udy are 0, then don't
emit the dash note). This leaves the renderer free to make it's own decision.

Examination of the bitmaps shows that all the differences are in fact
improvements. The following files are identified by the localcluster as
being differences, but no differences are found in local testing:

tests_private/pcl/pcl5efts/fts.1140.pdf.pkmraw.600.0 pcl i7 i7
tests_private/pcl/pcl5efts/fts.1140.pdf.ppmraw.600.0 pcl i7 imac
tests_private/pcl/pcl5efts/fts.1140.pdf.ppmraw.75.0 pcl macpro macpro
tests_private/pcl/pcl5efts/fts.2380.pdf.ppmraw.600.0 pcl macpro i7
tests_private/ps/ps3cet/09-36.PS.pbmraw.300.0 gs i7 snow
tests_private/ps/ps3cet/09-36.PS.pbmraw.300.1 gs snow i7
tests_private/ps/ps3cet/09-36.PS.pdf.pkmraw.300.0 gs i7a i7
tests_private/ps/ps3cet/09-36.PS.pdf.ppmraw.300.0 gs snow i7a
tests_private/ps/ps3cet/09-36.PS.pgmraw.300.0 gs macpro i7a
tests_private/ps/ps3cet/09-36.PS.pgmraw.300.1 gs macpro snow
tests_private/ps/ps3cet/09-36.PS.pkmraw.300.0 gs i7a i7
tests_private/ps/ps3cet/09-36.PS.pkmraw.300.1 gs i7 WZIM
tests_private/ps/ps3cet/09-36.PS.ppmraw.300.0 gs macpro i7
tests_private/ps/ps3cet/09-36.PS.ppmraw.300.1 gs i7 i7a
tests_private/ps/ps3cet/11-21.PS.pbmraw.300.0 gs i7a i7
tests_private/ps/ps3cet/11-21.PS.pbmraw.300.1 gs i7 i7a
tests_private/ps/ps3cet/11-21.PS.pdf.pkmraw.300.0 gs snow snow
tests_private/ps/ps3cet/11-21.PS.pdf.ppmraw.300.0 gs i7 i7
tests_private/ps/ps3cet/11-21.PS.pgmraw.300.0 gs macpro i7a
tests_private/ps/ps3cet/11-21.PS.pgmraw.300.1 gs i7 snow
tests_private/ps/ps3cet/11-21.PS.pkmraw.300.0 gs i7 i7a
tests_private/ps/ps3cet/11-21.PS.pkmraw.300.1 gs macpro WZIM
tests_private/ps/ps3cet/11-21.PS.ppmraw.300.0 gs macpro i7a
tests_private/ps/ps3cet/11-21.PS.ppmraw.300.1 gs macpro macpro
tests_private/ps/ps3cet/11-28.PS.pbmraw.300.0 gs i7 i7a
tests_private/ps/ps3cet/11-28.PS.pbmraw.300.1 gs snow snow
tests_private/ps/ps3cet/11-28.PS.pdf.pkmraw.300.0 gs i7 macpro
tests_private/ps/ps3cet/11-28.PS.pdf.ppmraw.300.0 gs i7a snow
tests_private/ps/ps3cet/11-28.PS.pgmraw.300.0 gs i7a i7
tests_private/ps/ps3cet/11-28.PS.pgmraw.300.1 gs i7a macpro
tests_private/ps/ps3cet/11-28.PS.pkmraw.300.0 gs snow macpro
tests_private/ps/ps3cet/11-28.PS.pkmraw.300.1 gs i7 snow
tests_private/ps/ps3cet/11-28.PS.ppmraw.300.0 gs macpro i7
tests_private/ps/ps3cet/11-28.PS.ppmraw.300.1 gs macpro i7
tests_private/xps/xpsfts-a4/fts_43xx.xps.bitrgb.72.0 xps macpro imac


[base/gxpdash.c]

2009-10-20T16:18:29.688093Z Robin Watts

Simple .bmp image differ/slicer, for use with htmldiff.pl.

[toolbin/bmpcmp.c]

2009-10-20T16:13:56.684584Z Robin Watts

Simple perl script to produce html+images from regression lists as produced
by localcluster regression tests.

[toolbin/htmldiff.pl]

2009-10-20T07:59:42.576899Z Ken Sharp

Fix (ps2write) : Allow use of /Indexed colour spaces in PostScript output.

Details
Although opdfread.ps has always contained code to handle /Indexed colour spaces,
ps2write has never emitted any. This is because it is always executed with a PDF
CompatabilityLevel of 1.2, and PDF 1.2 doesn't support Indexed colour spaces.

PostScript, however, does and it seems unreasonable to deny the use of these spaces
when we are emitting PostScript.

This code checks to see if we are emitting PostScript when comparing the compatibility 
level to see if Indexed spaces are allowed, and permits /Indexed for PostScript.

This change did, however, expose a number of flaws in the opdfread code when handling
Indexed spaces. These are all due to the fact that an Indexed space can use an existing
space as its base, and this can lead to multiple attempts to resolve or flatten the 
underlying space.

FunctionToProc is altered to check it has been passed a function dictionary to convert
and to ignore the operation if not.

SubstitutePDFColorSpace allows for CIEBasedA and CIEBasedABC spaces, which may be the
result of a prior substitution.

ResolveArrayElement checks the element to see if it is passed a procedure containing
an integer followed by a procedure, before executing the procedure. This is because a
colour space which has already been resolved may have a procedural look up and 
executing that disturbs the stack.

DecodeArrays generated an incorrect Decode array for Indexed colour spaces.

[base/gdevpdfc.c Resource/Init/opdfread.ps]

2009-10-19T20:24:53.770533Z Ralph Giles

Print a warning when invoking the 'so' unix makefile targets from pmake.

Details:

The make included in freebsd 7.0 appears to have trouble matching or 
collapsing target paths of the form ./bin/../sobin/gsc as GSSOC_XENAME 
expands to in the recursive shared build make invocation. GNU make works 
fine on the same platform.

Note that we use the @ prefix to hide the command output, which may also 
be a gmake-ism, but it works on freebsd 7.0.

[base/unix-dll.mak]

2009-10-17T18:59:06.072895Z Alex Cherepanov

Finish implementation of ColorSpace extraction from JPX streams. RGB,
Gray, and ICC-based color spaces are extracted and passed to PDF interpreter.
Palette colors need no further processing in PDF interpreter because
they are expanded on C level. Bug 690207.

[Resource/ColorSpace/sGray Resource/ColorSpace/sRGB Resource/Init/pdf_draw.ps]

2009-10-16T14:02:04.066085Z Ken Sharp

Fix (ps2write) : Problems with type 3 fonts causing errors

Details
Typo in the /NotDef function, used as a /.notdef glyph i type 3 fonts emitted by
ps2write. There was a 'o setlinewidth' which should be a '0 setlinewidth'.

[Resource/Init/opdfread.ps]

2009-10-16T07:22:24.989326Z Ken Sharp

Fix (ps2write) : Pattern colour spaces broken

Details
The CheckPattern routine in opdfread.ps insisted that a Pattern should contain a /Type
key in the pattern dicitonary and a value of /Pattern. The spec says this key is
optional and GS does not write it. This meant that all Pattern colour spaces failed
when checked by opdfread, and therefore the output of ps2write did not work.

The code now checks if a Type key is present before checking its value, and does not
fail if it is not present.

[Resource/Init/opdfread.ps]

2009-10-14T09:15:43.246903Z Marcos H. Woehrmann

Initial checkin of script to gather performance data based on revision.

[toolbin/performance.pl]

2009-10-13T07:16:32.913558Z Ken Sharp

Fix (ps2write) : Problem with TrueType /.notdef encoding

Details
Bug #690809 "ps2write problem with some TrueType fonts"

When building a CharStrings dictionary, to map from glyph names to GIDs, the code would
start by correctly encoding /.notdef at GID 0. However the InverseEncoding path through
the code could then re-encode /.notdef at a different GID. This could lead to the file
failing to work.

Now check the glyph name and, if it is /.notdef, do not re-encode it.

[Resource/Init/opdfread.ps]

2009-10-12T02:27:21.732148Z Alex Cherepanov

Add sRGB and a similar one-component color space for the upcoming patch
that will extract color space information from JP2 stream. Bug 690207.

[Resource/ColorSpace/sGray Resource/ColorSpace/sRGB]

2009-10-08T01:53:10.398646Z Alex Cherepanov

Fix a long-standing bug in ps2ascii conversion that caused concatenation of
the lines within a paragraph. Bug 690806.

[lib/ps2ascii.ps]

2009-10-06T11:44:51.043694Z Alex Cherepanov

Skip non-PDF files during enumeration of embedded file streams in PDF
portfolio. Bug 690422, customer 531.

[Resource/Init/pdf_main.ps]

2009-10-06T08:22:42.843465Z Ken Sharp

Fix (pdfwrite) : Undo escapement of PostScript strings when writing XMP metadata for
PDF/A

Details
Bug #690471 "Parantheses escaped in xmp metadata"

Technically this is covered in gs/doc/ps2pdf.htm under -sDSCEncoding which states that 
the default behaviour is simply to copy the data directly to the file with no
translation.

However it seems unreasonable not to at least undo the PostScript escapement which we 
must have in order to set the PostScript string and which will cause PDF/A
verification failures if we don't.

Modified the default case (which does not convert to Unicode) to undo the escapement
only.

[base/gdevpdfe.c]

2009-10-06T07:33:33.759516Z Ken Sharp

Fix (pdfwrite) : The PDFACompatibilityPolicy switch was being overwritten by PDFA on
setpagedevice

Details
Bug #690803
The PDFA switch is stored in the page device dictionary, and the device member is reset
from the stored setting on each setpagedevice. This was defeating the 
PDFACompatibilityPolicy setting which tried to disable PDF/A production when the input
could not be converted to a compliant PDF/A file.

Because the PostScript value is subject to save and restore, its all but impossible to
alter the PostScript saved value. So added a new device member 'AbortPDFAX' which can
only be set from C. This is set when non-compliant input is detected and prevents the
emission of (currently) PDF/A file (may add PDF/X in future). It does this by resetting
the device PDFA member every time the device parameters are set.

[base/gdevpdfm.c base/gdevpdfx.h base/gdevpdfp.c base/gdevpdfb.h]

2009-10-05T16:07:19.389735Z Ralph Giles

Correct typos in the MacOS X linker options. Bug 690783.

[base/unix-dll.mak]

2009-10-05T09:27:44.398728Z Ken Sharp

Fix (pdfwrite) : incomplete submission #10124

Details
Somehow in the confusion of IP address changes and local cluster regression tests I
managed to only commit a partial fix for issue #690767. The missing line of code is
in this patch.

[base/gdevpdtd.c]

2009-10-05T07:10:40.648039Z Ken Sharp

Fix (pdfwrite) : Improve symbolic font detection

Details
Bug #690767 "Problems with PDFA"

Revision 9944 altered the way that we detect whether a font is symbolic or not. This 
involved several changes; fixing existing broken code, adding /.notdef detection and
attempting to check encoded positions of glyphs before deciding a font was non-symbolic.

The encoding position test was incorrect for TrueType fonts, however, leading to some
fonts being needlessly declared as symbolic. This patch moves the encoding test to the
font descriptor assembly, which is the correct place to test it.

While this resolves the customer issue, it is not a complete solution. A truly symbolic
TrueType font would still be written as a symbolic font and when creating PDF/A files
there are strict limitations on the form of TrueType fonts. In particular they must only
contain a single CMAP table. Because we do not completely generate TrueType fonts for
embedding, but copy some tables, we cannot meet this restriction.

This will continue to be a potential problem until the TrueType font embedding code is
rewritten properly.

[base/gdevpdtd.c base/gdevpdtw.c base/gdevpdtd.h]

2009-10-05T01:37:52.593906Z Alex Cherepanov

Fix incorrect calculation of the page size in cljet5 driver that returned the
size in inches instead of points causing /rangecheck in .installpagedevice .
Bug 690799, customer 870.

[base/gdevclj.c]

2009-10-04T12:42:07.575694Z Alex Cherepanov

Fix SEGV caused by unknown %device% prefix. Add missing check for return code
during lib path parsing. Thanks to Piotr Strzelczyk for the patch. Bug 690800.

[psi/zfile.c]

2009-10-03T16:41:07.412223Z Alex Cherepanov

Silently ignore point displacement request when the point number is out of
valid range. This patch has been backported from FreeType2. Bug 690795.

[base/ttinterp.c]

2009-10-02T23:59:45.611838Z Marcos H. Woehrmann

Lots of general code cleanup.
Fixed termination of long jobs on some systems.
Added explicit detection of seg faults with pdfwrite.

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/readlog.pl toolbin/localcluster/build.pl toolbin/localcluster/run.pl toolbin/localcluster/compare.pl]

2009-10-02T22:34:36.678844Z Ralph Giles

Update the Adobe-CNS1 CMap resource to supplement 6.

[Resource/CMap/Adobe-CNS1-6 Resource/CMap/ETHK-B5-V Resource/CMap/HKscs-B5-V Resource/CMap/UniCNS-UTF32-V Resource/CMap/ETHK-B5-H Resource/CMap/HKscs-B5-H Resource/CMap/UniCNS-UTF16-V Resource/CMap/UniCNS-UTF32-H Resource/CMap/UniCNS-UTF8-V Resource/CMap/UniCNS-UTF16-H Resource/CMap/UniCNS-UTF8-H]

2009-10-01T14:27:36.870724Z Ray Johnston

Fix for segfault when peekstring requests more data than remains in a
%rom% file. Bug 690697.

DETAILS:

The EOFC was not being set correctly, so a subsequent operation would have
cursor.r values that were invalid. Refer to the invariant in the documentation
in stream.h for the stream_s structure:

     s->position represents the stream position as of the beginning of the
     buffer, so the current position is s->position + (s->srptr + 1 - s->cbuf).

Note that we must not return EOFC when reading exactly the remaining number of
bytes in a file since this will result in the stream being closed. PCL relies
on the stream remaining open after reading the number of bytes in the file.

[base/gsiorom.c]

2009-10-01T03:28:46.061833Z Marcos H. Woehrmann

Clusterpush.pl now tests all languages.
Added error checking to builds.
Disabled pgmraw testing for xps.

[toolbin/localcluster/splitjobs.pl toolbin/localcluster/clustermaster.pl toolbin/localcluster/readlog.pl toolbin/localcluster/build.pl toolbin/localcluster/run.pl]

2009-10-01T01:22:52.434995Z Masaki Ushizaka

A quick dirty hack to enable reading of wts plane files (wts_plane_x) on 64 bit machines.  Wts plane files contain a image of little endian 32 bit specific structure with a pointer, and was preventing wtsimdi device to run on 64 bit machines.
Tested on little endian 32 and 64 bit machines.  Should not change anything on 32 bit machines with current wts plane files.  Hope to work on big endian machines but not tested.
Bug #690710.

[base/gswts.c]

2009-09-30T00:56:07.061280Z Marcos H. Woehrmann

First cut at a working clusterpush.pl (complete with documentation!).

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/clusterpush.pl toolbin/localcluster/clusterpush.txt]

2009-09-29T00:18:30.610000Z Alex Cherepanov

Force out-of-range values of color mask to the valid range by calculating
bitwise 'and' with the maximum color value. Experiments show that this is what
AR does. Earlier code mapped out-of-range values to the nearest valid value.
Bug 690786, customer 531.

[Resource/Init/pdf_draw.ps]

2009-09-28T22:07:08.267973Z Alex Cherepanov

Draw a smooth curve through the points of Ink annotation. The algorithm Adobe
uses is unpublished but our curve is close enough to Adobe when the points
follow a smooth path. For random points the curve is different but looks
more logical than Adobe's. Bug 690758, customer 580.

[psi/int.mak Resource/Init/pdf_draw.ps psi/zpdfops.c]

2009-09-28T18:40:49.994854Z Ralph Giles

Fix some broken documentation links. Bug 690787.

[doc/Develop.htm doc/Commprod.htm]

2009-09-28T17:16:24.723655Z Ralph Giles

Also set the correct media type on the documenation style sheet.

[doc/gs.css]

2009-09-28T17:14:43.100223Z Ralph Giles

Set a text/html media type on the html documentation so it can
be served directly out of svn.

[doc/History7.htm doc/Projects.htm doc/History8.htm doc/Use.htm doc/Readme.htm doc/Deprecated.htm doc/Source.htm doc/Install.htm doc/Changes.htm doc/API.htm doc/Issues.htm doc/DLL.htm doc/Drivers.htm doc/Commprod.htm doc/Release.htm doc/Xfonts.htm doc/Devices.htm doc/Language.htm doc/Ps2ps2.htm doc/Fonts.htm doc/Develop.htm doc/Ps2pdf.htm doc/Helpers.htm doc/Psfiles.htm doc/Lib.htm doc/Hershey.htm doc/News.htm doc/Details8.htm doc/Make.htm doc/Unix-lpr.htm doc/C-style.htm doc/Ps-style.htm doc/History1.htm doc/History2.htm doc/index.html doc/History3.htm doc/Ps2epsi.htm doc/History4.htm doc/Details.htm doc/History5.htm doc/History6.htm]

2009-09-28T12:28:27.246472Z Alex Cherepanov

Fix line endings and a corresponding file attribute in a recently added file.

[psi/zpdfops.c]

2009-09-28T05:30:56.923097Z Marcos H. Woehrmann

Added clusterpush.pl.

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/clusterpull.sh toolbin/localcluster/build.pl toolbin/localcluster/clusterpush.pl toolbin/localcluster/run.pl toolbin/localcluster/compare.pl]

2009-09-26T05:34:48.796753Z Ralph Giles

Revert the change to EOF handling in the romfs iodevice. It fixed the 
segfault, but broken compiled-in font access on PCL. Bug 690697.

[base/gsiorom.c]

2009-09-25T23:16:42.622069Z Ralph Giles

Improve EOF detection with the romfs iodevice. Fixes a segfault
loading shorter resources. Patch from Alex Cherepanov, bug 690697.

Details:

Resources are loaded using the --run-- operator, which looks into
the first 1023 bytes of the file to check for PDF, etc. It calls
.peekstring which uses s->end_status to detect the end of the file,
but s_block_read_process() didn't set it, allowing repeated reading
of the same block and the file position to run off the end of the
buffer. This was the cause of the segfault.

We now use '>=' instead of '==' when checking the file position to
avoid the overrun, and raise the EOF flag when the last block of the
file is read. This can be done because the whole block is always
decompressed and copied to the stream buffer.

[base/gsiorom.c]

2009-09-25T14:55:13.694603Z Ken Sharp

Fix (pdfwrite) : Remove limit on images in patterns when creating later versions of PDF

Details
There was a fixed limit of 64Kb on images used by Pattern colour spaces in early
versions of Acrobat (presumably using a string for storage). This limit does not apply
from Acrobat 5 onwards so the size test has been amended to also consider the version
of PDF being produced before raising an error.

[base/gdevpdfv.c]

2009-09-25T14:19:13.610976Z Ray Johnston

Fix for transparency problem, caused by the alpha parameters in the ExtGState
in the PDF interpreter (dictstack) not being maintained properly.
Bug 690770 for customer #1110. Thanks to Michael Vrhel for analyzing the PDF
to find the area that the PDF interpreter was mishandling.

DETAILS:

The ExtGState is kept as values in the dictionaries on the dictstack and are
sent to the graphics library as needed using '.set***alpha' operators. The
CA and ca values were properly set to 1 in the graphics library when the Do
operator was used to execute Form or Image objects, but the corresponding
FillConstantAlpha and StrokeConstantAlpha values were not being set in the
ExtGState so any operations in a Form that set the values in the graphics
library from the ***ConstantAlpha values in the ExtGState could set them
to incorrect values.

[Resource/Init/pdf_draw.ps]

2009-09-25T09:12:10.671327Z Ken Sharp

Fix (pdfwrite) : Stricter checking when converting type 4 to type 1 masked image

Details
Bug #690704 "Regression: seg fault with pdfwrite"

pdfwrite was performing an optimisation to convert type 4 masked images, which are only
supported in PDF 1.3 and above, into type 1 masked images which are supported in all 
versions.

However the test was faulty, assuming that a one bit per component image was always
suitable. If the image had multiple components the result was incorrect and when the
input was from PCL could lead to errors.

[base/gdevpdfi.c]

2009-09-25T01:29:07.733105Z Ralph Giles

Update the CMap resources with the new, open source versions of
the files for the Identity, Adobe-CNS1, Adobe-GB1, Adobe-Japan1,
Adobe-Japan2 and Adobe-Korea1 CMap resources.

Aside from the copyright and license header change and a bump to the
minor CMapVersion field, these versions incorporate the following
changes over our previous set of CMap resources:

     Identity-H has many new ranges,
     UniGB-UTF8-H  bumped to supplement 5,
     UniGB-UTF16-H bumped to supplement 5,
     UniGB-UTF32-H has some character updates.

These are still copyright Adobe, but now allow modification and require
attribution on binaries. Previously they were licensed only for verbatim
redistribution.

[Resource/CMap/78-H Resource/CMap/Hojo-H Resource/CMap/UniHojo-UCS2-V Resource/CMap/90pv-RKSJ-H Resource/CMap/CNS2-H Resource/CMap/RKSJ-H Resource/CMap/78-V Resource/CMap/KSCpc-EUC-H Resource/CMap/Hojo-V Resource/CMap/90pv-RKSJ-V Resource/CMap/CNS2-V Resource/CMap/Hiragana Resource/CMap/GBT-EUC-H Resource/CMap/Roman Resource/CMap/RKSJ-V Resource/CMap/HKdlb-B5-H Resource/CMap/UniKS-UTF32-H Resource/CMap/KSCpc-EUC-V Resource/CMap/UniHojo-UTF8-H Resource/CMap/Adobe-Korea1-0 Resource/CMap/UniKS-UCS2-H Resource/CMap/Adobe-Korea1-1 Resource/CMap/Adobe-Korea1-2 Resource/CMap/GBT-EUC-V Resource/CMap/78-RKSJ-H Resource/CMap/UniJISX02132004-UTF32-H Resource/CMap/HKdlb-B5-V Resource/CMap/HKgccs-B5-H Resource/CMap/83pv-RKSJ-H Resource/CMap/UniKS-UTF32-V Resource/CMap/UniJIS2004-UTF16-H Resource/CMap/EUC-H Resource/CMap/UniHojo-UTF32-H Resource/CMap/UniHojo-UTF8-V Resource/CMap/UniGB-UCS2-H Resource/CMap/HKscs-B5-H Resource/CMap/HKm471-B5-H Resource/CMap/90msp-RKSJ-H Resource/CMap/UniKS-UCS2-V Resource/CMap/78-RKSJ-V Resource/CMap/HKgccs-B5-V Resource/CMap/UniJISX02132004-UTF32-V Resource/CMap/GBpc-EUC-H Resource/CMap/Add-H Resource/CMap/UniJIS2004-UTF16-V Resource/CMap/Adobe-GB1-0 Resource/CMap/B5pc-H Resource/CMap/KSC-EUC-H Resource/CMap/Adobe-GB1-1 Resource/CMap/EUC-V Resource/CMap/UniHojo-UTF32-V Resource/CMap/Adobe-GB1-2 Resource/CMap/Adobe-GB1-3 Resource/CMap/UniGB-UCS2-V Resource/CMap/HKscs-B5-V Resource/CMap/HKm471-B5-V Resource/CMap/Adobe-GB1-4 Resource/CMap/90msp-RKSJ-V Resource/CMap/Adobe-GB1-5 Resource/CMap/UniCNS-UTF32-H Resource/CMap/GBpc-EUC-V Resource/CMap/Add-V Resource/CMap/B5pc-V Resource/CMap/Ext-RKSJ-H Resource/CMap/KSC-EUC-V Resource/CMap/Hojo-EUC-H Resource/CMap/UniJISPro-UCS2-V Resource/CMap/GBT-H Resource/CMap/UniKS-UTF8-H Resource/CMap/GBK-EUC-H Resource/CMap/UniCNS-UTF32-V Resource/CMap/Ext-RKSJ-V Resource/CMap/Hojo-EUC-V Resource/CMap/UniGB-UTF8-H Resource/CMap/Adobe-Japan1-0 Resource/CMap/GBT-V Resource/CMap/UniKS-UTF8-V Resource/CMap/UniJIS2004-UTF8-H Resource/CMap/Adobe-Japan1-1 Resource/CMap/GBK-EUC-V Resource/CMap/UniKS-UTF16-H Resource/CMap/Adobe-Japan1-2 Resource/CMap/Adobe-Japan1-3 Resource/CMap/Adobe-Japan1-4 Resource/CMap/Adobe-Japan1-5 Resource/CMap/90ms-RKSJ-H Resource/CMap/Adobe-Japan1-6 Resource/CMap/UniJIS-UTF32-H Resource/CMap/GB-EUC-H Resource/CMap/H Resource/CMap/UniGB-UTF8-V Resource/CMap/B5-H Resource/CMap/UniJIS2004-UTF8-V Resource/CMap/UniKS-UTF16-V Resource/CMap/UniJIS-UCS2-H Resource/CMap/90ms-RKSJ-V Resource/CMap/UniHojo-UTF16-H Resource/CMap/V Resource/CMap/UniJIS-UTF32-V Resource/CMap/GB-EUC-V Resource/CMap/KSC-H Resource/CMap/UniJISPro-UTF8-V Resource/CMap/B5-V Resource/CMap/Katakana Resource/CMap/HKdla-B5-H Resource/CMap/UniJIS-UCS2-V Resource/CMap/Identity-H Resource/CMap/UniHojo-UTF16-V Resource/CMap/GBKp-EUC-H Resource/CMap/KSC-V Resource/CMap/GBK2K-H Resource/CMap/UniCNS-UTF16-H Resource/CMap/UniGB-UTF32-H Resource/CMap/HKdla-B5-V Resource/CMap/Identity-V Resource/CMap/UniCNS-UCS2-H Resource/CMap/GBKp-EUC-V Resource/CMap/GBK2K-V Resource/CMap/UniCNS-UTF16-V Resource/CMap/UniGB-UTF32-V Resource/CMap/Adobe-CNS1-0 Resource/CMap/UniJIS-UTF8-H Resource/CMap/Adobe-CNS1-1 Resource/CMap/Adobe-CNS1-2 Resource/CMap/Adobe-CNS1-3 Resource/CMap/UniCNS-UCS2-V Resource/CMap/Adobe-CNS1-4 Resource/CMap/GB-H Resource/CMap/Adobe-CNS1-5 Resource/CMap/Adobe-Japan2-0 Resource/CMap/KSCms-UHC-H Resource/CMap/Add-RKSJ-H Resource/CMap/UniJISX0213-UTF32-H Resource/CMap/UniJIS-UTF8-V Resource/CMap/UniJIS-UTF16-H Resource/CMap/GB-V Resource/CMap/KSCms-UHC-HW-H Resource/CMap/KSCms-UHC-V Resource/CMap/HKm314-B5-H Resource/CMap/Add-RKSJ-V Resource/CMap/UniJISX0213-UTF32-V Resource/CMap/UniJIS-UTF16-V Resource/CMap/UniCNS-UTF8-H Resource/CMap/KSCms-UHC-HW-V Resource/CMap/UniJIS-UCS2-HW-H Resource/CMap/HKm314-B5-V Resource/CMap/Hankaku Resource/CMap/ETen-B5-H Resource/CMap/ETenms-B5-H Resource/CMap/UniCNS-UTF8-V Resource/CMap/NWP-H Resource/CMap/CNS1-H Resource/CMap/WP-Symbol Resource/CMap/UniJIS-UCS2-HW-V Resource/CMap/UniGB-UTF16-H Resource/CMap/78-EUC-H Resource/CMap/ETen-B5-V Resource/CMap/ETenms-B5-V Resource/CMap/NWP-V Resource/CMap/CNS1-V Resource/CMap/UniGB-UTF16-V Resource/CMap/78-EUC-V Resource/CMap/CNS-EUC-H Resource/CMap/ETHK-B5-H Resource/CMap/Ext-H Resource/CMap/KSC-Johab-H Resource/CMap/78ms-RKSJ-H Resource/CMap/UniJIS2004-UTF32-H Resource/CMap/GBTpc-EUC-H Resource/CMap/CNS-EUC-V Resource/CMap/ETHK-B5-V Resource/CMap/Ext-V Resource/CMap/KSC-Johab-V Resource/CMap/78ms-RKSJ-V Resource/CMap/UniHojo-UCS2-H Resource/CMap/UniJIS2004-UTF32-V Resource/CMap/UniJISPro-UCS2-HW-V Resource/CMap/GBTpc-EUC-V]

2009-09-23T01:42:55.789973Z Alex Cherepanov

Implement rendering of PDF Ink annotation without appearance stream. PDF
Spec doesn't say how to connect points in the annotation. This version uses
simple lineto operation but Acrobat uses curves for smoother look. 
Bug 690758, customer 580.

DETAILS:
The drawing of the line through the given points is implemented in C as a
custom operator to facilitate further improvements.

[psi/int.mak psi/zpdfops.c Resource/Init/pdf_draw.ps]

2009-09-22T19:19:22.702941Z Marcos H. Woehrmann

Fixed bug in automatic speed tuning of local cluster nodes and modified build process to make use of fixed parallel makefiles.

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/run.pl toolbin/localcluster/compare.pl]

2009-09-22T16:53:51.759845Z Marcos H. Woehrmann

Local cluser regression changes:

Enabled minimal XPS and SVG testing.
Improved error reporting (errors and timeouts are now differentiated as are input errors vs. pdfwrite produced pdf file reading errors.

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/readlog.pl toolbin/localcluster/build.pl toolbin/localcluster/compare.pl]

2009-09-21T19:38:30.162606Z Ray Johnston

Correct placement of declaration to allow wts devices to compile on MSVC.

[base/gdevwts.c]

2009-09-21T15:10:25.830219Z Ken Sharp

Fix (type 1 parser) : Correct logical flaw in SEAC parsing

Details
Bug #690720 "Regression: pdfwrite generates bad pdf files from PostScript files"

The Type 1 font routine to detect SEAC (Single Encoding Accented Character) glyphs and
return the component glyphs, 'gs_type1_piece_codes' made a faulty assumption that a
SEAC glyph was purely composed of two components and that any glyph with a path
construction operation could not be a SEAC.

This restriction is, unfortunately, not documented in the spec. The Genoa test file
16-10.ps includes a font with SEAC glyphs which also contain path construction
operations. The failure to properly detect the SEAC was causing pdfwrite not to emit 
the component glyphs when subsetting fonts, resulting in PDF files containing invalid
fonts.

Fixing this then revealed that the reduced type 1/type 2 font interpreter used for
detecting SEAC glyphs did not properly handle a number of type 2 instructions. This
patch also adds support for hstemhm, vstemhm, hintmask and cntrmask. 

Because we do not have a full featured CFF parser in C yet, it was not possible to add
full support for the callgsubr operator (global subroutines are apparently not available
to the reduced interpreter). If the relevant gsubr contained the endchar for the glyph,
then this causes the interpreter to fail as we cannot process the subr.

Since SEAC operations are deprecated in type 2 fonts, and a gsubr completion of a SEAC
is extremely unlikely, I've chosen to return when a callgsubr is encountered and treat
the glyph as not being a SEAC. This may need to be revised in future.

[base/gxtype1.c]

2009-09-19T17:17:32.098742Z Marcos H. Woehrmann

Normalize machine times so the fastest machine is 1 rather than the average machine.

[toolbin/localcluster/clustermaster.pl]

2009-09-19T02:22:31.474412Z Marcos H. Woehrmann

Added the machine name to log output and check for matching md5sum in last N regression runs (to try to deal with indeterminisms).

[toolbin/localcluster/clustermaster.pl toolbin/localcluster/readlog.pl toolbin/localcluster/build.pl toolbin/localcluster/compare.pl]

2009-09-18T23:07:41.949391Z Ralph Giles

Remove an unncessary keyword substitution flags from the Adobe CMaps.

These files don't have an RCS/SVN version header, so the substitution
could only cause problems. In the case of the two Identity-UTF16 CMap
files which are owned by Artifex and do have version headers, I've 
reduced the substitutions to just the 'Id' keyword to match the rest of 
the source.

[Resource/CMap/78-H Resource/CMap/GB-RKSJ-H Resource/CMap/Hojo-H Resource/CMap/CNS06-RKSJ-H Resource/CMap/Adobe-Japan1-90pv-RKSJ Resource/CMap/Adobe-CNS1-UCS2 Resource/CMap/GBK-EUC-UCS2 Resource/CMap/UniHojo-UCS2-V Resource/CMap/CNS2-H Resource/CMap/90pv-RKSJ-H Resource/CMap/Adobe-Japan1-UCS2 Resource/CMap/RKSJ-H Resource/CMap/78-V Resource/CMap/Hojo-V Resource/CMap/KSCpc-EUC-H Resource/CMap/TCVN-RKSJ-H Resource/CMap/90pv-RKSJ-V Resource/CMap/CNS2-V Resource/CMap/UCS2-ETen-B5 Resource/CMap/Hiragana Resource/CMap/GBT-EUC-H Resource/CMap/Roman Resource/CMap/RKSJ-V Resource/CMap/HKdlb-B5-H Resource/CMap/KSCpc-EUC-V Resource/CMap/Adobe-Japan1-H-Host Resource/CMap/UniHojo-UTF8-H Resource/CMap/CNS05-RKSJ-H Resource/CMap/CNS15-RKSJ-H Resource/CMap/UCS2-GBK-EUC Resource/CMap/Adobe-Korea1-0 Resource/CMap/Adobe-Korea1-1 Resource/CMap/GBT-EUC-V Resource/CMap/Adobe-Korea1-2 Resource/CMap/78-RKSJ-H Resource/CMap/HKdlb-B5-V Resource/CMap/HKgccs-B5-H Resource/CMap/83pv-RKSJ-H Resource/CMap/KSC2-RKSJ-H Resource/CMap/Adobe-CNS1-H-Mac Resource/CMap/EUC-H Resource/CMap/UniHojo-UTF32-H Resource/CMap/UniHojo-UTF8-V Resource/CMap/Adobe-CNS1-B5pc Resource/CMap/UniGB-UCS2-H Resource/CMap/90msp-RKSJ-H Resource/CMap/Adobe-GB1-GBpc-EUC Resource/CMap/Adobe-Japan1-H-CID Resource/CMap/HKm471-B5-H Resource/CMap/HKscs-B5-H Resource/CMap/GBT-RKSJ-H Resource/CMap/78-RKSJ-V Resource/CMap/ETen-B5-UCS2 Resource/CMap/HKgccs-B5-V Resource/CMap/UCS2-90ms-RKSJ Resource/CMap/GBpc-EUC-H Resource/CMap/Add-H Resource/CMap/B5pc-H Resource/CMap/Adobe-GB1-0 Resource/CMap/EUC-V Resource/CMap/Adobe-GB1-1 Resource/CMap/KSC-EUC-H Resource/CMap/UniHojo-UTF32-V Resource/CMap/Adobe-GB1-2 Resource/CMap/UniGB-UCS2-V Resource/CMap/Adobe-GB1-3 Resource/CMap/HKscs-B5-V Resource/CMap/HKm471-B5-V Resource/CMap/Adobe-GB1-4 Resource/CMap/90msp-RKSJ-V Resource/CMap/90pv-RKSJ-UCS2C Resource/CMap/Adobe-GB1-5 Resource/CMap/CNS04-RKSJ-H Resource/CMap/UniCNS-UTF32-H Resource/CMap/GBpc-EUC-V Resource/CMap/KSCpc-EUC-UCS2C Resource/CMap/Add-V Resource/CMap/B5pc-V Resource/CMap/Ext-RKSJ-H Resource/CMap/KSC-EUC-V Resource/CMap/Hojo-EUC-H Resource/CMap/UCS2-GBpc-EUC Resource/CMap/GBT-H Resource/CMap/GBK-EUC-H Resource/CMap/UniCNS-UTF32-V Resource/CMap/UCS2-B5pc Resource/CMap/Adobe-GB1-H-Mac Resource/CMap/KSCms-UHC-UCS2 Resource/CMap/Ext-RKSJ-V Resource/CMap/Hojo-EUC-V Resource/CMap/UniGB-UTF8-H Resource/CMap/UCS2-90pv-RKSJ Resource/CMap/Adobe-Japan1-0 Resource/CMap/GBT-V Resource/CMap/Adobe-Japan1-1 Resource/CMap/GBK-EUC-V Resource/CMap/Adobe-Japan1-2 Resource/CMap/Adobe-GB1-H-Host Resource/CMap/Adobe-Japan1-3 Resource/CMap/CNS03-RKSJ-H Resource/CMap/Adobe-Japan1-4 Resource/CMap/Adobe-Japan1-5 Resource/CMap/90ms-RKSJ-H Resource/CMap/Adobe-Japan1-6 Resource/CMap/Adobe-Korea1-KSCms-UHC Resource/CMap/UCS2-KSCpc-EUC Resource/CMap/Adobe-Japan1-PS-H Resource/CMap/GB-EUC-H Resource/CMap/H Resource/CMap/UniGB-UTF8-V Resource/CMap/B5-H Resource/CMap/Adobe-GB1-GBK-EUC Resource/CMap/Adobe-CNS1-H-CID Resource/CMap/90ms-RKSJ-V Resource/CMap/GBpc-EUC-UCS2C Resource/CMap/UniHojo-UTF16-H Resource/CMap/B5pc-UCS2 Resource/CMap/KSC-H Resource/CMap/Adobe-Japan1-PS-V Resource/CMap/GB-EUC-V Resource/CMap/B5pc-UCS2C Resource/CMap/Adobe-CNS1-ETenms-B5 Resource/CMap/B5-V Resource/CMap/Katakana Resource/CMap/HKdla-B5-H Resource/CMap/Identity-H Resource/CMap/UniHojo-UTF16-V Resource/CMap/CNS02-RKSJ-H Resource/CMap/GBKp-EUC-H Resource/CMap/KSC-V Resource/CMap/GBK2K-H Resource/CMap/UniCNS-UTF16-H Resource/CMap/HKdla-B5-V Resource/CMap/UniGB-UTF32-H Resource/CMap/Adobe-GB1-UCS2 Resource/CMap/Identity-V Resource/CMap/UniCNS-UCS2-H Resource/CMap/GBKp-EUC-V Resource/CMap/GBK2K-V Resource/CMap/Adobe-GB1-H-CID Resource/CMap/UniCNS-UTF16-V Resource/CMap/UniGB-UTF32-V Resource/CMap/Adobe-CNS1-0 Resource/CMap/Adobe-CNS1-1 Resource/CMap/Adobe-CNS1-2 Resource/CMap/Adobe-CNS1-H-Host Resource/CMap/Adobe-CNS1-3 Resource/CMap/UniCNS-UCS2-V Resource/CMap/GB-H Resource/CMap/Adobe-CNS1-4 Resource/CMap/Adobe-CNS1-5 Resource/CMap/CNS01-RKSJ-H Resource/CMap/Adobe-Japan2-0 Resource/CMap/KSCms-UHC-H Resource/CMap/Add-RKSJ-H Resource/CMap/GB-V Resource/CMap/KSCms-UHC-HW-H Resource/CMap/HKm314-B5-H Resource/CMap/KSCms-UHC-V Resource/CMap/Add-RKSJ-V Resource/CMap/UniCNS-UTF8-H Resource/CMap/KSCms-UHC-HW-V Resource/CMap/Adobe-Korea1-H-Mac Resource/CMap/HKm314-B5-V Resource/CMap/90pv-RKSJ-UCS2 Resource/CMap/Hankaku Resource/CMap/ETenms-B5-H Resource/CMap/ETen-B5-H Resource/CMap/UniCNS-UTF8-V Resource/CMap/KSCpc-EUC-UCS2 Resource/CMap/CNS1-H Resource/CMap/NWP-H Resource/CMap/Hojo-RKSJ-H Resource/CMap/UniGB-UTF16-H Resource/CMap/78-EUC-H Resource/CMap/ETenms-B5-V Resource/CMap/ETen-B5-V Resource/CMap/Adobe-Korea1-UCS2 Resource/CMap/Adobe-Korea1-KSCpc-EUC Resource/CMap/CNS1-V Resource/CMap/NWP-V Resource/CMap/90ms-RKSJ-UCS2 Resource/CMap/UniGB-UTF16-V Resource/CMap/78-EUC-V Resource/CMap/KSC-RKSJ-H Resource/CMap/Adobe-Japan1-90ms-RKSJ Resource/CMap/CNS-EUC-H Resource/CMap/ETHK-B5-H Resource/CMap/Ext-H Resource/CMap/CNS07-RKSJ-H Resource/CMap/KSC-Johab-H Resource/CMap/Adobe-Korea1-H-Host Resource/CMap/78ms-RKSJ-H Resource/CMap/GBTpc-EUC-H Resource/CMap/HK-RKSJ-H Resource/CMap/GBpc-EUC-UCS2 Resource/CMap/CNS-EUC-V Resource/CMap/ETHK-B5-V Resource/CMap/Ext-V Resource/CMap/KSC-Johab-V Resource/CMap/Adobe-Japan1-H-Mac Resource/CMap/UCS2-KSCms-UHC Resource/CMap/78ms-RKSJ-V Resource/CMap/UniHojo-UCS2-H Resource/CMap/GBTpc-EUC-V Resource/CMap/Adobe-Korea1-H-CID]

2009-09-18T23:01:07.032292Z Ralph Giles

Remove spurious executable bits on Adobe CMap files.

[Resource/CMap/Adobe-GB1-4 Resource/CMap/Adobe-Japan1-4 Resource/CMap/Adobe-Korea1-2 Resource/CMap/Adobe-CNS1-3]

2009-09-17T16:25:00.274251Z Henry Stiles

Fixes 690719 and many other unreported issues associated with the
wtsimdi device.  The default strip_copy_rop musn't be used, the clist
code will constant fold raster operations before determining if a
contone buffer is needed to render the band, the same optimizations
must be used when the clist is being played back and rendered, the
default strip_copy_rop does not (by design) have these optimizations.
I don't know the intent of the cryptic comment above the section where
the procedure override occurred.  

There are too many problems with the wtsimdi device to enumerate code
test file differences of the change, preliminary visual testing of the
wtsimdi device output is needed first.

[base/gdevwts.c]

2009-09-17T02:36:44.475667Z Marcos H. Woehrmann

Added a very quick and dirty hack to look for the link.icc and wts_plane_[0..3] files in /usr/local/lib/ghostscript if they cannot be found in the current directory.

[base/gdevwts.c]

2009-09-14T20:07:32.166692Z Alex Cherepanov

Fix a botched pointer comparison which fails if the pointer difference
overflows the signed integer range. Patch from Mark Davies with
changes. Bug 689711.

[base/gscencs.c]

2009-09-12T17:00:10.219852Z Marcos H. Woehrmann

Fixed typo in comment that was generating groff warning.

[psi/zfunc.c]

2009-09-10T17:41:10.637172Z Ralph Giles

Add gc enumeration to the two string members of the svgwrite device
structure. Fixes a segfault with large input sets. Bug 690757.

Note that this requires a new suffix enumerator macro, since the
two strings case wasn't previously covered.

[base/gsstruct.h base/gdevsvg.c]

2009-09-10T01:13:48.915848Z Ralph Giles

Call paperinit() and paperdone() when using the libpaper api calls
as apparently required by the API. However, these calls do nothing
in the current libpaper implementation (version 1.1.23).

Also, return the name given by defaultpapername() if systempapername()
does not return a result. This is an indicated path in the libpaper
documentation and example code, although again, the the 1.1.23
implementation calls defaultpapername() from systempapername() as
the fallback.

[base/gp_upapr.c]

2009-09-09T22:17:51.567693Z Michael Vrhel

Fix for bug 690534.  

DETAILS:

We now handle the softmask BC entry properly.  This background color is to be composited with the drawings into the softmask.  We now properly initialize the softmask buffer to have this compositing occur.  If we are outside the softmask bounding box then the luminance of the background color is used as the softmask value.  This fixes several rendering issues.

DIFFERENCES EXPECTED:

Bug690027.pdf  PROGRESSION
Bug688807.pdf  PROGRESSION
Bug690170a.pdf PROGRESSION
Bug690170.pdf  PROGRESSION

Bug690022.pdf  I would like a second opion on this one.  It looks like there may be a minor regression.  I am doing the commit anyway due to the large number of progressions with this fix.

[base/gdevp14.c base/gxblend1.c]

2009-09-09T06:21:02.373936Z Michael Vrhel

A fix for the rendering issue that occurred with bug 689581 after fixing the rangecheck error.  This should fix 689581.

DETAILS:

The rendering problem is evident when rendering the simplified file in 689581.   When going to a sep device, the softmask gray scale image is encoded using the compressed encoding function defined for the pdf14_CMYKspot_procs pdf14 device.  The decoder for the CMYKspot device is set to cmykspot_pdf14_procs.  Unfortunately, when the color procs are set for the softmask decode (based upon the softmask CMYK color space) the decoder was set to cmyk_pdf14_procs which resulted in an improper decode of the color values for the softmask.  The fix is to detect the presence of the separation case and make sure that the decoding procs are assigned appropriately.

DIFFERENCES EXPECTED:

None in the normal regression tests.  There could be some differences with sep devices when processing softmasks.

[base/gdevp14.c]

2009-09-09T01:25:59.649343Z Alex Cherepanov

Skip everything before 'begincodespacerange' in regulat CMap stream to avoid
PostScript errors in CMap headers. PDF interpreter doesn't need any data from
the header. See rev. 9240 for the bug 689842 that did the same for ToUnicode
CMap files. Bug 690737, customer 580.

[Resource/Init/pdf_font.ps]

2009-09-08T22:54:10.281044Z Michael Vrhel

Change to avoid having a rangecheck error occur when the softmask group colorspace is a pattern.   This keeps us from having the error occur with bug 689581 however there is still a rendering issue when we go to a sep device.  I have that narrowed down and hopefully will have fixed soon. 

DIFFERENCES EXPECTED   

None on the regression files.

[base/gstrans.c]

2009-09-08T17:58:20.444720Z Michael Vrhel

Removal of line that had the custom pdf14 prototype device used as the initial device for the CMYKSpot pdf14 device.

DIFERENCES EXPECTED:

None.

[base/gdevp14.c]

2009-09-07T20:25:11.850252Z Ralph Giles

Restore -dynamiclib to the MacOS framework build line.

I though the LDFLAGS_SO in unix-dll.mak would provide this in the
previous commit, but they do not.

Also rationalize the use use of SOPREF in macos-fw.mak.

[base/macos-fw.mak]

2009-09-07T20:10:46.938357Z Ralph Giles

Move the value passed to -install_name for the framework build
into unix-dll.mak to avoid also passing it when trying to link
the client where it conflicts.

[base/macos-fw.mak base/unix-dll.mak]

2009-09-07T19:51:20.071990Z Ralph Giles

Also update header source directories in the framework build.

[base/macos-fw.mak]

2009-09-07T19:13:21.625118Z Ralph Giles

Update the path to dxmain.c in the MacOS framework build.

This was omitted during the source tree split, when dxmain.c moved
into psi/. Bug 690394.

[base/macos-fw.mak]

2009-09-03T18:00:06.616356Z Marcos H. Woehrmann

Initial checkin of the local cluster scripts.

[toolbin/localcluster/setupcluster toolbin/localcluster/splitjobs.pl toolbin/localcluster/clustermaster.pl toolbin/localcluster/clusterpull.sh toolbin/localcluster/readlog.pl toolbin/localcluster/build.pl toolbin/localcluster/readme toolbin/localcluster/run.pl toolbin/localcluster toolbin/localcluster/compare.pl]

2009-09-02T16:18:07.841097Z Henry Stiles

The static initialization for memory structure types was not complete,
in some cases, failing to initialize the procedure data.  I suspect
this is harmless but didn't take the time to track down each use of
the faulty macros.

[base/gsstruct.h]

2009-09-01T18:55:55.532790Z Ralph Giles

Set a mime-type property on the new pdf documentation file so svn 
doesn't attempt to generate textual diffs for it.

[doc/Color_Architecture.pdf]

2009-09-01T18:10:02.037482Z Michael Vrhel

Changes to color architecture document based upon comments from Miles.

[doc/Color_Architecture.tex doc/figures/Overview.eps doc/Color_Architecture.pdf]

2009-09-01T16:59:40.570903Z Michael Vrhel

Addition of color architecture document (PDF) and its latex source and eps figures to document folder.

[doc/Color_Architecture.tex doc/figures/XPS_Integer_Gray_RGB_Image.eps doc/figures/Overview.eps doc/figures/XPS_DeviceN.eps doc/figures/PDF_Render.eps doc/figures/XPS_Render.eps doc/figures doc/figures/XPS_Vector_Color.eps doc/figures/XPS_RGB_Image_Float.eps doc/figures/PS_Spec.eps doc/Color_Architecture.pdf doc/figures/PS_Render.eps doc/figures/PDF_Spec.eps doc/figures/Ghost.eps]

2009-09-01T14:09:38.072790Z Ken Sharp

Fix (pdfwrite) : quiet a compiler warning

Details
Cast a long int to an unsigned int to prevent a compiler warning on a debug print 
operation.

[base/gdevpdtc.c]

2009-09-01T14:02:26.307800Z Ken Sharp

Fix (pdfwrite) : Remove some unused variables

Details
Flagged by the gcc compiler as unused, removed two variables.

[base/gdevpdfd.c]

2009-09-01T13:31:15.405830Z Ken Sharp

Fix (pdfwrite) : Minor compiler warning

Details
remove_table was not declared static, leading to a 'missing prototype' warning from the
compiler.

[base/gdevpsft.c]

2009-09-01T13:29:34.736595Z Ken Sharp

Fix : Minor compiler warnings

Details
subst_CID_on_WMode_enum_ptrs was not declared static leading to (benign) prototype
warnings. Also subst_CID_on_WMode_finalize was declared as returning an int, but
finalize procedures must be void.

[base/gsfcid.c]

2009-09-01T07:42:38.080497Z Ken Sharp

Fix (pdfwrite) : Silence Coverity warning

Details
The result of sscanf was not checked to see if at least one match was found. This is
benign because the data was initialised to 0 anyway. However it allows us an opportunity
to note the invalid annotation, which we now do.

[base/gdevpdfm.c]

2009-08-31T17:00:13.229845Z Ralph Giles

Pass the full CFLAGS to CCAUX in the autoconf build, instead of just
GCFLAGS. This propagates target-defining options which are typically
set in XCFLAGS to build utilities so that, for example, -m32 results
in the correct sizes in arch.h.

Note that this may complicate cross-compiles. In theory CCAUX has
separate, simpler flags because of this, but there are also several
examples in the documentation of using XCFLAGS this way, so this
seems to the the safer approach at this time.

The dynamic flags for the separate x11 devices module are also
passed through XCFLAGS but they do not harm other than cluttering
the command line.

[base/Makefile.in]

2009-08-28T17:22:50.739244Z Henry Stiles

New attributes required to fix 690736, the actual fix will be in the
next commit to PCL XL.  We can't update the trees simultaneously.

[base/gdevpxat.h]

2009-08-26T20:03:31.773651Z Alex Cherepanov

Work around a bug in PDF generated by "PdfWrapper v1.00" that sometimes
writes "." instead of "0." in content stream. Bug 690730.

[Resource/Init/pdf_draw.ps]

2009-08-25T08:18:02.437396Z Ken Sharp

Fix (pdfwrite) : Write ToUnicode CMaps with 2-byte code space ranges and keys

Details
Bug #690722 "Problem with the font embedding logic"

The existing ToUnicode CMap code wrote a ToUnicode CMap the same as a regular CMap, so
the code space ranges and keys could be arbitrary lengths depending on the number
of codes and their values. This appeared to be correct per the PDF Reference and the
CMap specification.

However, buried in technical note 5411, the 'ToUnicode Mapping File Tutorial' is a 
single reference:

"the following “codespacerange” definition, without exception, shall always be
used: 1 begincodespacerange  <0000> <FFFF>endcodespacerange"

This means that ToUnicode CMaps must be treated specially to ensure that they always
have 2 byte code space ranges and keys.

Modified the single allocation of ToUnicode CMaps so that it always specifies a 2
byte range.

[base/gdevpdte.c]

2009-08-21T19:40:48.371802Z Ray Johnston

Add check for NOTRANSPARENCY in patternusestransparency since this is also used
by resolvepattern in pdf_draw.ps. If this flag is set, but the pdf14 device is
not active, "unregistered" error occurs. Bug 690727 for customer 531.

[Resource/Init/pdf_main.ps]

2009-08-21T05:19:49.329915Z Alex Cherepanov

Ghostscript caches pattern instances in the pattern dictionary. This patch
doesn't cache anything in the null pattern dictionary because it's read-only.
Bug 690725.

[Resource/Init/pdf_ops.ps]

2009-08-19T16:22:08.241617Z Alex Cherepanov

Process embedded files as a portable collection only when /Collection
attribute is defined in the document root. Bug 690709.

DETAILS:
Collection atribute is marked in the spec as optional because a PDF file
need not to be a portable collection but every collection has /Collection
attribute.

[Resource/Init/pdf_main.ps]

2009-08-19T06:04:51.856837Z Ray Johnston

Simplify / reduce the ht rendering logic to remove the special cases where
the cache had 1 level per tile (which should now be the usual case) and the
case where there is only one tile (which means that the tile is 1Mb).

The special case handling of these cases does not result in any performance
improvement with the modern (1Mb) cache size and thus this is a code
simplification.

[base/gxht.c]

2009-08-19T06:00:39.095541Z Ray Johnston

Adjust ht cache allocation to a size that will actually be used by the
cache logic. The changes allow for replicating tiles along the width axis
up to a ulong multiple that optimizes tile blitting in the mem device
logic. Addresses bug 690693 by reducing the memory used from > 1Gb to
< 200 Mb. As noted in the comments to that bug, there still may be some
optimizations remaining.

DETAILS:
Reduces the allocation from over 1Gb for Special Test C1 of 09-40.PS to less
than 200Mb by reducing the ht cache size to what will actually be used. The
code in gxht.c initializes the cache limits the 'rep_count' to 8*sizeof(ulong)
so any more than that per tile (1+width*height) will not be used.

Debug code in gxht.c (gx_ht_init_cache) to check:

   if ( rep_count != (8 * sizeof(ulong)) )
       dprintf("non_optimal ht cache size\n");

never detected a different value, so the ht cache size should be optimal
with this patch -- neither too much nor too little allowed for the most
efficient width repetition. This was tested at a variety of resolutions from
72 to 1600 with several files that defined screens and also checked with
'stocht.ps' that the maximum ht cache size was chosen to fit. Also the cluster
regression shows no differences (I'd have been surprised if it did).

Note that the above test is _not_ part of the patch since it was only used for
evaluation.

Also see rev 8526.

[base/gsht.c]

2009-08-18T20:41:17.764580Z Ray Johnston

Add 'used' and 'max_used' information to the -Za output. This is handy for
investigating memory usage and only affects a debug build when -Za (or -ZA)
is used.

[base/gsmalloc.c]

2009-08-17T22:13:01.172961Z Henry Stiles

Improve diagnostics for detecting problems with virtual memory spaces
(see bug #688333).  The vm space id was not initilialized for all
allocations.  This change reduce the list from hundreds down to tens of
entries for a very simple postscript job.

[base/gsalloc.c]

2009-08-15T03:02:03.213076Z Alex Cherepanov

Fix rendering artifacts in interpolated images caused by intermediate bit 
buffer not reset when data get flushed to output buffer. Bug 689566.

[base/gsbitops.h]

2009-08-14T04:12:58.692182Z Alex Cherepanov

Remove code that tries to pause at the end of the .PFB binary data in an
attempt to keep from reading beyond the end of the encrypted data, sometimes
misidentifying the end of the actual data, and stopping early. Bug 465936.

DETAILS:
Since the eexec operator specifies that one never reads more than 256 bytes
ahead, and since the pad bytes are given in the text portion of a .PFB file,
in hexadecimal, there is no need to go to extra lengths to avoid reading
(too far) past the end of the eexec data. Thanks to Paul Vojta and Ray
Johnston for the path.

[base/seexec.c base/sfilter.h psi/zmisc1.c]

2009-08-14T00:33:11.113850Z Alex Cherepanov

Change literal /FontBBox array into executable one for better compatibility
with legacy software. QuarkXPress 3.31, idraw, and some versions of dvips
assume that /FontBBox is executable. Bugs 690683, 687120, customer 460.

[Resource/Font/URWPalladioL-BoldItal Resource/Font/NimbusSanL-Bold Resource/Font/NimbusRomNo9L-Medi Resource/Font/URWChanceryL-MediItal Resource/Font/CenturySchL-Roma Resource/Font/NimbusMonL-Bold Resource/Font/NimbusSanL-BoldItal Resource/Font/NimbusRomNo9L-MediItal Resource/Font/URWGothicL-Demi Resource/Font/URWBookmanL-DemiBold Resource/Font/NimbusRomNo9L-Regu Resource/Font/URWGothicL-Book Resource/Font/NimbusSanL-ReguCond Resource/Font/URWBookmanL-Ligh Resource/Font/CenturySchL-Bold Resource/Font/NimbusRomNo9L-ReguItal Resource/Font/URWBookmanL-DemiBoldItal Resource/Font/NimbusMonL-ReguObli Resource/Font/NimbusSanL-ReguCondItal Resource/Font/CenturySchL-Ital Resource/Font/URWPalladioL-Roma Resource/Font/CenturySchL-BoldItal Resource/Font/URWBookmanL-LighItal Resource/Font/NimbusSanL-BoldCond Resource/Font/NimbusSanL-BoldCondItal Resource/Font/NimbusMonL-BoldObli Resource/Font/URWGothicL-DemiObli Resource/Font/NimbusSanL-Regu Resource/Font/URWPalladioL-Bold Resource/Font/NimbusMonL-Regu Resource/Font/URWGothicL-BookObli Resource/Font/NimbusSanL-ReguItal Resource/Font/URWPalladioL-Ital]

2009-08-13T19:04:34.663531Z Alex Cherepanov

In hex form of eexec stream, break out of reading loop and try to interpret
the accumulated data when a whitespace character is encountered. Skip whitespace
characters when the control returns to /eexecDecode filter. Bug 689577.

DETAILS:
Normally, eexec stream is followed by a large number of 0's to compensate
for read-ahead effects. The code fragment that Adobe Acrobat uses to prevent
re-distilling of the file has no trailing 0's at all. This patch tries to guess
the end of eexec stream after every whitespace character.

[base/sstring.c base/seexec.c base/sfilter.h base/strimpl.h]

2009-08-13T14:58:04.684321Z Ken Sharp

(empty)

[base/gdevpdfm.c base/gdevpdfc.c base/gdevpdft.c base/gdevpdfu.c base/gdevpdfv.c base/gdevpdfg.c base/gdevpdfi.c]

2009-08-13T07:57:02.889637Z Ken Sharp

Fix (pdfwrite) : Check pointer before dereferencing

Details
Bug #690704 "Regression: seg fault with pdfwrite"

The pdfwrite mask image handling assumed that if certain conditions were met then an
image related to text, and attempted to use a stored text enumerator. It did not,
however, check the stored pointer before dereferencing it.

Added a check to see the pointer is non-NULL before deciding that the image refers to
text.

[base/gdevpdfb.c]

2009-08-12T07:09:40.485630Z Ken Sharp

Fix (pdfwrite): Writing invalid numbers for linecap and linejoin parameters

Details:
bug #690691: "setlinecap"

pdfwrite was emitting the linecap and linejoin values directly from the graphics
state to the output PDF file. However the GS graphics state also supports the
additional PCL linecap and linejoin values, which are not supported in PDF. This
resulted in PDF files with illegal values.

Modified the code to replace tringle linecaps with round linecaps, triangle line
joins with miter joins and none joins with bevel joins. These are not correct but
are reasonable solutions for now. We should degenerate 'none' joins into a 
sequence of discrete paths.

Also added future protection by converting unknown values of linecap into butt
line caps and unknown values of linejoin into miter line joins. In both cases
a debug warning is emitted.

[base/gdevpsdu.c]

2009-08-11T15:47:12.926634Z Alex Cherepanov

Stop processing of embedded Type 1 font as soon as operator eexec returns.
Skip the trailer that may be truncated or corrupted. Bug 690701, customer 780.

[Resource/Init/pdf_font.ps]

2009-08-11T15:10:57.046923Z Henry Stiles

The debugging code to dump an allocator crashed when printing
references, also add a convenience function so it can be easily called
from the debugger and a reminder in ilocate.  All debugging changes,
no expected differences.

[base/gxalloc.h psi/ilocate.c base/gsalloc.c]

2009-08-11T04:11:32.968611Z Alex Cherepanov

Reorder a logical expression in bbox device to avoid evaluation of
uninitialized part. Fix a Purify warning.

[base/gdevbbox.c]

2009-08-10T23:29:24.006231Z Henry Stiles

Adds a new memory device constructor
(gs_make_mem_device_with_copydevice) to replace gs_make_mem_device and
fixes several device reference counting problems (leaks) which
affected all the the client languages.  No expected visual
differences.

[base/gdevdrop.c base/gxpcmap.c base/gxdevmem.h base/gdevmem.c]

2009-08-10T18:52:21.508883Z Henry Stiles

Add a new memory device constructor which uses copydevice.

[base/lib.mak base/gxdevmem.h base/gdevmem.c]

2009-08-07T18:29:05.729614Z Ralph Giles

Propagate LDFLAGS to the shared library gs client link command lines
in the the autoconf build. Bug 690695.

[base/unix-dll.mak]

2009-08-07T14:08:57.827147Z Ken Sharp

Fix a benign type cast warning from MSVC 2008 by explicitly casting the glyph name.

[base/gdevpdtd.c]

2009-08-07T13:54:04.799461Z Ken Sharp

Inadvertently left a line commented out (with a C++ style comment!) which should have
been removed. Apologies all round.

[base/gdevpdtd.c]

2009-08-07T13:46:58.208375Z Ken Sharp

Fix (pdfwrite) : Embedded TrueType fonts not correctly flagged as Symbolic

Details
Bug #690688 "-dSubsetFonts=false produces incorrect PDF file"

The method Acrobat uses to select glyphs from TrueType fonts is arcane and dependent
on the setting of the Symbolic/non-symbolic flags. When we subset a font the encoding
is always created incompatible with StandardEncoding, and so we mark the font as
Symbolic.

However, if we embed the entire font, we try to decide if its symbolic or not. To do
this we check the names of all the used glyphs to see if they are in StandardEncoding
and if they all are we start by assuming the font is *not* symbolic (there are other
checks).

However, there were a number of problems with this check. Firstly the reverse encoding 
which is used to do the work does not contain the .notdef glyph, which *should* have
meant that all fonts were incorrectly marked as symbolic. The only reason it didn't
is because the return value from the routine gs_c_decode was checked against 
gs_no_glyph to see if it failed to match. But gs_c_decode actually returns GS_NO_CHAR
in this case.

So the test was incorrect, and never correctly detected that a glyph was not in 
StandardEncoding.

The test is also insufficient, in addition to being present in the font, the glyph must
also be encoded at the correct position in StandardEncoding, the font in this job 
contains glyphs whose names are all in StandardEncoding, but they are not encoded at the
normal positions, so the font *should* be marked symbolic.

This patch skips the test for the .notdef glyph, correctly checks the return value
from gs_c_decode, and adds the test against the encoding position.

[base/gdevpdtd.c]

2009-08-06T17:14:10.510938Z Michael Vrhel

Fix for bug 690670.  Softmask color space was incorrectly getting set to DeviceN when the color space was undefined for the group and the output device was a separation device.

DETAILS:

For a transparency group, this method is OK as we blend the individual channels as defined in the PDF spec.  For a mask, this is not OK, since we have to map to luminosity and the mapping from the process + spot colors to luminosity is not defined.  Solution is to use the concrete space of the current space of the imager state for the softmask for this situation.  

DIFFERENCES EXPECTED:

None

[base/gstrans.c]

2009-08-05T22:12:58.428110Z Marcos H. Woehrmann

Reverts r8510, r8511, r8513, r8597.  

Details

This is a fix for bug 690396; a customer bug involving a clipping path
combined with a shading fill.  The original changes were a minor (20%)
optimization that was a non customer performance enhancement.

[base/gsptype2.c base/gsptype2.h base/gximask.c base/gxfill.c]

2009-08-04T01:32:50.525295Z Henry Stiles

Fixes a regression with revision 5219, the log for this revision says:

  "Valid memory pointer used create a tile_clip device instead of
  NULL"

Unfortunately the tile clip device is created on the c stack and
should not get a non null memory pointer.  Later in gxcht.c this same
device memory pointer is used to get a gs id, maybe this was the real
motivation for the change.  We now use the device halftone memory
pointer and the device is initialized with a NULL memory pointer as
expected.

[base/gxcht.c base/gxp1fill.c]

2009-08-03T03:09:50.293548Z Alex Cherepanov

Add missing initialization of the path rule member during setting up
the stack-allocated clipping path structure. Fix a Purify warning.

[base/gxcpath.c]

2009-08-02T23:55:26.536287Z Alex Cherepanov

Remove a line that has no effect other than causing frequent Purify warning
and puzzling the reader.

[base/ttfmain.c]

2009-08-02T23:50:02.458497Z Alex Cherepanov

Fully initialize CFD stream state. Fix a Purify warning in 23-12B.PS and
stop printing wild core instead of error messages.

[base/scfx.h]

2009-08-02T23:16:26.642637Z Alex Cherepanov

Fix all remaining MSVC warning other than C4018 or C4244 that have little
value and should be suppressed. Bug 690660.

[base/gdevp14.c psi/zcid.c base/gdevpdti.h base/gxacpath.c base/gxpcolor.h libpng/pngwio.c]

2009-08-01T03:14:53.314562Z Alex Cherepanov

Fix a common Purify warning; skip calculations with uninitialized values
during processing an empty glyph, such as /space .

[base/gxhintn.c]

2009-08-01T03:02:47.627968Z Alex Cherepanov

Swap transposed code fragments in image interpolation logic. Old code missed
some optimizations and could cause wrong rendering. Clear a Purify warning
about uninitialized memory access running 148-11.ps.

[base/gxiscale.c]

2009-08-01T02:46:33.092104Z Alex Cherepanov

Fix yet another case of missing dereference of indirect objects. Bug 690675.

[Resource/Init/pdf_draw.ps]

2009-08-01T02:41:03.067359Z Alex Cherepanov

Fix processing of -dUseCropBox that was broken by the rev. 9805.
Old code messed up the operand stack when -dUseCropBox was requested but no
/CropBox attribute was in the PDF file. Bug 690676, customer 330.

[Resource/Init/pdf_main.ps]

2009-08-01T00:31:06.505318Z Ralph Giles

Remove a reference to the obsolete AFPL license text.

[doc/Release.htm]

2009-08-01T00:31:04.401366Z Ralph Giles

Remove an unnecessary header file.

[psi/int.mak psi/igc.c]

2009-08-01T00:27:25.216685Z Ralph Giles

Bump version after the 8.70 release.

[base/gscdef.c base/version.mak Resource/Init/gs_init.ps doc/News.htm]

2009-07-31T18:06:12.135189Z Ralph Giles

Update changelogs and open bug numbers for 8.70 final.

[doc/History8.htm doc/News.htm doc/Details8.htm]

Version 8.70 (2009-07-31)

This is the first release in a new stable series of Ghostscript releases. The GhostPDL release number has been set to 8.70 as well, to make it easier to identify corresponding releases.

This release fixes a large number of issues with transparency, especially as it interacts with color space conversion, mask contexts and patterns. There have also been a number of significant fixes to font handling, especially when generating PDF. And there are numerous robustness, correctness and performance improvements.

New generic Esc/Page devices, eplmono and eplcolor were added to the contrib directory. A new cdnj500 device was added to support the HP DesignJet 500.

The licensing of the Free version of the core Ghostscript code has been changed to GPLv3 or later. Previously, the core code was GPLv2 only. Ghostscript can now be used with GPLv3 applications, and can no longer be used with applications that are GPLv2-only.

This release also includes security fixes addressing CVE-2009-0583 and CVE-2009-0792.

The following bugs were open at the time of release:

226943, 430175, 465936, 493348, 535932, 567421, 578865, 614298, 626295, 686853, 686865, 687084, 687095, 687146, 687193, 687257, 687271, 687280, 687295, 687297, 687327, 687375, 687414, 687475, 687492, 687514, 687520, 687536, 687561, 687593, 687608, 687630, 687650, 687666, 687674, 687677, 687695, 687697, 687702, 687715, 687721, 687728, 687731, 687775, 687780, 687782, 687793, 687796, 687805, 687887, 687903, 687904, 687915, 687931, 687950, 687981, 687983, 688007, 688022, 688024, 688026, 688036, 688042, 688064, 688081, 688130, 688166, 688184, 688187, 688204, 688210, 688215, 688227, 688267, 688269, 688280, 688288, 688312, 688318, 688320, 688333, 688361, 688363, 688372, 688386, 688387, 688389, 688395, 688413, 688436, 688437, 688440, 688448, 688475, 688483, 688495, 688528, 688533, 688539, 688540, 688542, 688557, 688565, 688580, 688581, 688604, 688605, 688616, 688617, 688627, 688636, 688638, 688647, 688651, 688655, 688673, 688699, 688709, 688710, 688714, 688731, 688757, 688777, 688797, 688818, 688829, 688843, 688845, 688846, 688871, 688872, 688926, 688933, 688942, 688949, 688969, 688978, 688990, 688994, 688999, 689003, 689011, 689013, 689025, 689031, 689032, 689040, 689044, 689046, 689048, 689057, 689076, 689077, 689078, 689093, 689094, 689098, 689133, 689137, 689145, 689150, 689153, 689161, 689167, 689184, 689188, 689195, 689199, 689222, 689224, 689236, 689247, 689248, 689252, 689253, 689278, 689279, 689283, 689289, 689290, 689308, 689331, 689335, 689340, 689341, 689376, 689378, 689392, 689396, 689418, 689419, 689421, 689423, 689439, 689450, 689451, 689456, 689460, 689484, 689487, 689489, 689490, 689498, 689500, 689502, 689506, 689507, 689512, 689518, 689522, 689546, 689549, 689554, 689557, 689560, 689566, 689577, 689581, 689584, 689585, 689591, 689592, 689595, 689598, 689601, 689606, 689616, 689625, 689627, 689636, 689641, 689653, 689658, 689663, 689670, 689674, 689681, 689682, 689684, 689689, 689690, 689691, 689697, 689698, 689704, 689705, 689709, 689710, 689711, 689715, 689721, 689725, 689726, 689734, 689737, 689741, 689756, 689759, 689761, 689767, 689772, 689775, 689778, 689781, 689786, 689792, 689793, 689794, 689799, 689801, 689805, 689808, 689823, 689836, 689840, 689853, 689856, 689858, 689859, 689860, 689861, 689862, 689868, 689869, 689870, 689871, 689878, 689883, 689885, 689910, 689915, 689916, 689917, 689928, 689930, 689933, 689937, 689938, 689939, 689940, 689941, 689942, 689943, 689947, 689950, 689951, 689957, 689969, 689972, 689974, 689980, 689986, 689991, 689996, 689997, 690003, 690005, 690007, 690009, 690020, 690024, 690025, 690026, 690029, 690033, 690036, 690043, 690053, 690054, 690061, 690066, 690068, 690069, 690073, 690083, 690084, 690085, 690093, 690094, 690098, 690110, 690119, 690125, 690126, 690131, 690132, 690137, 690143, 690146, 690160, 690162, 690171, 690176, 690180, 690182, 690191, 690192, 690199, 690200, 690207, 690208, 690212, 690214, 690216, 690224, 690226, 690229, 690235, 690241, 690246, 690249, 690250, 690251, 690253, 690261, 690262, 690265, 690268, 690275, 690278, 690281, 690282, 690285, 690290, 690293, 690294, 690296, 690297, 690299, 690320, 690322, 690324, 690325, 690328, 690329, 690333, 690339, 690340, 690345, 690346, 690351, 690356, 690360, 690366, 690369, 690375, 690384, 690392, 690393, 690394, 690396, 690398, 690406, 690409, 690412, 690413, 690415, 690417, 690419, 690428, 690429, 690435, 690436, 690441, 690442, 690444, 690445, 690446, 690448, 690451, 690453, 690455, 690462, 690466, 690468, 690469, 690470, 690471, 690473, 690476, 690477, 690479, 690482, 690485, 690486, 690487, 690490, 690496, 690497, 690499, 690504, 690506, 690508, 690519, 690524, 690526, 690530, 690531, 690534, 690535, 690536, 690537, 690538, 690541, 690543, 690544, 690545, 690549, 690551, 690552, 690553, 690554, 690556, 690557, 690559, 690560, 690561, 690562, 690563, 690564, 690565, 690566, 690567, 690568, 690569, 690570, 690571, 690572, 690573, 690575, 690578, 690580, 690581, 690585, 690594, 690595, 690596, 690598, 690600, 690601, 690602, 690603, 690604, 690605, 690606, 690607, 690610, 690612, 690615, 690617, 690620, 690621, 690622, 690626, 690627, 690630, 690631, 690633, 690636, 690638, 690639, 690641, 690642, 690643, 690646, 690649, 690650, 690651, 690652, 690653, 690658, 690661, 690664, 690665, 690667, 690668, 690669, 690670, 690671, 690673, 690674, 690675, 690676.

Incompatible changes

The size of PostScript integers has been limited to 32 bits. Previously they used the C long type resulting in 64 bits of precision on LP64 systems (like Linux on x86_64). As of this release all platforms match the recommended implementation limits in the specification.

Changelog

2009-07-31T17:56:00.606748Z Ralph Giles

Bump release date for the final 8.70.

[doc/History7.htm doc/Projects.htm doc/History8.htm man/dvipdf.1 man/ps2ascii.1 doc/Use.htm doc/Readme.htm doc/Source.htm doc/Deprecated.htm man/ps2epsi.1 doc/Install.htm doc/API.htm doc/Issues.htm doc/DLL.htm doc/Drivers.htm man/pfbtopfa.1 doc/Release.htm doc/Commprod.htm doc/Xfonts.htm doc/Devices.htm doc/Language.htm man/gs.1 man/pf2afm.1 doc/Fonts.htm doc/Ps2ps2.htm man/printafm.1 doc/Ps2pdf.htm doc/Develop.htm doc/Helpers.htm man/pdf2dsc.1 doc/Psfiles.htm doc/Lib.htm doc/gs-vms.hlp man/font2c.1 man/gsnd.1 base/version.mak man/pdfopt.1 doc/News.htm man/pdf2ps.1 man/ps2pdf.1 doc/Make.htm doc/Details8.htm doc/Unix-lpr.htm doc/C-style.htm doc/Ps-style.htm doc/History1.htm doc/History2.htm man/gslp.1 man/wftopfa.1 doc/History3.htm man/ps2ps.1 doc/Ps2epsi.htm doc/History4.htm man/ps2pdfwr.1 doc/History5.htm doc/History6.htm]

2009-07-30T22:33:02.933395Z Ralph Giles

Update the release notes for the licensing change.

[doc/History8.htm doc/News.htm doc/Details8.htm]

2009-07-30T22:31:07.319480Z Ralph Giles

Relicense GPL Ghostscript under the GPLv3 or later.

[doc/COPYING LICENSE]

2009-07-28T19:46:52.330831Z Ralph Giles

Update change logs for 8.70rc1.

[doc/Changes.htm doc/History8.htm doc/News.htm doc/Details8.htm doc/Details.htm]

2009-07-28T19:35:06.647161Z Ralph Giles

Update release version and date for 8.70rc1.

[doc/History7.htm doc/Projects.htm doc/History8.htm man/dvipdf.1 base/gscdef.c man/ps2ascii.1 doc/Use.htm doc/Readme.htm doc/Source.htm doc/Deprecated.htm man/ps2epsi.1 doc/Install.htm doc/API.htm doc/Issues.htm doc/DLL.htm doc/Drivers.htm man/pfbtopfa.1 doc/Release.htm doc/Commprod.htm doc/Xfonts.htm doc/Devices.htm doc/Language.htm man/gs.1 man/pf2afm.1 doc/Fonts.htm doc/Ps2ps2.htm man/printafm.1 doc/Ps2pdf.htm doc/Develop.htm doc/Helpers.htm man/pdf2dsc.1 doc/Psfiles.htm doc/Lib.htm doc/gs-vms.hlp man/font2c.1 man/gsnd.1 man/pdfopt.1 doc/News.htm man/pdf2ps.1 man/ps2pdf.1 doc/Make.htm doc/Details8.htm doc/Unix-lpr.htm doc/C-style.htm doc/Ps-style.htm doc/History1.htm doc/History2.htm man/gslp.1 man/wftopfa.1 doc/History3.htm man/ps2ps.1 doc/Ps2epsi.htm doc/History4.htm man/ps2pdfwr.1 doc/History5.htm doc/History6.htm]

2009-07-28T19:30:52.619540Z Ralph Giles

Document the cat.ps utility.

[doc/Psfiles.htm]

2009-07-28T19:11:13.726309Z Ralph Giles

Add release notes for 8.70rc1.

[doc/News.htm]

2009-07-28T18:20:58.792176Z Alex Cherepanov

Change the operand types of encode_binary_token() to match the
the type of PostScript integers in the ref structure. Bug 690660.

[psi/iscanbin.c psi/btoken.h]

2009-07-28T17:16:43.839663Z Ralph Giles

Bump the release number to 8.70.

The numerous transparency and smask fixes justify a new minor number.

[base/version.mak Resource/Init/gs_init.ps doc/News.htm]

2009-07-28T16:55:34.923668Z Alex Cherepanov

Fix incorrect right shift on 64-bit platforms. PLRM defines bitshift operator
as a logical shift. On 64-bit platform, the integer operand was promoted to
64-bit long value, shifted, and assigned back to 32-bit int, effectively
emulating the sign extension.

[psi/zrelbit.c]

2009-07-28T16:49:26.940894Z Ralph Giles

Work around problems with XInitImage and large rasters.

Patch from Russ Cox, fixes Bugs 689547 and 689561.

Details:

The patch sets bitmap_pad, and passes 0 for bytes_per_line in
cases were current xorg can correctly generate a value. Russ writes:

I have tracked down the problem, and it appears to be a bad interaction
between
gs and recent sanity checking in the X library.

In particular, sometimes x_copy_image in gdevx.c gets called with wide
widths but narrow raster values.  Even though the raster is apparently
wrong, the X graphics operations would work okay with that value.  But
new versions of X11 have various checks in XInitImage, one of which is
that the raster is greater than or equal to the width of the image times
the depth.

To see that this diagnosis is correct, replacing the call to XInitImage
with a call to _XInitImageFuncPtrs (which is just XInitImage without the
sanity checking) makes gs start working.  But of course
_XInitImageFuncPtrs is not a public interface function and thus probably
not the best fix.  Replacing the "bytes_per_line = raster" with
"bytes_per_line = 0" (which makes X compute the value from width and
depth) works fine in the zoom levels that would otherwise crash but
causes the previously-working zoom levels to shear the image (or worse),
presumably because the "obvious" raster is not the right one at those
levels.

Also, the new XInitImage also requires bitmap_pad be set always.

The patch below also fixes the problem -- I can run "gv pprof.ps" at all
zoom levels, and I can also zoom into regular documents.

Perhaps it is not the right fix -- perhaps the actual bug is that
x_copy_image is being called with a bad raster value in the first place.
But it does work.

[base/gdevx.c]

2009-07-28T16:20:51.749226Z Ken Sharp

Fix (pdfwrite): Excessive redefinitions of CIDFonts causing memory exhaustion

Details:
bug #690642: "conversion to PDF aborts after 800 pages"

When instantiating a CIDFont with TrueType outlines, the TrueType interpretation code
tries to name the font using the name table from the TrueType font. If there is no name
table (as is the case for CIDFonts with TT outlines) it instead uses the XUID as the
name.

The XUID is incremented on every use, this means that each time the font is instantiated
(up to once per page when the job is PDF) we create a new CIDFont with a new name.
pdfwrite is unable to determine that these are all in fact the same original font, and
creates many fonts in the output file, eventually leading to memory exhaustion.

This change creates a new key in the current dictionary '/PDFCIDFontName', while
processing a CIDFont with TrueType outlines for a PDF file, which is the same as the
CIDFont BaseFont name. Since PDF can only have one descendant font per CIDFont this
should not cause name collisions. To avoid interference with PostScript the key is
removed from the current dictionary after use.

In the TrueType interpreter, if we are handling a CIDRFont then after loading the TT
tables we check to see if /PDFCIDFontName is defined. If it is we use it to replace the
/FontName and /CIFontName values. This means we only ever create the font with a single
name, which avoids the confusion with pdfwrite.

With this change pdfwrite only emits a single font and, usefully, it has the same name
as the font in the original PDF file. 

[Resource/Init/pdf_font.ps Resource/Init/gs_ttf.ps]

2009-07-28T07:48:19.388013Z Ralph Giles

Add bounds checking to various icclib functions.

Based on a set of patches by Jan Lieskovsky at Red Hat,
addressing CVE-2009-0583 and CVE-2009-0792.

Details:

Various _get_size and _write methods in icclib 2.01 were vulnerable to
integer overflow from corrupt or malicious profile data. This commit
makes a number of changes to address this.

First, it enforces bounds checking on array indicies generated through
tag data lookup or floating point calculations, either throwing an error
or clamping, depending on the context.

Second, it converts a number of malloc(nelement*size) calls into
calloc(nelements, size), passing responsibility for overflow control
to the standard library. This works on recent glibc, MacOS 10.4 (at
least) and MSVC 2005 (at least; I believe MSVC 6 doesn't check for
overflow). Systems which overcommit memory allocations generally also
lazily zero pages, so the performance implications of an overflow in
calloc() resulting in a huge allocation (or the same happening at the
request of corrupt or malicious ICC profile data) are not as bad as
might appear relative to the original malloc(). From the other side,
multi-processing systems must often zero pages delivered to malloc
anyway to prevent information leakage.

On top of Jan's patches, this commit uses a fallback for SIZE_MAX, a
stdint.h define which isn't available on all platforms (notably MSVC),
and changes a number error message to match the malloc->calloc changes.

It fixes a serious bug where the new error checking code incorrectly
rejected valid profiles with an MLUT but no black point tag.
icc_get_luobj() always tried to load the black point tag, and if it
wasn't found, icc_read_tag() would set an error flag, which was later
picked up in icmLut_read() by the check added for the results of
icmLut_get_size(). Since the black point tag is optional, and icclib
already substitutes a default (0,0,0) black point if none is contained
in the profile, we just reset the error condition within
icc_get_luobj(). vtm2k.pdf is a good testfile for this issue.

Likewise, the length of lookup tables was limited to 100 points, as a 
resource consumption constraint, but the spec allows LUTs with up
to 255 points. Bug690495.pdf from the regression suite triggered
this problem.

Thanks to Michael Vrhel for these last two fixes.

[icclib/icc.c]

2009-07-27T16:59:50.188520Z Till Kamppeter

Update of the Esc/Page laser printer drivers from Epson and Avasys, new output devices "eplmono" and "eplcolor", and new media types.

[contrib/contrib.mak contrib/eplaser/gdevescv.h base/configure.ac contrib/eplaser/gdevescv.c]

2009-07-27T00:30:35.025070Z Marcos H. Woehrmann

The fill adjustment change in r9882 was too great; this rev changes it to 0.3 (from the original 0.25).

[base/gsstate.c]

2009-07-24T19:03:05.883160Z Ray Johnston

Add some debug that can be handy in tracing memory usage with the chunk manager.
This code has not effect on non-debug builds.

[base/gsmchunk.c]

2009-07-24T14:21:19.243209Z Ken Sharp

Fix (pdfwrite) : Incorrect table in /Unicode /Decoding Resource

Details
Bug #690648 "many incorrectly encoded Latin Extended-A characters"

The job in this issue contains a subset incrementally downloaded TrueType font where
the Encoding is such that the first glyph encountered is encoded at character
position 1, the second at position two and so on. In addition there is no
GlyphNames2Unicode dictionary.

pdfwrite tries, whenever possible, to write a ToUnicode CMap into the output PDF file
which allows Acrobat and other consumers to copy and paste text using Unicode values.
Since there is no Unicode information in the file, and the Encoding is distinctly 
non-standard, we fall all the way back to using the glyph names as a last ditch
attempt to generate the Unicode information.

This relies on the /Unicode /decoding resource, it seems that many glyphs in this
resource were (and possibly still may be) encoded at the wrong Unicode code points. 
This patch fixes the glyphs raised in the bug report, there may be others.

[Resource/Decoding/Unicode]

2009-07-23T17:34:17.505092Z Henry Stiles

Temporarily address bug #690646 with a fatter fill adjustment default.
This will only affect tests with resolutions less than 150 dpi.  The
change makes superfluous code in gs_init.ps which initializes the
default fill adjust to .5 iff the resolution is greater than or equal
to 150 dpi.

[base/gsstate.c]

2009-07-22T21:09:42.692668Z Michael Vrhel

The commits provides proper transparency support for fills with patterns that contain transparency. This is a merge of the pattern_trans branch into the trunk. 

DETAILS:

When a pattern contains a transparency, it should be blended with the underlying objects according to the current extended graphic state settings (e.g. knockout, blend mode etc).  Prior to this commit, patterns with transparency behaved always as knockout fills.  This fixes Bug 690467 and fixes issues for files that contain transparency patterns in the regression suite when using the pbm output device.
When a transparency is present in a pattern, a pdf14 device is pushed.  Pattern accumulation will then occur in the transparency buffer.  When the accumulation completes, the buffer that is created is no longer passed to the pattern tile object gx_pattern_trans_t through pdf14_put_image, but instead the buffer and various details about the buffer are placed in the existing planar form into a new member of gx_pattern_trans_t called ttrans.  
When a  path is to be filled with the pattern, we will be in pdf14_fill_path.  If the color to fill with is of type pattern1_color, then we will do a call to pdf14_tile_pattern_fill which pushes a transparency group the size of the path that we are filling, in the base color space of the tile.  We decompose the path to a rectangle list which is then filled using gx_trans_pattern_fill_rect.  If the fill is simple, i.e. if the tile step size and tile size are the same, then a straight forward non-overlapping fill of the rectangle occurs.  Otherwise a more complex filling occurs where the tiles may overlap.  If the tiles overlap, then blending will need to occur.  Optimizations were implemented to avoid blending if it is not required.  In addition, memcpy was used for the inner loop filling (rows) when dealing with the non overlapped case.  Going from planar data in the tile buffer to planar data in the transparency group that we are filling is much more efficient then switching between planar to chunky and back to planar like we would have had to do if we had used pdf14_put_image and stored the tile data in the buffer that is used for the nontransparency case.  Once the fill completes, the transparency group is popped, which will perform the appropriate blending with the parent group in the proper color space.
Currently it is not allowed to have the transparency tile stored as a clist.  Instead the tile is always stored in the ttrans object.  It would probably be worthwhile to fix this at some point.  When we are doing clist processing, code was added to write  (gx_dc_pattern_trans_write_raster) and read (gx_dc_pattern_read_trans_buff) the ttrans object to and from the clist.  

DIFFERENCES EXPECTED:

tests_private/comparefiles/Bug688631.pdf (pbmraw 600dpi) tests_private/comparefiles/Bug688728a.pdf (pbmraw 600dpi) tests_private/comparefiles/Bug688728b.pdf (pbmraw 600dpi)
tests_private/comparefiles/Bug689422.pdf (ppmraw 600dpi)
tests_private/comparefiles/Bug689422.pdf (pkmraw 600dpi)
tests_private/comparefiles/Bug688728.pdf (pbmraw 600dpi)

[psi/zpcolor.c base/gdevp14.c base/gsptype1.c base/lib.mak base/gdevp14.h base/gxpcmap.c base/gsptype1.h psi/int.mak base/gxpcolor.h base/gxcolor2.h /trunk/gs base/gxp1fill.c]

2009-07-21T13:43:27.037336Z Ken Sharp

Enhancement (pdfwrite) : Add a new switch 'PDFACompatibilityPolicy to control PDF/A
creation when encountering invalid content.

Details
Bug #690500 "gs 8.63. Option dPDFA generating no pdf/a compliant files because of F
key." 

In the reported issue the input PDF file contains a Link annotation with no /F (Flags)
key defined. PDF/A states that only annotations with the 'Print' bit of the Flags field
are permitted. pdfwrite was emitting the annotation, thus creating an invalid PDF/A
file.

The new switch PDFCompatibilityPolicy allows the user to select the behaviour for these
kinds of events. The value defaults to 0, where the behaviour matches Acrobat, the file
is created, but is not PDF/A compliant, a warning to this effect is given. When set to
1, the content will be omitted, resulting in a compliant PDF/A file, a warning is
given for each piece of omitted content. Values other than 0 or 1 are treated as 0 and
a warning is given that the value is not understood.

Currently only implemented for annotations, it is expected this will be extended over
time.

[base/gdevpdfm.c base/gdevpdfx.h base/gdevpdfp.c doc/Ps2pdf.htm base/gdevpdfb.h]

2009-07-21T04:50:01.508924Z Alex Cherepanov

Add output buffer alignment code to one of the image handling branches
where it was omitted. Fix a SEGV on Sparc platform that cannot access
misaligned data. Bug 690613.

[base/gxiscale.c]

2009-07-20T05:10:46.340795Z Alex Cherepanov

Unobfuscate image scaling code: remove dead code, expand macros and typedefs.
All changes are algorithmically equivalent.

[base/siscale.c]

2009-07-19T03:58:54.979499Z Alex Cherepanov

Fix a typo in compile time flag that prevented GNU libiconv to emulate
system libiconv and caused link errors on the systems that use GNU headers
but system libraries. Bug 690123.

[contrib/opvp/gdevopvp.c]

2009-07-17T15:19:24.111289Z Alex Cherepanov

Initialize bit accumulator in LZW encoder to clear a Purify warning about
using an uninitialised value in an expression. The value itself is unimportant
because all bits that may affect the result are shifted out.

[base/slzwe.c]

2009-07-17T14:00:35.203729Z Alex Cherepanov

Fix processiong of numeric entry in /W2 array. Bug 690635.

[Resource/Init/pdf_font.ps]

2009-07-15T13:07:48.754703Z Ken Sharp

Fix (pdfwrite): Crash with font errors.

Details:
bug #690505: "Regression: More issues with pdfwrite and various nightly regression
files"

The font 'encode_char' method can return a 0 error code, but set the returned glyph
name to 'gs_no_glyph' to indicate that a glyph could nto be found in a valid font.

pdfwrite was then trying to get the glyph information for the 'gs_no_glyph' glyph, which
caused a crash in dict_index. Fixed by detecting the gs_no_glyph and returning an error.

[base/gdevpdte.c]

2009-07-14T03:35:22.419126Z Alex Cherepanov

Switch the order of an assignment and condition to fix (harmless) reading of
uninitialized memory. Clear a Purify warning.

[base/gxhintn.c]

2009-07-13T01:50:06.521945Z Ray Johnston

Add a couple of utilities for extracting Fonts and ICC Profiles from a
PDF. I had these laying around and the need for these comes up from 
time to time. See the top of each PostScript file for usage.

DETAILS:

It is the responsibility of creators of PDF's to not embed fonts that
are identified as not to be embedded. Ghostscript (as of rev 8603)
respects the TrueType FSType FontInfo.

The copyright and license of fonts and ICC profiles in a PDF will
still be in force. Any knowledgeable user can use Ghostscript
(or many other tools) to extract this information. We provide this
utility mostly to provide the 'source' for GPL'ed fonts as required
by fonts. Fonts are programs and distribution requires distribution
of 'source', so this lets users get the source and (using a font
editor) modify the font. See bug 690533 (if you must).

[toolbin/extractICCprofiles.ps toolbin/extractFonts.ps]

2009-07-11T17:49:45.436921Z Ralph Giles

Change the GPL Ghostscript license to GPLv2 or later, instead of GPLv2-only.

[LICENSE]

2009-07-09T13:09:11.914398Z Alex Cherepanov

Don't take empty string for an answer when searching 'name' table in TrueType
font because some MS fonts have empty strings for platform IDs MS doesn't
use. Bug 690611, customer 0.

[Resource/Init/gs_ttf.ps]

2009-07-09T05:59:44.622957Z Henry Stiles

Remove ad hoc code to draw thin rectangles.  It appears this code is
obsolete with respect to the current fill code.  Many fills adjusted
with this code will actually render without enlargement.  Differences
noted in the following files were insignificant or improvements.

comparefiles/012-05.ps
comparefiles/013-05.ps
comparefiles/067a_unc-stroke.pdf
comparefiles/298-09.ps
comparefiles/321-09.ps
comparefiles/86554321.pdf
comparefiles/Bug687603.ps
comparefiles/Bug687724.pdf
comparefiles/Bug687840.pdf
comparefiles/Bug687901.ps
comparefiles/Bug688485.pdf
comparefiles/Bug688631.pdf
comparefiles/Bug688807.pdf
comparefiles/Bug689083.pdf
comparefiles/Bug689516.pdf
comparefiles/Bug689842.pdf
comparefiles/Bug689918.pdf
comparefiles/Bug689978.pdf
comparefiles/Bug690115.pdf
comparefiles/Bug690206.pdf
comparefiles/Bug690395.pdf
comparefiles/Clarke-Tate-Manns-Chinese.ai
comparefiles/H00216q.pdf
comparefiles/LMG-40-7161-RU-DUC-01.pdf
comparefiles/Testform.v1.0.2.pdf
comparefiles/WD0010L0.pdf
comparefiles/annots.pdf
comparefiles/bug_687457.pdf
comparefiles/bulletin.pdf
comparefiles/knight.pdf
comparefiles/messenger.pdf
comparefiles/messenger16.pdf
comparefiles/p2b-100.pdf
comparefiles/z400454b01d4-1.pdf
pdf/PDFIA1.7_SUBSET/CATX2140.pdf
pdf/PDFIA1.7_SUBSET/CATX5233.pdf
pdf/PDFIA1.7_SUBSET/CATX9004.pdf
pdf/PDFIA1.7_SUBSET/CATX9214.pdf
pdf/PDFIA1.7_SUBSET/CATX9558.pdf
pdf/PDFIA1.7_SUBSET/IA3Z0005.pdf
pdf/PDFIA1.7_SUBSET/IA3Z0302.pdf
pdf/PDFIA1.7_SUBSET/IA3Z1351.pdf
pdf/PDFIA1.7_SUBSET/IA3Z3225.pdf
pdf/PDFIA1.7_SUBSET/IA3Z3356.pdf
pdf/PDFIA1.7_SUBSET/IA3Z3359.pdf
pdf/PDFIA1.7_SUBSET/IA3Z3519.pdf
pdf/PDFIA1.7_SUBSET/IA3Z3778.pdf
pdf/PDFIA1.7_SUBSET/IA3Z4373.pdf
pdf/PDFIA1.7_SUBSET/IA3Z4663.pdf
ps/ps3cet/11-01.PS
ps/ps3cet/11-26C.PS
ps/ps3cet/12-05.PS
ps/ps3cet/13-01.PS
ps/ps3cet/13-02.PS
ps/ps3cet/13-03.PS
ps/ps3cet/13-10.PS
ps/ps3cet/13-12.PS
ps/ps3cet/13-13.PS
ps/ps3cet/13-15.PS
ps/ps3cet/13-16.PS
ps/ps3cet/13-17.PS
ps/ps3cet/13-18.PS
ps/ps3cet/13-19.PS
ps/ps3cet/13-20.PS
ps/ps3cet/13-22.PS
ps/ps3cet/13-26.PS
ps/ps3cet/13-27.PS
ps/ps3cet/13-28.PS
ps/ps3cet/13-29.PS
ps/ps3cet/14-08.PS
ps/ps3cet/23-25.PS
ps/ps3cet/29-03.PS


[base/gxpaint.c base/gxcpath.c base/gxttfb.c base/gdevtrac.c base/gxacpath.c base/gxpaint.h base/gdevbbox.c base/gdevpdfd.c base/gxshade.c base/gxfill.c base/gxstroke.c base/gxclrast.c]

2009-07-09T00:28:02.323867Z Alex Cherepanov

Set default color and colorspace for colored pattern stream that relies on
default values; keep the color unset as required for uncolored pattern.
Bug 690609, customer 531.

[Resource/Init/pdf_draw.ps]

2009-07-08T14:18:43.038306Z Henry Stiles

This patch is a continuation of revision 9842, to derive the fill
adjustment parameter from the graphics state and not assume the value
is 1/2.  Interestingly, the patch seems to result in improvements for
postscript in several regression test files.  For example cet file
13-13.ps page 3 appears to improve the clipping of the large (W)
character.  Previously the (W) character obscured the line on the top
border of the page, now the line is visible.  Unfortunately the non
banded result is still wrong and with the fix does not match the
banded output.  Analysis of this issue is incomplete and ongoing.

[base/gxclrast.c]

2009-07-08T13:56:15.311074Z Ken Sharp

Fix (CID fonts): The fallback when totally failing to find a character code in a CMap
sets the CID to 0 (/.notdef) but failed to select a descendant font.

Details:
bug #690372 "Error: /undefined in %Type0BuildGlyph"

The PDF file is fundamentally flawed, the font uses the /Identity-H CMap for a font, but
the font uses single bytes for each character code, where the CMap expects 2 bytes for
every character code.

The font code falls back to using CID 0 (the /.notdef equivalent), but failed to select
a descendant font before returning. Because no descendant was selected GS was attempting
to extract the glyph from the type 0 font, which has no glyphs, and therefore failed 
with an undefined error.

The code has been modified to select a descendant font before continuing under these 
conditions.

[base/gschar0.c]

2009-07-08T06:02:40.134274Z Ray Johnston

Fix for segfault caused by dereference of a stale pointer (pgs->dev_color).
Bug 690519 detected with pkmraw during regression testing.

DETAILS:

If a GC was run during a pattern accum in the PS interpreter, the pgs->dev_color
structure could be moved. This was not tracked, probably because the dev_color
was assumed to be "dynamic". The fix performs gx_unset_dev_color during the
pattern_paint_cleanup (in zpcolor.c). This minimal change is all that is needed
since only the PS interpreter runs a "real" GC that moves structures.

[psi/zpcolor.c]

2009-07-06T17:20:39.998539Z Henry Stiles

The fill adjustment associated with the clipping path should be
derived from the graphics state, not set to the constant 1/2.  This
change results in many improvement for pcl which uses center of pixel
(fill adjust == 0) rendering.  It should result in no change for
postscript or pdf at high resolution, but we do expect many difference
at lower resolutions, where fill adjust is set to 1/4.  In the latter
case postscript and pdf paint with fill adjust set to 1/4 while
clipping paths are created with a fill adjustment of 1/2 which is
incorrect.

[base/lib.mak base/gxacpath.c]

2009-07-06T08:51:30.498667Z Ken Sharp

Fix (graphics library) : Conversion to base colour space of an /Indexed colour space was
not catering for spaces with a string lookup instead of a procedural lookup.

Details
Bug #690587 "setcolorspace + currentgray crashes GS 8.64"

The conversion from a colour in an indexed space to its alternate assumed a procedural
lookup and failed badly if the space had a string lookup.

[psi/zcolor.c]

2009-07-04T22:45:06.512463Z Alex Cherepanov

Add a check for a null value of SMask attribute in ExtGState. This also works
for invalid SMask reference, which is already converted to null.
Bug 690597, customer 870.

[Resource/Init/pdf_draw.ps]

2009-07-03T21:59:49.616755Z Ray Johnston

Fix for crash when tiles are outside printable areas seen with bug 690558.

DETAILS:

The 'fit_copy' macro adjusts the x, y, w, and h values, but since this is
a procedural macro and the 'FOR_RUNS' macro (also procedural) declares
local variables, for 'C' the 'FOR_RUNS ... END_RUNS' needs to be in
a block. The only real changes are the additions of 'fit_copy()'.

[base/gxclip2.c]

2009-07-03T09:27:02.706358Z Ken Sharp

Enhancement (TrueType fonts): Add support for Adobe's use of Identity CMap in PDF files,
when substituting a TrueType font, mapped as a CIDFont from disk, for a missing CIDFont.

Details:
bug #688515 "Need method to map CIDFonts to TrueType fonts when Ordering is Identity"
This issue also covers issues #689499, #688813, #689623 and #690483. 

When using a native TrueType font from disk as a replacement for a CIDFont, GS needs a
way to convert the character code used in the input file (either PostScript or PDF) into
a TrueType glyph ID (GID). 

When the TrueType font is declared (in cidfmap), the CSI entry contains an Ordering, this is concatenated with the CMAP declared in the actual TrueType font. This
information is used to create a CIDDecoding resource, certain  combinations (defined in
.CMapChooser) create CIDDecoding resources 'on the fly'.

A CIDDecoding resource simply maps a character code directly to a GID. Normally this
resource, when automatically created, is manufactured by converting the character code
to an internal code (using the declared CMap from cidfmap) and then converting the 
internal code to a GID using the TrueType CMAP table. Most often the internal code
is a Unicode code point.

The investigation in 688515 makes it clear that when we have an Identity CMap in a
PDF file the character code should be treated as the GID. This makes it very easy for 
us to construct a CIDDecoding resource, its a simple one-to-one. Unfortunately the 
existing machinery relies upon a CMap, and there is already a mapping for 
Identity.Symbol (An Identity CMap with a font whose CMAP table is a Symbol table).
We don't want to break this existing functionality, so the new code adds an entry
in .CMapChooser for Identity.Unicode (only to avoid errors) and then in the 
function which actually loads the TT font (load_sfnts in gs_cidtt.ps) we check
specifically for an Identity.Unicode Decoding. If we find one then we call a new
routine to create an Identity mapping (CIDMap) from character code to GID.

[psi/zcid.c psi/icid.h Resource/Init/gs_ciddc.ps Resource/Init/gs_cidtt.ps psi/zfcid1.c]

2009-07-02T00:38:01.021625Z Till Kamppeter

Use "Perceptual" as render intent for the presentation quality setting in the "cdnj500" (HP DesignJet) driver.

[contrib/gdevcd8.c]

2009-06-30T00:06:33.029648Z Alex Cherepanov

Extract all documents from PDF collection to temporary files and process them
in the order they are listed in the /Names array. Bug 690422, customer 531.

[Resource/Init/pdf_main.ps]

2009-06-29T12:33:28.939766Z Ken Sharp

gs_ciddc.ps is now in Resource/Init, not in lib as was stated in the documentation.

[doc/Language.htm]

2009-06-29T09:33:50.558685Z Ken Sharp

Enhancement (pdfwrite & ps2write) : Optionally convert Separation and DeviceN spaces to their alternate space.

Detalis:
bug #690582 "Disabel /Separation and /DeviceN colour space preservation"

When creating a colour space for output, allow the user to insist that Separation and
DeviceN spaces be converted to their alternate space.

[base/gdevpdfx.h base/gdevpdfp.c doc/Ps2pdf.htm base/gdevpdfc.c base/gdevpdfb.h]

2009-06-26T12:42:29.607606Z Alex Cherepanov

Look into JPX stream to get color space and color depth when it is omitted
from the image dictionary. Bug 690518, customer 850.

DETAILS:
This is a minimal implementation that intentionally uses device dependent
color spaces instead of device-independent ones for full backward
compatibility. 

[Resource/Init/pdf_base.ps Resource/Init/pdf_draw.ps]

2009-06-23T22:24:57.094170Z Michael Vrhel

Fix for bug690546.  Problem was caused by double application of opacity for knockout fills.  The opacity was being applied in the alpha value and in the opacity value.  The alpha value is the product of the shape and opacity and can be used directly.

[base/gdevp14.c]

2009-06-23T07:24:50.757746Z Ken Sharp

Fix (pdfwrite) : Update 'where_used' in case object is used across pages

Details
Bug #690056 "Error with embedded image in generated PDF: XObject not found"

Pdfwrite tries to detect reuse of objects, and only emit a single copy when this occurs.
However on return from pdf_substitute_resource several places do not set the
'where_used' field. If the object is used on a different page to the one where it is 
defined, this causes it not to be listed in the page Resources.

Update two of the places where this occurs to resolve the problem.

[base/gdevpdft.c]

2009-06-22T11:22:48.383638Z Russell Lang

Add the Windows installer manifest when building with Visual Studio 2008.

[psi/msvc32.mak]

2009-06-22T07:41:34.716284Z Ken Sharp

Fix a technically uninitialised variable (Coverity warning).

[base/gdevpdti.c]

2009-06-22T07:41:01.524464Z Ken Sharp

Fix a minor Coverity warning about implicit function declarations.

[base/gdevpdfb.c]

2009-06-21T21:22:33.385661Z Russell Lang

Add manifest files to the Windows setup and uninstall programs,
to force Windows Vista to run them as Administrator.
Bug 690510.

[psi/dwsetup_x64.manifest psi/dwuninst_x64.manifest psi/dwsetup_x86.manifest psi/dwuninst_x86.manifest]

2009-06-21T04:38:47.415879Z Russell Lang

Remove support for cross compiling of Win64 ghostscript on
Windows 32-bit using Visual Studio .NET 2003 with a 
Win64 compatible DDK.
Ghostscript for Win64 must now be built on 64-bit Windows,
to assist with compiled resources. 
Visual Studio 2005 and 2008 are currently supported for 64-bit.

[doc/Make.htm base/msvccmd.mak psi/msvc32.mak]

2009-06-21T04:23:05.005351Z Russell Lang

Add manifest files to the Windows setup and uninstall programs,
to force Windows Vista to run them as Administrator.

[doc/Develop.htm psi/msvc32.mak]

2009-06-20T17:29:39.375319Z Alex Cherepanov

Add TrimBox support and a corresponding -dUseTrimBox option. Bug 690547.

[Resource/Init/pdf_main.ps doc/Use.htm]

2009-06-19T12:14:20.778442Z Ken Sharp

Fix (pdfwrite) : Make type 3 bitmap font text-searchable if possible

Details
Bug #690430 "PCL to PDF creates non-searchable text with incorrect font bbox"

There were several changes which needed to be made here, in particular

1) Prevent the PDF text routines updating the text state when using type 3 bitmap
   fonts, as this caused each glyph to be emitted individually.

2) Change the way bitmap glyphs are recorded and drawn, previously each glyph origin
   was the top of the glyph, which meant that different height glyphs had effectively
   differing baselines. The need to shift y position caused glyphs to appear on 
   different PDF 'lines', which prevented searching

3) Hone some internal heuristics which prevented large kerning values and caused glyphs 
   to be placed individually.

[base/gdevpdti.h base/gdevpdfx.h base/gdevpdts.c base/gdevpdfb.c base/gdevpdt.h base/gdevpdti.c]

2009-06-19T10:53:11.324517Z Ken Sharp

Add a couple of missing initialisers to the PDF device structure. Spotted this problem while working on another issue.

[base/gdevpdfb.h]

2009-06-18T22:06:41.250732Z Marcos H. Woehrmann


Add A5 to the list of PCL output paper sizes.  Thanks to peter.berndts@oce.com for the patch.

Fixes bug 690532.

[base/gdevpcl.h base/gdevpcl.c]

2009-06-18T05:16:48.708579Z Ralph Giles

Handle 4-bit grayscale JPXDecode images.

This is a minimal patch to fix bug 690174.

The file has a JPXDecode stream with 4 bits per component. The image
dictionary has the correct matching /BitsPerComponent and /ColorSpace
keys, but the stream filter was returning the pixel data as the low
nibble in 8 bit pixels.

This is a minimal fix: if the first component of the data is 4 bpc,
divide the stride in half, then in copy_row_gray, pack two pixels
per byte when returning the data.

[base/sjpx.c]

2009-06-17T03:25:25.702690Z Alex Cherepanov

Fix memory corruption caused by long names. The length of name in the scanner
buffer may exceed the maximum name size and should be checked. Bug 690523.

[psi/iscan.c]

2009-06-17T02:17:49.344749Z Alex Cherepanov

Fix detection of extra Q operators in the page contents stream, which never
worked before. Remove some level 1 rudiments and comment the code.
Bug 690540, customer 750.

[Resource/Init/pdf_ops.ps]

2009-06-16T22:05:41.362092Z Henry Stiles

Add a graphics library rom file system variable.  For now this will be
used to hold the icc and wts files associated with the wtsimdi device.
No expected differences.

[base/lib.mak]

2009-06-14T22:57:22.467309Z Michael Vrhel

Fix for access violation that can occur when processing PS files with spot colors into a sep device.

DIFFERENCES EXPECTED:
None

DETAILS:
Number of separations was being obtained from page_spot_colors but should be obtained from separations.num_separations.  This was causing the elements of map_comp_to_sep[comp_num] to not be properly initialized for later use in tiffsep_print_page.

[base/gdevtsep.c]

2009-06-13T14:33:18.520606Z Alex Cherepanov

Export t1_glyph_equivalence table, which provides alternative glyph names.
Modify pf2afm.ps to disable glyph aliasing and generate AFM files that
match the font. Bug 689014.

[Resource/Init/gs_type1.ps lib/pf2afm.ps]

2009-06-13T01:20:00.314754Z Marcos H. Woehrmann

Add yet another _NMAKE_VER check (9.00.30729.01) to msvc32.mak to
detect MSVC_VERSION 9 (there has be a better way of doing this).
This surpresses a couple of warnings for each cl invocation but
shouldn't effect the build.

[psi/msvc32.mak]

2009-06-10T13:10:31.212563Z Ken Sharp

Fix (pdfwrite): Bug in pdfmark processing

Details
Bug #690525 "hyperlinks in pdf off by one page since revision 9779"

Revision 9779 fixed a problem when a DOCVIEW pdfmark did not specify a /Page or View to
open the file on. This caused an extra page reference to be created, which caused an
invalid xref to be created.

This was fixed by altering the page count, but this caused real DEST pdfmarks not to
work properly under some conditions.

Restored the page count, and used the presence of either a /Page or /View pdfmark to
generate a page number, if neither is present no page number is created. This fixes
both issues.

[base/gdevpdfm.c]

2009-06-09T03:32:01.703357Z Henry Stiles

Changed to use memset when filling white and black lines of a
rectangle.  This provides about a 10% speedup over copying a byte at a
time when printing long jobs where a significant amount of time is
spent whitening the page, this improvement was observed on a 2.53 GHz
Intel Core 2 Duo (Mac OS X) and we expect similar results on other
platforms.  No expected changes, the code is functionally equivalent.

[base/gdevwts.c]

2009-06-08T18:16:29.884697Z Ray Johnston

Provide for filling zero width areas to prevent dropout in some strange stroked
characters. This seems to be the intent of the code, and definitely conforms to
the PS PLRM, but the PDF Reference Manual says zero width fills may or may not
be filled (although Adobe Acrobat does). This is not (yet) enabled by default,
but is provided to simplify regression analysis and for customer 531, bug 690466.

DETAILS:

The original code in gxfill.c seems quite strange in that usually it will fill
horizontal areas sue to the 'adjust_above' and 'adjust_below', but depending
on the coordinate, this would sometimes NOT include the horizontal segment.

The change to gxfilltr.h adds vertical segments when PSEUDO_RASTERIZATION
is in the 'template' (as before) as well as when FILL_ADJUST is in the
'template' and the 'adjust' left and right values are > 0.

[base/gxfilltr.h base/gxfill.c]

2009-06-08T03:10:40.894198Z Henry Stiles

Previously we identified a banding device by checking if its
get_bits_rectangle procedure was the same as the procedure used in the
constant procedure declarations gs_clist_device_procs.  This
conditional has not been correct since the multi-threaded code, the
get_bits_rectangle() procedure is overridden with a new procedure
get_bits_rectangle_mt() and all devices were detected as non-banding.
We change the procedure checked to be open_device and don't expect
this to be overridden, but the code is still somewhat awkward.

The broken conditional resulted in non deterministic behavior in the
wtsimdi device, indirectly causing the complexity array to be
uninitialized.

[base/gdevprn.c]

2009-06-05T12:52:53.651342Z Ken Sharp

Fix (pdfwrite) : Bug with DOCVIEW pdfmark handling

Details
bug #690514 "PageMode DOCVIEW pdfmarks result in broken PDF file"

Using the the /PageMode DOCVIEW pdfmark without using another DOCVIEW pdfmark
which directly references a page (eg specifying the page to open on via /Page)
results in a spurious extra entry in the xref table, referencing the first page
object.

This is caused by the pdfwrite routine 'pdfmark_make_dest' which calls
'pdfmark_page_number'. If there is no specified /Page in the pdfmark, then a new
page reference for the 'next' page is allocated in the xref table, using the
location of the current page. This is the source of the spurious entry.

Note that the DOCVIEW code seems to assume that there be at most one /Page or /View
pdfmark in the array.

Fixed by decrementing the page count in pdfmark_page_number if the string being
parsed for a page number is empty.

[base/gdevpdfm.c]

2009-06-05T05:55:54.211001Z Alex Cherepanov

Switch to 32-bit PostScript integers on 64 bit platform. Bug 690474.

[psi/iparam.c psi/zfile.c psi/zfunc4.c psi/zcontrol.c psi/ibnum.c psi/ztype.c psi/zdict.c psi/iscannum.c psi/idparam.c psi/zfcid0.c psi/ibnum.h psi/zdps.c psi/zmath.c psi/iscanbin.c psi/iutil.c psi/iref.h psi/iscan.c psi/idebug.c psi/zstack.c psi/ziodev.c psi/zarith.c base/gsalloc.c psi/zgeneric.c]

2009-06-05T04:25:51.460104Z Alex Cherepanov

Validate /Border attribute of annotations. Following AR, use invisible border
when /Border value is incorrect. Bug 690509.

[Resource/Init/pdf_main.ps Resource/Init/pdf_draw.ps]

2009-05-31T02:50:09.248528Z Alex Cherepanov

Current PDF font loader fails when Type 1 font executes 'restore' at the end
of the file and discards all the collected data. The patch breaks the check
for /UniqueID in the font to force a branch without 'restore'. Bug 690502.

[Resource/Init/pdf_font.ps]

2009-05-30T00:22:20.429756Z Ray Johnston

Fix the file stream opening logic so that when the open failed, it did not leave
buffers and other structures up to the GC for collection. This only affected PS
and PDF, but happened on files that needed fonts that were not immediately in the
Fontmap. This resulted in up to on the files from bug 690422.

DETAILS:

Since the file streams were allocated in 'system' VM, and the 'limit' was not
set when the vmthreshold was set, this "leak" could result in excessive GC
colletion operations.

[base/sfxcommon.c base/stream.c]

2009-05-29T14:02:04.750188Z Ken Sharp

Fix (Graphics library) : Inappropriate testing of shading co-ordinates

Details
The Gouraud free-form mesh shading code was testing to see if the Xmin and Xmax
co-ordinates of the Decode array were the same, and flagging an error if so. The spec
does not say this is an error and Acrobat happily displays the PDF. In addition there
was no test against Ymin and Ymax, so the test has been removed

[base/gsshade.c]

2009-05-29T06:48:44.622628Z Ralph Giles

Update the included copy of jbig2dec with the 0.10 release.

This merges changed made to the version of the gs tree with upstream
fixes, including the buffer overrun fix for CVE-2009-0196. See
CHANGES for a more complete summary.

[jbig2dec/aclocal.m4 jbig2dec/config_win32.h jbig2dec/sha1.c jbig2dec/jbig2_metadata.c jbig2dec/jbig2_image_pbm.c jbig2dec/install-sh jbig2dec/jbig2.c jbig2dec/jbig2_generic.h jbig2dec/jbig2_image.c jbig2dec/configure jbig2dec/Makefile.in jbig2dec/jbig2_metadata.h jbig2dec/jbig2.h jbig2dec/jbig2_priv.h jbig2dec/jbig2_image_png.c jbig2dec/jbig2_image.h jbig2dec/depcomp jbig2dec/compile jbig2dec/jbig2dec.c jbig2dec/os_types.h jbig2dec/config.h jbig2dec/configure.ac jbig2dec/jbig2_arith.c jbig2dec/jbig2_symbol_dict.c jbig2dec/jbig2_arith.h jbig2dec/jbig2_page.c jbig2dec/jbig2_symbol_dict.h jbig2dec/jbig2_arith_int.c jbig2dec/jbig2_hufftab.h jbig2dec/jbig2_huffman.c jbig2dec/jbig2_text.c jbig2dec/jbig2_arith_int.h jbig2dec/jbig2_text.h jbig2dec/jbig2_huffman.h jbig2dec/jbig2_mmr.c jbig2dec/jbig2_refinement.c jbig2dec/jbig2_arith_iaid.c jbig2dec/jbig2_mmr.h jbig2dec/memcmp.c jbig2dec/test_jbig2dec.py jbig2dec/jbig2_arith_iaid.h jbig2dec/config.h.in jbig2dec/jbig2_segment.c jbig2dec/Makefile.am jbig2dec/missing jbig2dec/jbig2_generic.c]

2009-05-25T13:38:00.787533Z Ken Sharp

Fix (colour handling): improper handling of ICCBased space with a /Alternate ICCBased
    space

Details:
bug #690495 "Error: /typecheck in --@0x1007f6f0--"

It is technically possible (apparently) for a PDF file to contain an ICCBased space
which has an /Alternate space which is also an ICCBased space. The existing
validation code assumed this would not be the case and reused a reference if the
latter space had no /Alternate in order to select an appropriate final Alternate.

This led to the latter ICCBased space being replaced by the selected default space,
which meant we had fewer spaces than expected when actually setting the space.

Fixed by inserting the selected appropriate default space into the ICC dictionary as
an /Alternate and revalidating the modified space.

[psi/zcolor.c]

2009-05-24T10:16:57.483100Z Ralph Giles

Fix an uninitialized variable warning in FAPI_do_char.

Details:

Previously the local variable 'code' was used for incidental return 
value checks, but *also* to set cr.is_glyph_index in in the CID font 
case. This is because cid_to_TT_charcode() returns 1 on success, but
if it can't find a character code for the given cid, it sets the
character code to zero and returns zero itself to indicate failure.

Zero makes more sense as a glyph id (.notdef) than as a character
code, so in this case it's appropriate to set is_glyph_index based
on this. The other paths which set 'code' all deal with truetype
fonts, so the default success value of zero is also correct.

However, there were in theory code paths where code was never set,
and so is_glyph_index was being set from an unitialized value; thus
the gcc warning. And the double-use of the variable 'code' was hard
to read. This commit adds a separate boolean to track whether we've
found a character code or not and sets cr.is_glyph_index based on
that.

[psi/zfapi.c]

2009-05-23T19:11:37.254849Z Ralph Giles

Remove an unnecessary duplicate typedef. Coverity issue 4183.

[base/gdevp14.h]

2009-05-23T19:02:08.125913Z Ralph Giles

Remove an unnecessary header include.

Coverity issue 2497.

[base/lib.mak base/sjpx.c]

2009-05-23T18:37:21.743759Z Ralph Giles

Remove some unused variables.

I've left one, the subarray_index, since it may be intended for future 
development. The others were all trivial.

[psi/zfapi.c]

2009-05-23T16:59:58.327296Z Ralph Giles

Correct a cut-and-paste error in r9742.

The blend values array logic for multiple master fonts was writing
integer element values with a floating point specifier. These are
normally floats, which is probably why the error wasn't noticed in
testing. Flagged by Coverity as issue 4326.

[psi/zfapi.c]

2009-05-23T15:36:33.756259Z Alex Cherepanov

Trap /ioerror and load the font by name when embedded font stream is
unreadable. Bug 690492.

[Resource/Init/pdf_font.ps]

2009-05-22T09:11:26.614602Z Ralph Giles

Remove a duplicate gs_memory_t structure member from the trace device.

In r8803 the image_enum memory pointer was moved from the various
subclasses into the common portion of the structure (the superclass).
In oversight, that change was not make to gdevtrac.c, breaking
compilation because of the now-duplicate member name. This went
unnoticed until now because the trace device isn't part of any
standard build.

Note that I've only fixed the compile error. I have not verified
that the trace device still functions properly.

[base/gdevtrac.c]

2009-05-22T09:03:35.793845Z Ralph Giles

Correct a typo in the unused gsparam2.c.

This was broken in r2849, but went unnoticed because the parameter
api rewrite was never developed further. This file isn't part of
any standard build.

[base/gsparam2.c]

2009-05-21T23:46:45.296083Z Marcos H. Woehrmann


Minor changes for Luratech decoders command line options.

[base/Makefile.in]

2009-05-21T19:16:25.645959Z Ralph Giles

Update documentation with the new location for dmmain.

[doc/Develop.htm]

2009-05-21T19:13:36.537944Z Ralph Giles

Move the Classic MacOS gsapi client example code to psi, where it more 
properly belongs.

[base/dmmain.r base/dmmain.c psi/dmmain.r psi/dmmain.c]

2009-05-21T19:11:13.444391Z Ralph Giles

Comment improvement in the font api implementation.

[psi/zfapi.c base/gxfapiu.c base/gxfapiu.h]

2009-05-21T12:40:07.902153Z Till Kamppeter

The "ps2write" output device produces PostScript which is not DSC-conforming, so do not advertize it as DSC-conforming with a "%!PS-Adobe-..." magic string. Use "%!" instead. Otherwise the "pstops" CUPS filter cannot handle this output (Ubuntu bug #377011).

[base/gdevpdfu.c]

2009-05-20T22:33:12.105223Z Till Kamppeter

pstoraster did not work when called with an input file name as the 6th command line argument.

[cups/pstoraster.in]

2009-05-20T22:30:48.432212Z Till Kamppeter

Fixed recognition of page size via /cupsPageSizeName. All page sizes were considered custom sizes if /cupsPageSizeName was not set.

[cups/gdevcups.c]

2009-05-20T12:17:22.906937Z Tor Andersson

Reformat code to improve readability and fix messed up tab/space indentation. Also removed the m_ prefix on struct fields.

[psi/fapi_ft.c]

2009-05-19T22:57:04.259848Z Alex Cherepanov

When /Length attribute is incorrect, PDF interpreter removes it from the
stream dictionary. Add support of missing /Length attribute to the pattern
handling code. Bug 690488.

[Resource/Init/pdf_draw.ps]

2009-05-16T15:29:35.814286Z Alex Cherepanov

Bind all procedures in ps2ai.ps to prevent errors caused by redefined
operators, such as redefinition of 'length' as a number in
examples/colorcir.ps. Bug 690484.

[lib/ps2ai.ps]

2009-05-15T12:13:25.677962Z Ken Sharp

Fix (FAPI) : FAPI doesn't support Multiple Master fonts

Details
The FAPI code manufactures a stream containing font data for the benefit of FreeType.
However, when manufacturing a type 1 font stream it did not account for the possibility
of a Multiple Master font (or instance of a MM font). This caused FreeType to generate
an error when trying to process glyphs using MM operations.

Extended the existing code to manufacture the WeightVector array, $Blend procedure,
BlendDesignMap array, BlendDesignPositions array and BlendAxisTypes array if present
in the original font.

[psi/zfapi.c psi/ifapi.h psi/write_t1.c]

2009-05-13T23:37:28.142726Z Alex Cherepanov

Consider PDF files that has /StmF attribute but no /CF attribute as having
ARC4 encryption. Bug 690478.

[Resource/Init/pdf_sec.ps]

2009-05-12T20:22:11.794604Z Marcos H. Woehrmann

Removed reference to obsolete file (lwf_jp2_geo.h) that has been merged into lwf_jp2.h.

[base/lwf_jp2.mak]

2009-05-12T10:10:53.385307Z Ken Sharp

Fix (ps2write) : Crash caused when converting large shading to image.

DETAILS :

Bug 690475 "ps2write" segfaults on PDF file of CUPS test suite".

When converting a shading to an image for PostScript output, and the resulting image is
large (> 512Kb), the code attempts to select an appropriate compression filter. As part
of doign this it probes the colour space in an attempt to determine what kind of space
it is. However this doesn't work when we have created the image ourselves, as tehre is
no associated imager state to probe the colour space resulting in a crash.

Modified the compression selection code to not probe the space if there is no imager
state.

[base/gdevpsdi.c]

2009-05-11T15:19:46.521973Z Ken Sharp

Fix (FAPI) : Type 2 fonts with local Subrs fail

Details
Type 2 (CFF) fonts may have both local and global subroutines. Normally fonts will only
contain a global set, while FontSet fonts may contain both a global set, and a local set
per font.

The FAPI code, when converting an internal GS representation back into a CFF stream,
incorrectly conflated the local and global Subrs into a single GSubrs (global subrs)
dict. Additionally it pushed the local subrs first. The result of this is that glyphs
using a callgsubr operator retrieved the subroutine, and glyphs using a callsubr would
fail because no local Subrs were defined.

Extended the FAPI code to retrieve the local and global subrs separately, to write a
local /Subrs dict if required, and to correctly calculate the /Subrs offset and store
it in the font Private dict when a /Subrs dict is present.

[psi/zfapi.c psi/ifapi.h psi/write_t2.c]

2009-05-10T20:56:12.436440Z Henry Stiles

Fill in omitted paper sizes as part of fixing bug #689677.  Thanks to
Jeffrey Vance for providing several of these paper dimensions.  No
regression differences are expected.

[base/gdevpxen.h]

2009-05-10T16:44:00.640518Z Marcos H. Woehrmann

Use 32 bits for fixed coordinates even on 64 bit cpus.

Details:

The fixed coordinate system used to be dependent on the size of a long.
On x86_64 and other 64 bit systems this was 8 bytes but 4 bytes on other
systems. 

Fixes Bug 690434.


[base/gxfixed.h]

2009-05-10T02:59:01.912309Z Ray Johnston

Fix regression caused by the changes to make PCL work. Bug 690463.

DETAILS:

The primary culprit was that the 'iblock' calculation didn't work if the
entire 'cbuf' wasn't empty. The token scanner sometimes refilled when there
was still data in the buffer. The 's_block_read_seek' also needed to make
sure that the cursor.r ptr and limit (srptr and srlimit) is set correctly
before loading the block at the new position. Tested with PCL and PS on
the cluster (and of coures on my Windows machine).

[base/gsiorom.c]

2009-05-08T13:13:26.891026Z Ken Sharp

Fix : Windows drag&drop has a fixed path limit of 80 characters.

Details
Bug #690461 "ghostscript can't handle files with long name-paths"

The real issue is that the drag-and-drop interface had a fixed buffer of 80
characters, and was unable to process files beyond that limit.

It looks like the original code was from some boiler plate sample. Updated the code
to use the DragQeryFiles API call to find the length of the full path specification
and then malloc a buffer to hold it. Although we would never normally use the system
malloc call, this should not be a problem in the Windows-specific code.

[psi/dwtext.c psi/dwimg.c]

2009-05-07T15:45:58.755801Z Ken Sharp

Fix PostScript interpreter : ICC colour space could cause crash

Details
Bug 690472 "ghostscript crashes on pdf file"

The code to parse the /Range from an ICC profile stores the data in an array of floats.
However, when the Range data was present, the values were incorrectly stored at array
locations twice the proper index.

This could lead to buffer overflow which in this case corrupted the ICC dictionary being
used, causing a crash.

Surprisingly this did not come up in testing.

[psi/zcolor.c]

2009-05-07T13:06:10.554451Z Ken Sharp

Fix (FAPI) : FAPI doesn't handle Encoding arrays of type mixed_array

Details
It seems that fonts can sometimes have a 't_mixedarray' Encoding array, odd but true.
The FAPI code assumed that Encodings would either be t_array or t_shortarray. Altered
the code to allow for t_mixedarray as well.

[psi/zfapi.c]

2009-05-07T12:46:25.039496Z Ken Sharp

Fix (FAPI) : FAPI fails when FontBBox is missing

Details
(see also rev 9692) The FAPI code attempts to modify the FontBBox in the font
dictionary after rebuilding a font with a non-GS font renderer. If the FontBBox is
missing this creates an error condition. This is generally correct, FontBBox is a 
mandatory entry in a font dictionary.

However, the code can be called to define a (PDF) type1C font, a CFF font, and it is
possible (Bug689740.pdf) that the top DICT does not contain a FontBBox. In this case
we should inherit the FontBBox from the FontDescriptor in the PDF file, but we don't
have a mechanism to do that. 

Since PDF isn't a programming language the scope for using the FontBBox is pretty
limited, so for now I've chosen to ignore the error.

[psi/zfapi.c]

2009-05-05T10:40:10.582721Z Ken Sharp

The revision 9699 to quiet a Coverity warning incorrectly tested a char * instead of a
char ** for NULL.

[base/gdevpdtc.c]

2009-05-05T10:28:48.253152Z Ken Sharp

revision 9714 reformatted a test in a way which left dead code behind. Put the test
back as it was, there was no functional difference anyway, this was just done for
investigative purposes.

[psi/zfapi.c]

2009-05-04T10:59:18.106139Z Till Kamppeter

Removed "cupsEvenDuplex" PPD keyword handling from the "cups" output device again. This keyword is already handled by the pstops and pdftopdf CUPS filters.

[cups/gdevcups.c]

2009-05-02T03:12:55.350064Z Alex Cherepanov

Commit .h file missed by the previous revision. Bug 690318, customer 631.

[base/gdevtifs.h]

2009-05-02T00:38:13.087492Z Ray Johnston

Supprt -dBigEndian=[true | false] so that the TIFF can be optimized for a
target host on a machine of another 'endian' byte orientation. This is a
mostly worthless change since the raster data doesn't change (only 16 or
32-bit values have endian issues). Thanks to wendyst2 at gmail.com for
this fix. Bug #690318.

[base/gdevtifs.c base/gdevtsep.c base/gdevtfnx.c base/gdevtfax.c]

2009-05-02T00:03:15.297730Z Ray Johnston

Add an 'IODevice' aware layer for filesystem enumeration 'gs_enumerate_*'
which needs to be used whenever the file is not known to be on the default
iodev (%os% by default). Use this in the PDL parser to open fonts so that
COMPILE_INITS=1 does not need the fonts on the disk.

The default PXL/PCL builds now use COMPILE_INITS=1.

Fixes bug #690367.

DETAILS:

The %rom%ttfonts/ path is placed BEFORE the built-in paths in pjparse.c,
but NOTE: the PCLFONTSOURCE environment variable will still supersede
the internal paths including %rom%ttfonts.

[base/gxiodev.h base/gsiorom.c base/gsiodev.c]

2009-05-01T03:39:24.695161Z Alex Cherepanov

Check for unbalanced q/Q operators in content streams of PDF forms.
Add missing Q when needed and issue a warning. Bug 690449, customer 870.

[Resource/Init/pdf_draw.ps]

2009-04-30T18:34:49.698412Z Michael Vrhel

Fix for case when blending color space of soft mask is not specified.

DETAILS:

When the blending color space for the soft mask is not specified, the blending color space is set to UNKNOWN.  This is later resolved when the compositor action is handled.  In this case, the parents color space or the device color space is used for blending.  The code was in place 
to do this for a transparency group that did not have a defined color space but not for a soft mask. This caused bug 690457 with gxps which should now be resolved.

[base/gdevp14.c base/gstrans.c]

2009-04-30T13:14:10.674985Z Ken Sharp

Fix (FAPI): Incremental Type 42 font with GlyphDirectory & missing glyphs fails

Details
The FAPI code assumed that the routine to extract glyph data from sfnts would always
work when a GlyphDirectory is present, and used glyf + loca if this routine failed, 
assuming that this meant there was no GlyphDirectory. However, the test file
Bug687845.ps contains a type 42 incrementally downloaded font which uses a
GlyphDirectory and also attempts to access glyphs which aren't defined in the
GlyphDirectory.

This caused the code to try and use the loca and glyf tables, which aren't present,
which caused an error.

Modified the FAPI code to return a glyph length of 0 when we have a GlyphDirectory but
no defined glyph. This causes GS to render nothing, which matches the regular result as
well as the action of Acrobat.

[psi/zfapi.c]

2009-04-30T11:15:04.348733Z Till Kamppeter

Adde support for the "*APDuplexRequiresFlippedMargin:" PPD keyword to the "cups" output device, fixed also the margin handling for custom paper sizes.

[cups/gdevcups.c]

2009-04-30T10:41:48.084860Z Till Kamppeter

Fixed unprintable margin handling of the "cups" output device.

[cups/gdevcups.c]

2009-04-29T18:02:50.832175Z Ralph Giles

Whitespace, line length and C-style improvements to gscolorbuffer.[ch].

These files tend to use 8 spaces instead of tabs; I haven't corrected
many of these.

[base/gscolorbuffer.c base/gscolorbuffer.h]

2009-04-29T17:02:43.113835Z Ralph Giles

Remove a documentation reference to the gsindent script, which was
removed in r8455.

[doc/C-style.htm]

2009-04-29T16:56:02.841961Z Ralph Giles

Always initialize the color_remap function pointer.

Details:

NULL here means a straight memcpy, and the first case statement set
that explicitly as a fallback. However, the second did not, so it
was possible to reach the check on line 204 without initializing
color_remap.

[base/gscolorbuffer.c]

2009-04-29T16:39:58.702496Z Ralph Giles

Set native line endings and keyword substitution on gscolorbuffer.[ch].

[base/gscolorbuffer.c base/gscolorbuffer.h]

2009-04-29T11:27:38.521368Z Marcos H. Woehrmann

Fixed compiler warning about /* within comment.

[base/gdevp14.c]

2009-04-28T22:11:03.867873Z Ralph Giles

Remove the unused including of gxlum.h in the inferno device.

The luminance weighting contants aren't used in the inferno driver.

[base/gdevifno.c base/contrib.mak]

2009-04-28T22:06:04.042908Z Ralph Giles

Remove the stdlib.h include from the inferno device.

This is no longer needed since the malloc/free calls were replaced
with gs allocator calls in r9687.

[base/gdevifno.c]

2009-04-28T18:41:43.426030Z Till Kamppeter

"cups" output device: Added support for "cupsEvenDuplex" PPD keyword.

[cups/gdevcups.c]

2009-04-28T16:44:09.981559Z Till Kamppeter

"cups" output device: Added support for the new "*cupsBackSide:" PPD keyword, fixed "*cupsFlipDuplex:" for landscape documents.

[cups/gdevcups.c]

2009-04-28T15:10:49.837556Z Alex Cherepanov

Take measures against Type 1 fonts that do 'systemdict begin' and
bypass all our font loading tricks. Bug 690450, customer 870.

[Resource/Init/pdf_font.ps]

2009-04-28T13:31:02.272975Z Ken Sharp

Ensure the pointer to standard cmap names is properly initialised before dereferencing
it. This is only to silence Coverity, the pointer is initialised to a static array and so
should never be invalid.

[base/gdevpdtc.c]

2009-04-28T13:23:46.582627Z Ken Sharp

Correct a potential buffer overrun. This looks like an oversight, the maximum size is
properly calculated taking the buffer length and data size into account, and used to
copy the data, but the trailing 0x00 (C string terminator) was written using the data
size without checking for a buffer overrun.

Warning from Coverity.

[base/gstype42.c]

2009-04-28T13:16:17.700417Z Ken Sharp

Check return value from cos_dict_put_key when writing document metadata. Warning from Coverity.

[base/gdevpdfe.c]

2009-04-28T09:04:10.426584Z Ken Sharp

Fix (pdfwrite) : Enlarge the hardcoded threshold for subsetting True Type fonts.

DETAILS :
Patch and log supplied by Leonardo.

Bug 689236 "pdfwrite disregards -dSubsetFont= with TrueType". 

This fixes the valid part of the bug, which is related
to not-subsetting True Type fonts. The supplied example
exceeds the hardcoded constant of 500 glyphs,
so the font was always subset. Here we enlarge
the threshold to a more reasonable value. Note it doesn't
affect regular runs with "standard" distiller parameters.

ref# leo2079.

[base/gdevpdtb.c]

2009-04-27T16:24:33.581172Z Ken Sharp

Fix (FAPI) : FAPI fails when FontBBox is a packed array

Details
The FPAI code attempts to modify the FontBBox in the font dictionary after rebuilding a
font with a non-GS font renderer. However it assumed that the FontBBox would always be a regular array, capable of handling real numbers.

Some fonts have FontBBox arrays which only contain small integers, and which are 
therefore stored as packed arrays (t_shortarray in GS). This was cuasing the FAPI code
to throw an error.

Modified the code to replace the packed array with a full array before filling in the
new values, if the original array was packed.

[psi/zfapi.c]

2009-04-27T16:02:10.792862Z Till Kamppeter

Let "cups" output device take into account page size names.

The "cups" output device has selected the page size for determining
the margins only by the size and not by the name. So it was not
possible to have different page size entries with the same size and
different margins in the PPD, for example for fullbleed. This is fixed
now.

Fix done after a report from the HPLIP team on the OpenPrinting Summit
2009.

[cups/gdevcups.c]

2009-04-27T06:25:19.306977Z Alex Cherepanov

Fix 2 oversights in AES decryption code: (1) add enumeration of ctx member in
AES state. Unmovable blocks are still garbage collected and need enumeration;
(2) use correct names to access /CFM attribute in PDF file.
Bug 688958, customers 870, 850, 531.

[base/saes.h Resource/Init/pdf_sec.ps]

2009-04-24T17:39:56.201358Z Ralph Giles

Replace malloc with gs_alloc_bytes in the inferno device.

Details:

The inferno device allocates an image writer struct in initwriteimage,
and later frees it when a null buffer is passed to writeimageblock.

We prefer to use gs_alloc_bytes instead of calling system malloc
because it respects memory contraints requested by the client. Note
however that the w pointer is local to inferno_print_page and not
traceable. This is fine and the structure doesn't have a lifetime
outside that function. If it did, it would need to be stored and
enumerated in inferno_device.

Note that this requires modifying the two utility functions to take
a memory pool pointer.

[base/gdevifno.c]

2009-04-24T17:39:54.075505Z Ralph Giles

Dynamically allocate the inferno line buffer.

Previously, the scanline buffer was a 16k stack allocation. We still
reject bitmaps larger than that because of format limitations (so large
jobs above 300 dpi often fail with the inferno device) but now we
only allocate as much storage as needed, and on the heap instead of
the stack.

[base/gdevifno.c]

2009-04-24T14:10:48.907852Z Ken Sharp

Enahncement (FAPI) : Allow FAPI to work with pdfwrite.

DETAILS :

FreeType could not be used with pdfwrite for any purpose, even to render
fonts for bitmap fallback. This seems overly pessimistic. 

This patch allows FAPI font rendering engines to work with pdfwrite, this 
will mean the FAPI interface is used for the selected types of font (see 
FAPI for documentation) including CharString decoding and especially 
rendering to bitmaps for type 3 font fallback.

In general pdfwrite uses its own routines to write and convert font types as
required, but it does not render any kind of font data, so if it is unable
to handle a font type it relies on the graphics library to render the glyph
to a bitmap, which is then stored in a type 3 font.

The FAPI code checks the device parameters to see if 'EmbedFontObjects' is 
true, and does not attempt to use the FAPI for fonts if it is. So firstly we
alter the device parameters in pdfwrite to set this to false.

The FAPI code was assuming that the text enumerator it received would always
be a 'show' enumerator, and extracted a pointer to the graphics state from it.
Of course if the device is pdfwrite then the text enumerator will instead be 
a pdf_text_enum. Modified the code to check the object type of the enumerator
and use the pointer to the imager state (checking it is a st_gs_state type)
if this is not a show enumerator. Also only update the 'cc' fields in the 
enumerator if this is a show enumerator.

Note that because the CharString and font validation is handled by the font
rendering engine, it may differ from the GS engine regarding the validity
of fonts.

[psi/zfapi.c base/gdevpdfp.c]

2009-04-24T01:06:32.141706Z Ralph Giles

Allocate the inferno device's color cube dynamically.

DETAILS:

The inferno device generates a color cube on device open, ostensibly
to speed up the palette mapping. Previously this was stored in a
global array, adding 16 or 32 KB to the constant memory footprint
of ghostscript.

Instead, this commit allocates the color cube dynamically, storing
a pointer to it in the inferno_device structure. A custom structure
descriptor is added, and propagated through the new prn_device
construction macros, so it can be traced by the garbage collector.

In this way, the memory is only used when the inferno device is active.

[base/gdevifno.c]

2009-04-24T01:06:30.215529Z Ralph Giles

Add a new prn_device_stype_body() construction macro.

Previously, all the printer device structures assumed there were no
additional pointer members in any subclass, and always installed the
st_device_printer structure descriptor. This may account for why so
few devices bother with point enumeration. Or perhaps it's the other
way around.

In any case, this commit adds two new construction macros for
filling in device structure templates: prn_device_stype_body and
prn_device_margins_stype_body. These take an additional argument,
the address of the subclass structure descriptor, after the device
name, and propagate it to the std_device_full_body_type macros.

[base/gdevprn.h]

2009-04-24T01:06:28.058835Z Ralph Giles

Comment out the prototype for a commented out function in the inferno driver.

Fixes a gcc warning.

[base/gdevifno.c]

2009-04-24T01:06:25.015250Z Ralph Giles

Add a prototype for init_p9color() in the inferno driver.

Fixes a warning on gcc.

[base/gdevifno.c]

2009-04-24T01:06:22.357332Z Ralph Giles

Remove trailing whitespace in the inferno driver.

[base/gdevifno.c]

2009-04-22T19:51:30.624349Z Michael Vrhel

Allow inline images in pdfwrite.

DETAILS:  

This had been disabled during the softmask branch work.  With the fix that Ray did to avoid having softmask images to be processed outside the 3X code with an extra softmask group, we can re-enable this.  From a test that Ken did we need the ability to do in-line to avoid creating large files in certain cases with pdfwrite.

[base/gdevpdfi.c]

2009-04-21T15:01:01.102780Z Ken Sharp

Initialise a couple of structure members to avoid a Coverity warning.

[base/gdevpdfg.c]

2009-04-21T07:55:30.518210Z Ken Sharp

Add a check for a NULL pointer before using it. In fact this should not be possible
but it silences another Coverity warning.

[base/gdevpdtc.c]

2009-04-20T19:35:15.102625Z Michael Vrhel

Add missing gscolorbuffer.c and gscolorbuffer.h that should have been in soft mask branch merge.  See previous commit message for differences and details.

[base/gscolorbuffer.c base/gscolorbuffer.h]

2009-04-20T19:16:24.907829Z Michael Vrhel

This is a merge of the smask_work branch into the trunk.  The merge fixes issues related to missing soft masks, improperly rendered soft masks and transparency group color spaces.  It addresses a number of bugs including 688728 689422 689512 689931 688601 689968 690958 690115 690157 and 690170.    

DETAILS:
This commit is a compilation of changes that occurred in the smask_work SVN branch.  That branch was created with rev 9134 on Oct 8 2008.  The final commit to that branch was with rev.  9665.  For extreme details on the changes in this commit, you can review the commit messages within that branch.
Soft masks:  The basic architecture for the soft mask remains in place; where by the soft mask is composed with the popping of the transparency group.  In performing soft mask operations, the current code pushes a soft mask, which creates a new buffer.  This buffer is then rendered into.  Once the soft mask drawing is completed, the soft mask is popped.  This operation moves the soft mask buffer into the mask buffer of the parent transparency group.  When that transparency group is popped, it should be composed with its parent layer, while being adjusted with the soft mask buffer values.  If there was never a transparency group that was popped following the soft mask, then the soft mask would not be applied.  The solution to this issue involved changes in pdfdraw.ps that forced the creation of a transparency group when one had not yet been created if a soft mask push was to occur.  When this extra group is popped, the soft mask will then be applied.  The PDF interpreter knows that a SMask exists in the ExtGstate when 'SoftMask' is not null. Since the ExtGState elements are part of the top dict, the 'begin' .. 'end'  part of the 'q' and 'Q' operators, respectively, take care of keeping the SoftMask current.  When a transparency group is executed, the SoftMask is set to null since the SMask saved in the pdf14 'maskbuf' element will be applied during the blending when the transparency group is popped.
Soft masks are now drawn in the specified group color space.  Previously, the soft mask was drawn in the target device color space and then the K channel for the CMYK case or the R channel for the RGB case were used as the soft mask luminance channel.   Now the mapping from the DeviceRGB or DeviceCMYK to a luminance component is performed as specified by the PDF specification.  If the color space is CIE based, the base device space is used.  This CIE case does not follow the PDF specification but does follow what occurs with Acrobat Reader.    Previously the code carried around the soft mask buffer as an RGB or CMYK buffer.  It is now represented by a gray buffer.
Transparency groups: Color space changes for transparency groups are now followed.  Previously, the target device color space was always used for blending.  Now the proper color space is used, with the exception of ICC and other CIE based spaces.  For those spaces the base device color space is used.  The ICC and CIE based spaces will be addressed when the ICC branch is merged.  Changing the current code to do forward and backward mappings with the ICC color spaces is beyond the work scope of the smask_work branch.    In the presence of nested transparency groups, the parent color space can be different than the child color space.  When the child is popped, its contents are now converted from the child’s color space to the parent’s color space.  Note that if the output device is a separation device, the transparency group color space is ignored and the blending is performed amongst the channels, which can be numerous if there are many spot colors.  Also note that for soft mask groups, the alternate tint transform is always used for spot colors.
To achieve these fixes, a number of changes besides those already mentioned above were required.  These include:
A dynamic update of the pdf14 device colorinfo value based upon the color space of the current transparency group.  This information is used often in deciding how to encode and decode the color data.  In the case of the clist writer and reader, the code often ends up forwarding certain operations to the target device in which case we no longer would have the colorinfo of the pdf14 device.  The solutions to this problem required the addition of a clist_color_info member value to the clist writer device.  This value is updated in the same manner that the pdf14 device will be updated during the clist reader phase thereby ensuring the proper color information is written and read.  Also required was the addition of a trans_device item to the imager state.  This was needed due to the fact that the clist writer forwards its fill path command to the target device.  In the shading code, if we have a DeviceN color space we eventually get back to pdf14_cmap functions, assuming we have a RGB or CMYK target device.  These cmap functions should make use of the clist device to map to the proper blending color space NOT the target device color space.  In the current code, the cmap functions can only see the target device and the imager state hence the solution to add trans_device to the imager state.  This is only used during clist writing and assigned during the clist writers PDF14 fill path at which point it is assigned the address of the clist writer device.  During the PDF14 cmap functions, if the trans_device is not NULL in the imager state we use that device's color mapping procs instead of the target device color mapping procs.  In this approach, we maintain access to the transparency group color space and its procedures through the imager state.  Finally, shading fills should NOT occur in the device color space when we are within a transparency group with a different color space.  To avoid this issue a boolean named has_transparency was added to the imager state.  Now if we find that we are in a transparency group during the shading fills, then the is_linear_color_applicable operation will return a false and the target color space is not used for blending.
To maintain the changing pdf14 color space information in the presence of nested groups, parent_color_info_procs was added to the already nested pdf14_buf_s where the new pdf14_parent_color_t contains the information related to the parent’s color space.   This handles the nesting of color information for the clist reader.  For the clist writer, pdf14buf is always NULL.  For this case, a pointer to a pdf14_parent_t was added to pdf14_device_s.  A stack was created and the color information is pushed on and popped off the stack as the transparency groups are pushed and popped during the clist writer phase.  
Changes were also required in pdfdraw.ps to handle the case when a transparency group does NOT define a color space.  In this case, the parent’s group color space (or the target device color space if we are at the first level) should be used.
In the presence of a monochrome target device, the previous code PDF14 device was still pushing an RGB buffer initially.  This is now changed and a monochrome buffer is created. 
There was much confusion in the code relating to the number of colors, separations, spot colors, and process colors.  This became clear when looking at a file that had over 100 colorants. GX_DEVICE_COLOR_MAX_COMPONENTS defines the max number of different colors that we currently encode.  This should include both the process colors and the spot colors.  Many parts of the code looked at these colors differently. Some portions of the code treated the number of spot colors and/or separations as having a range to GX_DEVICE_COLOR_MAX_COMPONENTS, while other parts include the process color AND the spot colors in that range.   The changes here ensure that GX_DEVICE_COLOR_MAX_COMPONENTS defines the max number for all process and spot colors.  
The current code did not recognize patterns with transparency in PDF.  Now, the presence of transparency in a pattern is detected.  If a transparency component is found, the pdf14 compositor is installed.    
Finally, pdf_draw.ps was modified so that when an image is encountered with a softmask (/doimagesmask) AND the output device is pdfwrite then we do avoid the DoImage that is used to fill the softmask buffer for the pdf14 device.  The pdfwrite device will obtain the maskdata as part of image3x.  Previously, the mask image was at times being placed in-line for the pdfwrite device during the DoImage that is associated with storing the softmask buffer in the pdf14device.  In the old flow, the SMask image was effectively being processed twice.
    

[psi/zcolor.c base/gxclimag.c base/gxpcmap.c base/gdevdevn.c psi/ztrans.c base/gsovrc.c base/gdevpdft.c base/gxblend1.c base/gxcie.h /trunk/gs base/gxshade6.c base/gxclpath.c base/gsptype1.c base/gsccolor.h base/gsptype1.h base/gsistate.c base/gximag3x.c base/gscspace.c base/gxclutil.c base/lib.mak base/gxistate.h base/gscspace.h Resource/Init/pdf_main.ps psi/int.mak Resource/Init/pdf_draw.ps psi/zpcolor.c base/gxdevcli.h Resource/Init/pdf_ops.ps base/gdevp14.c base/gxclrect.c base/gxclist.c base/gdevp14.h base/gdevtsep.c base/gxdcolor.c base/gstrans.c base/gxclist.h base/gstparam.h base/gxblend.c base/gstrans.h base/gdevpdfi.c base/gxblend.h]

2009-04-20T17:44:20.115590Z Till Kamppeter

Added "cdnj500" device to support HP DesignJet 500 (patch from Timur Maximov).

[contrib/gdevcd8.c contrib/contrib.mak base/configure.ac]

2009-04-20T15:59:07.741446Z Ken Sharp

Update revision 9658 to silence a second Coverity warning and potential dereference of
a NULL pointer. Should still be impossible and is definitely an error condition.

[base/gdevpdtc.c]

2009-04-20T15:54:38.325839Z Ken Sharp

Add a check to ensure a font pointer is valid before dereferencing it. This should 
always be the case, but its worth checking to avoid a crash and should silence a Coverity
warning.

[base/gdevpdtc.c]

2009-04-20T15:43:56.142408Z Ken Sharp

initialise first_visit in the gs_cpath_enum structure with a dummy value. This will be
overwritten when the enumerator actually starts, this is only to silence a warning
from Coverity.

[base/gxcpath.c]

2009-04-20T14:59:33.677002Z Ken Sharp

Initialise a member of a struct to silence a Coverity warning. The warning about use of
an uninitialised variable is actually bogus, the value is copied, but not otherwise used.

[base/gdevpdfg.c]

2009-04-20T14:31:15.938087Z Ken Sharp

Check the length of the 'binary mode' file access string before strcat'ing it, to 
prevent a potential (but not actual) buffer overflow. Silences a Coverity warning.

[base/gdevpdf.c]

2009-04-20T14:27:28.365570Z Ken Sharp

Reformat a conditional sprintf to silence a Coverity warning.

[base/gdevpdfu.c]

2009-04-20T12:38:51.604664Z Ken Sharp

Fix (colour) : Ensure /UseCIEColor sets for initial space correctly.

Details
bug #690432 "/UseCIEColor not working with default colour space"

The change to process colour and colour space in C instead of in PostScript overlooked 
code in gs_setpd.ps  which interacts badly with an optimisation.

The optimisation skips changing colour space if its the same as the current space. But
if /UseCIEColor has changed value we must not skip the change. This was achieved 
previously by only skipping the change if UseCIEColor was false, and setting the space
to something other than DeviceGray in gs_setpd.ps.

We take advantage of the same trickery by always setting the space to something other
than DeviceGray in gs_setpd.ps, in the knowledge that initgraphics will switch the 
current space back to DeviceGray. Because the spaces don't match we will process the
change, getting the correct result for UseCIEColor.

[Resource/Init/gs_setpd.ps]

2009-04-20T12:07:28.372687Z Alex Cherepanov

Some broken TrueType 1 fonts may declare more tables than they actualy have.
Use .peekstring instead of for readstring for resding the font directory to
avoid positioning non-seekable input stream past the 1st table data.
Bug 690423, customer 580.

[Resource/Init/gs_ttf.ps]

2009-04-20T06:56:10.039816Z Ken Sharp

Fix (pdfwrite) : Work aroung wrong numGlyphs.

DETAILS :
Patch and log supplied by Leonardo.

Bug 690047 "Incorrect cmap generated by pdfwrite".

If a source True Type font defines numGlyphs lesser then
the actually defined number of glyphs,
the old code writes an incorrect True Type header with
wrong offsets to subtables.

Since in nowadays the number of glyphs may be increased
due to font merging, we decided to write the extended subtables
with a bigger number of glyphs. See comments in code.
See enlarged_numGlyphs and related code portions.
The original numGlyphs is kept unchanged for easier debugging.

For an easier debugging added checks into psf_write_truetype_data
for comparing actual subtable offsets with ones written
into the True Type header. The new structure subtable_positions
works for that.

Also improved a printing in gs_type42_font_init.
The old code can print occasional garbage beyond the font name end.
 
ref# leo2077.

[base/gstype42.c base/gdevpsft.c]

2009-04-18T22:07:42.659183Z Ray Johnston

Improve the documentation related to the %rom$ file system, searching when the
executable is built with COMPILE_INITS=1 (the current default on most platforms)
and the (mostly deprecated) older methods for compiling Type 1 fonts and Halftone
into threshold arrays.

[doc/Use.htm doc/Make.htm]

2009-04-17T08:16:45.715059Z Ken Sharp

Change #include of stdlib.h to use angle bracket form to avoid local path searches.

[base/gdevpdfj.c]

2009-04-17T00:32:26.343700Z Ralph Giles

Remove unnecessary includes of gserrors.h in the jpeg stream module.

Fixes two coverity warnings.

[base/lib.mak base/sjpegd.c base/sjpege.c]

2009-04-16T16:00:34.882286Z Ken Sharp

Fix (pdfwrite): Ignore missing side bearing/width in type 1 fonts.

Details:
Bug #689573: "glyphs with no (h)sbw cause error with pdfwrite".

Fonts which contain glyphs that do not begin with a sbw or hsbw operator are
technically invalid, but Acrobat Distiller, and other PostScript rips, ignore
the error and render the glyph with a side bearing and width of 0.

Modified the type 1 font code and the type 1 to type 2 (CFF) conversion code
to assume that such glyphs have a width and side bearing of 0 and are not a
cause for error.

[base/gstype1.c base/gxtype1.c base/gdevpsfx.c]

2009-04-15T20:08:27.661663Z Alex Cherepanov

Some broken Type 1 fonts define some of the attributes in the external scope
instead of defining them in the font dictionary. The patch tries to pick
the keys from the external scope and put them back to the font dictionary.
Bug 690418, customer 1110.

[Resource/Init/pdf_font.ps]

2009-04-15T19:18:47.976886Z Henry Stiles

On modern processors the c library's memset is usually faster than our
custom inline coding.  At least, using memset on recent windows, mac,
and linux platforms is appreciably faster for very long simple jobs
where erasing the page is significant relative to total job time.
Using the library's memcpy needs more investigation, it does not seem
to have significant impact on performance and also results in many
regressions which we haven't checked.

[base/gdevm24.c]

2009-04-15T06:50:51.933830Z Alex Cherepanov

Detect /Pages node without /Kids and bail out early. The code that tries
to determine the number of pages in the document takes such node as a /Page
node, which causes very long search for the last page. Bug 690389.

[Resource/Init/pdf_main.ps]

2009-04-14T04:56:06.103942Z Alex Cherepanov

Write color to the clip list even when it has no variable data, as in
[/Separation/None ...]. Fix a bug introduced by r. 8770 that causes rendering
of invisible objects with the last visible color. Bug 690395, customer 330.

[base/gxclpath.c]

2009-04-13T07:39:20.206752Z Ken Sharp

Silence some Coverity warnings (reasonable warnings, but not actually problems).

[base/gdevpdfj.c base/gdevpdtb.c base/gdevpdfe.c]

2009-04-13T07:31:25.084782Z Ken Sharp

Fix a typo in a comment.

[base/gdevpdtt.c]

2009-04-11T12:20:22.013355Z Alex Cherepanov

Repair broken PDF files created by "OKI HotKey" that misspell "endobj"
as "enbobj". Bug 690397.

[Resource/Init/pdf_base.ps]

2009-04-11T04:59:50.073474Z Ray Johnston

Fix for crash on 18-02B in clist code. The clist cbuf (on the stack) would
write past the end of the buffer are polluting the next varaible on the
stack (data_bits). Fixes 690399.

DETAILS:

This problem was introduced with r8712 (leonardo). The return value for
gx_dc_pattern_read_raster should be the number of bytes consumed, but in some
(rare) cases it would return 0, causing a later contamination of a byte past the
end of a buffer on the stack, polluting another value. The effect would be
dependent on the 'endian-ness' since only one byte was overwritten.

Also 'protection' for this condition was added in top_up_cbuf to prevent
future problems.

[base/gsptype1.c base/gxclrast.c]

2009-04-10T17:36:04.582061Z Ralph Giles

Remove the reference to needing to compile in pdfwrite, which is 
confusing to casual users. The pdfwrite device is part of all the
default builds.

[doc/Ps2pdf.htm]

2009-04-09T13:57:24.013138Z Ken Sharp

Fix (pdfwrite) : Omitted to write CIDToGIDMap when it was Identity, even if writing PDFA

Details
When writing CIDFontType2 fonts we should emit a CIDToGIDMap entry, which we do. However
if the map is the identity then we are permitted to omit it. Unless, of course, we are
writing a PDF/A compliant file, in which case we must write /Identity.

[base/gdevpdtw.c]

2009-04-09T08:44:23.319707Z Ken Sharp

Accidentally removed the prototype for pdf_document_metadata. Restored.

[base/gdevpdfg.h]

2009-04-09T08:37:55.568580Z Ken Sharp

Fix (pdfwrite): remove unused code for Font metadata.

Details:
Bug #690391: "PDF/A support generates invalid object references to font metadata".

The code for writing font metadata in PDF/A output was temporarily disabled
to fix problems with PDF/A output. 

It seems Acrobat cannot be persuaded to validate any file containing font
Metadata as PDF/A compliant, and Distiller cannot be persuaded to create
a PDF file containing font metadata.

The code has now been permanently removed.

[base/gdevpdfg.h base/gdevpdtb.c base/gdevpdfe.c]

2009-04-08T21:11:18.174166Z Ray Johnston

The massive 'DeviceN' commit (r2925) broke this. The correct b_w w_b
palette should not rely on color_info.polarity, but instead needs to
be determined from the value of color black. Inverted if black is not
0. Bug 690314 for customer #661.

DETAILS:

In page buffer mode, the 'palette' was set up during the first ht painting
operation from gdevmr1.c. This code was only used in clist mode when making
the 'buffer device' for the band.

[base/gdevmem.c]

2009-04-07T16:07:22.605043Z Ken Sharp

Removed the function pdf_color_space, which simply called pdf_color_space_named, with
two additional fixed parameters, NULL and 0.

Because these two function called each other Coverity seemed unable to deal with the
recursion and logged numerous STACK_USE errors. Also, its much easier to follow a single
function when debugging.

[base/gdevpdfk.c base/gdevpdfg.h base/gdevpdfb.c base/gdevpdfc.c base/gdevpdft.c base/gdevpdfv.c base/gdevpdfg.c base/gdevpdfi.c]

2009-04-07T10:20:02.752832Z Ken Sharp

Fix (ps2epsi): rounding problems calculating bbox.

Details:
Bug #688500 "ps2epsi produces too-narrow bounding box (2)".

Text and linework rendered at low resolution can differ by a few pixels from
that rendered at higher resolution because of serifs, miters etc. The ps2epsi 
script rendered the job at low resolution and used that both to calculate the 
bounding box, as well as for the epsi preview. This could lead to small errors 
if the job was re-rendered at a higher resolution

The new approach is to use the bbox device in Ghostscript to calculate a more
accurate bounding box. This has meant altering the scripts for all the
operating systems.

Also, the ps2epsi.bat file did not work correctly under Windows Vista. A
new 'cat.ps' file has been added to gs/lib. This uses the %infile% and
%outfile% environment variables and concatenates the two files together.
This only affects the Windows batch file.

[lib/ps2epsi lib/ps2epsi.ps lib/ps2epsi.cmd lib/cat.ps lib/ps2epsi.bat]

2009-04-06T15:30:47.928660Z Ken Sharp

Fix (pdfwrite): Incorrect handling of short images with subsampling.

Details:
bug #690350 "Conversion to pdf of a color pcl file generated by pjxl300 
gsview 4.9 driver"

The PCL file consists of a single large image covering the page. However,
the PCL interpreter calls 'process_zero_rows' (rtraster.c) which has the
side effect (sometimes at least) of closing the image and restarting it.

Pdfwrite already has code to handle a short image like this, it replaces
the image dictionary /Height value with the number of rows of data
actually received. However, if subsampling is enabled, this can be
incorrect, some of the rows of received data may have been discarded.

Altered pdf_end_image_binary to check if subsampling is taking place and
if it is to calculate the subsample factor and divide the number of rows
of data received by the subsample factor before storing as the new /Height.

[base/gdevpdfj.c]

2009-04-06T13:48:44.630941Z Alex Cherepanov

Skip Identity /TR function in soft mask dictionary on PostScript level instead
of passing {} to .begintransparencymaskgroup because ref_function() only
accepts function made of data and operator %execfunction. Bug 690379.

[Resource/Init/pdf_draw.ps]

2009-04-04T16:36:15.613476Z Alex Cherepanov

Revert initial /PolicyNotFount to 1. The previous value, 7, introduced by ESP
Ghostscript merger (rev. 8026) was non-standard and handled by Ghostscript
like 0. Fix '/undefined in --setpagedevice--' error in CUPS mode
(-dNOMEDIAATTRS) when setpagedevice request has unsupported keys. Bug 690376.

[Resource/Init/gs_setpd.ps]

2009-04-04T10:10:56.584771Z Ken Sharp

Enhancement (pdfwrite) : Allow pdfwrite to produce multiple copies of pages. New flag
        'DoNumCopies' added.

Details
Bug #690355 : "pdfwrite ignores the "#copies" setting in PostScript input"

The pdfwrite device follows the behaviour of Acrobat Distiller and ignores the /#copies
and /NumCopies settings in PostScript. This is at least partly because these can't be
expected to work properly with Destination annotations specifying a page as the
destination (eg Link or Outline annotations).

However CUPS (and potentially other PDF workflow applications) may have no way of
determining that application-produced PostScript requires multiple copies to be 
printed, after the file has been converted to PDF.

For the benefit of such applications a new flag 'DoNumCopies' has been added, if 
present then pdfwrite will duplicate each page in the output as many times as the 
/#copies or /NumCopies current setting.

There is currently no provision for reordering the pages, the duplicates follow the 
original immediately in page order.

[base/gdevpdfx.h base/gdevpdf.c base/gdevpdfp.c doc/Ps2pdf.htm base/gdevpdfu.c]

2009-03-31T15:21:50.984238Z Ken Sharp

Another case of the return value from pdf_attached_font_resource not being checked.

[base/gdevpdtt.c]

2009-03-31T15:17:52.100598Z Ken Sharp

Revision 9604 left an uninitialised variable being used. Moved usage beyond initialisation.

[psi/zfapi.c]

2009-03-31T14:59:18.448263Z Ken Sharp

Check the return value from pdf_attached_font_resource to silence a Coverity warning.

[base/gdevpdtt.c]

2009-03-31T14:52:09.178132Z Ken Sharp

Check the return value from pdf_open_docuemnt to fix a Coverity warning.

[base/gdevpdfu.c]

2009-03-31T14:41:29.436551Z Ken Sharp

Remove some unused code relating to embedding font metadata in PDF files.

[base/gdevpdfe.c]

2009-03-31T14:33:47.297209Z Ken Sharp

Remove unused variable 'glyph_index' from FAPI_do_char (gcc warning)

[psi/zfapi.c]

2009-03-31T14:30:14.712906Z Ken Sharp

Remove a bunch of unused headers to silence Coverity warnings.

[base/gdevpdfj.c psi/zfapi.c base/gdevpdfm.c base/gdevpdfo.c base/gdevpdtb.c base/gdevpdfp.c base/gdevpdtc.c base/gdevpdfr.c base/gdevpdte.c base/gdevpdtf.c base/gdevpdfu.c base/gdevpdti.c base/gdevpsfm.c base/gdevpdf.c base/gdevpsf2.c base/gdevps.c]

2009-03-31T14:01:20.321673Z Ken Sharp

Fix (pdfwrite): Incorrect handling of type 1 counter control hints.

Details:
bug #690349 "corrupt PDF is generated out of PostScript-file with asian fonts"

When converting type 1 outlines to type 2 outlines, we were not catering for
OtherSubrs 12 or 13 (counter control hints) in the first pass over the font.
These operators take a large number of arguments, and these were being left 
on the font operand stack. This quickly resulted in a stack overflow and an 
invalidfont error. We now remove the operands from the stack when we encounter 
them.

In addition, the code for writing CIDFontType0 fonts which called the conversion
routine was not checking the return value, and carried on trying to embed the font
anyway.

[base/gdevpsf2.c base/gdevpsfx.c]

2009-03-30T16:26:53.447317Z Ken Sharp

Fix (fonts): Potential dereference of NULL pointer.

Details
Flagged by Coverity, the FAPI code used op_show_find to get the text enumerator, but
did not check the return value, which can be NULL for a failure. Later the enumerator
is dereferenced, potentially causing a crash. This is actually almost certainly
impossible since this is a finish routine and the enumerator is known to have existed
previously, but its good to be safe.

[psi/zfapi.c]

2009-03-28T23:47:38.237280Z Alex Cherepanov

Recognize composite fonts and process descendant fonts according to
-dShowEmbeddedFonts flag. Bug 690363.

[toolbin/pdf_info.ps]

2009-03-28T21:03:25.515606Z Alex Cherepanov

Accept a string (instead of a name) as a possible /FontName value in
FontDescriptor. Recover broken PDF file generated by "MapForm". Bug 690365.

[Resource/Init/pdf_font.ps]

2009-03-28T19:32:04.398772Z Alex Cherepanov

Ignore /XObject attribute if it's not a dictionary. Recover broken
PDF file generated by "Allegro Design Publisher". Bug 690364, customer 870.

[Resource/Init/pdf_main.ps]

2009-03-26T13:46:29.711009Z Ken Sharp

Fix (pdfwrite) : NeverEmbed/AlwaysEmbed not working properly.

DETAILS :

Patch and Log supplied by Leonardo.

Bug 689610 "Possible /NeverEmbed vs /AlwaysEmbed problem"
The root of the problem is that (1) empty arrays did not work,
and (2) existing values of the parameters (before setdistillerparams)
were not properly accounted for in setdistillerparams.
 

In the old code, PS and C parts of "embed" parameters implementation
are inconsistent each to another and to the documentation. Replacing both with the
right logic defined in the Adobe Distiller Parameters specification.
The comment in gdevpsdp.c line 81 is kept as the basic interface definition.

Note: in the old code param_read_embed_array could not distinguish empty array from
no array,  but it is important for the Adobe logic.
Also psdf_put_embed_param parameters did not correspond  to the documentation in
gdevpsdp.c ln 81.

ref# leo2073.

[Resource/Init/gs_pdfwr.ps base/gdevpsdp.c]

2009-03-25T13:00:06.154261Z Till Kamppeter

Fixes in the "cups" (CUPS Raster) output device driver:

Fixed segmentation fault due to missing definition of get_color_comp_index() function. Used dummy function gx_error_get_color_comp_index() now (bug 690338).

Updated some (currently not used) functions to the current internal API of Ghostscript.

Made pre-initialization of device data structure complete.

[cups/gdevcups.c]

2009-03-25T05:14:39.001280Z Alex Cherepanov

Don't apply mapped transfer function to the uninitialised buffer. Old code
had no effect other than causing Valgrind warnings. Bug 688908.

[base/gsht1.c]

2009-03-25T05:01:11.445938Z Alex Cherepanov

When CCITTEncode'd stream is not properly terminated and used as an embedded
image, the filter may consume 'E' from 'EI'. Change PDF interpreter to accept
'I' as a synonym to 'EI'. Bug 690300, customer 353.

[Resource/Init/pdf_draw.ps]

2009-03-24T17:07:50.052635Z Ken Sharp

Remove some #ifdef code and some C++ style comments from the FreeType bridge code.

[psi/fapi_ft.c]

2009-03-24T15:55:25.161400Z Ken Sharp

Fix (fonts) : Sheared/rotated text incorrect with FreeType bridge

Details
The FreeType code uses a different order for the transformation matrix elements, we
were sending the matrix in PostScript order, resulting in incorrect transformations.

[psi/fapi_ft.c]

2009-03-23T15:19:13.060013Z Ken Sharp

Fix (pdfwrite) : Wrong page orientation with italic font.

DETAILS :

Patch and log message submitted by Leonardo.

Bug 689574 "italic/oblique fonts produce incorrect page orientation". 

Replacing text orientation recognition trick with a right math.

ref# leo2072.

[base/gdevpdtt.c]

2009-03-23T14:14:38.656422Z Ken Sharp

Fix (fonts) : Coverity warning

Details:
Move a NULL pointer check so that it is performed before dereferencing the pointer.
Warning flagged by Coverity.

[psi/zfapi.c]

2009-03-23T13:48:49.969966Z Ken Sharp

Fix (pdfwrite) : Skip OpenType tables EBDT, EBLC, EBSC.

DETAILS :

Patch and log message submitted by Leonardo.

This fixes the large size of the PDF output reported in
Bug 689209 "ps2pdf doesn't subset embedded bitmaps".
The patch skips Open Type tables that are not required by
the PDF specification.

A better fix would be subsetting EBDT, EBLC, EBSC
(probably what the user wants), but we have not enough
examples for testing all possible formats of those tables.
Also it will be necessary to compact the glyph index space
and re-index subglyphs, otherwise the subclassed EBLC
is still too big. In general subsetting TrueType fonts is still
a future goal.
 

[base/gdevpsft.c]

2009-03-23T09:40:03.808902Z Ken Sharp

Fix (fonts): Allow copying TT descandants of CIDFonts with no name table.

Details:
bug #690348 "Error "/invalidfont" when generating PDF"

The PDF file for this contains an embedded TrueType font, configured as a CIDFont, and
the TT name table is empty (not missing, but empty). This is probably technically
illegal.

However, we don't actually require the name table, or other font information, when
copying these fonts for pdfwrite, so we simply ignore this error in this case.

[base/gxfcopy.c]

2009-03-22T04:43:07.001485Z Alex Cherepanov

Initialize Jbig2TextRegionParams.sbrat even when it is not used in
calculations because it's included in error messages causing Valgrind
warnings.

[jbig2dec/jbig2_text.c]

2009-03-20T08:26:50.704630Z Ken Sharp

Fix (pswrite) : extra '%' output in DSC comment

Details:
bug #690347 "pswrite device generates %%%%BeginPageSetup"

Revision 9396 moved the emission of the %%PageBoundingBox comment, but due to an
oversight caused the %%BeginPageSetup comment to be emitted with too may '%' characters.

[base/gdevpsu.c]

2009-03-19T21:19:31.945883Z Alex Cherepanov

Allocate a file name string returned by .tempfile independently of the
file object. Don't free the file name string when the file is closed.
Fix a Valgrind warning and potential SEGV.

[psi/zfile.c]

2009-03-19T17:01:34.362845Z Ken Sharp

Fix (fonts): Uninitialised variables in FreeType bridge.

Details:
bug #690344 "FreeType bridge produces lots of 'clipping glyph' warnings"

The FreeType bridge code failed to initialise some member variables of a structure when
retrieving glyph metrics, leading to spurious warnings.

[psi/fapi_ft.c]

2009-03-19T16:40:12.949694Z Ken Sharp

Fix (fonts): PaintType 2 fonts not working.

Details:
bug #689826 "FT_BRIDGE crashes with CID fonts"

The initial problem is that a required table, TT_cmap, was NULL, and was not tested
by the CID decoding module before attempting to use it.

Further investigation revealed a fair number of problems surrounding this are. The 
problems stem from the use of a native TrueType font on disk to replace a CIDFont (not 
from an actual CIDFont as the summary suggests). When using a CIDFont the character
code is mapped to a CID using the CMap and the CID is directly used to extract the 
glyph program from the font's CharStrings dictionary.

With a TrueType font that is not sufficient, TrueType fonts use Glyph IDs (GID) and
have a completely different method of mapping the encodings. We attempt to handle this
by converting the CID to a Unicode value, and then use the TT Unicode CMAP subtable to
convert the Unicode value to a GID.

With GS' own font handling this works, because we extract the CMAP subtable and carry
it around in the font. WHen using FreeType this is not done, and so the conversion
fails.

Modified the FAPI interface to create a new method 'check_cmap_for_glyph' which will
allow us to interrogate the TT CMAP subtable from the FAPI server. Copied sections of
CID decoding from zcid.c to zfapi.c in order to perform the same checks as our own 
code and use the correct Unicode value.

[psi/fapi_ft.c psi/zfapi.c psi/ifapi.h psi/fapiufst.c]

2009-03-19T16:10:19.044766Z Ken Sharp

Fix (fonts): PaintType 2 fonts not working.

Details:
bug #690343 "Fonts with PaintType 2 (outline) not working with FreeType bridge"

The FAPI code seems to assume that it will always get an 'e_limitcheck' error when no
raster is available. This seems to be true for glyphs too large to cache, but is not
the case when the font is intended to be an outline. In this case there is no raster, 
but the error return is not e_limitcheck.

Rather than rely on an error value, modified the code so that if the font has a 
non-zero PainType, we assume that we only have an outline.

[psi/zfapi.c]

2009-03-19T15:59:50.732428Z Ken Sharp

Fix (fonts): Crash caused by missing tests.

Details:
bug #690342 "GPF/segment violation using FreeType bridge"

When using a TrueType font to substitute for a CIDFont, there is no BuildCHar, and so
trying to resolve the name will fail, resulting in a GPF. Fixed by testing the name
objects before attempting to resolve them.

[psi/zfapi.c]

2009-03-19T01:48:02.632278Z Henry Stiles

Fix 689822, the previous code did not free the palette associated with
an indexed color space to remain backward compatible wih pcl and
pclxl.  The previous setup, before 8928, allowed the clients to manage
the table for memory.  The commented out code in this module was a
workaround until we fixed the pcl clients.

[base/gscolor2.c]

2009-03-18T22:58:18.105967Z Ralph Giles

Backslash-escape nested parentheses in ps strings.

This isn't necessary with the gs scanner, but is considered good practice.
Thanks to Ray Johnston for raising the issue.

[Resource/Init/pdf_draw.ps]

2009-03-18T21:58:18.821466Z Ralph Giles

Correct diction in unbalanced q/Q warnings.

[Resource/Init/pdf_ops.ps Resource/Init/pdf_main.ps Resource/Init/pdf_draw.ps]

2009-03-15T22:42:53.413236Z Alex Cherepanov

Add hagaki (Japanese postcard) paper size to the list of known paper sizes
because this format is widely used in Japan and popular PAPERSIZE option
takes a paper name. Bug 690213.

[doc/Use.htm Resource/Init/gs_statd.ps]

2009-03-14T05:44:00.168304Z Ray Johnston

Fix chunk_resize_object to retain the old data and add gs_debug['A'] debug
printing.

[base/gsmchunk.c]

2009-03-13T00:19:17.919125Z Ralph Giles

Correct some comment typos in the icclib wrapper.

Also removes trailing whitespace.

[base/gsicc.c]

2009-03-12T19:43:29.615649Z Ray Johnston

Fix Segfault in the 'resize_object' of the chunk memory wrapper.

DETAILS:

A typical (unfortunately) instance of using (part of) an object after
it has been freed.

[base/gsmchunk.c]

2009-03-12T13:32:23.551227Z Alex Cherepanov

Remove code that has no effect other than moving uninitialized data around
and causing Coverity warning.

[psi/iutil2.c]

2009-03-12T00:18:03.727459Z Marcos H. Woehrmann

Fixed typo introduced in r9545.

[base/gdevp14.c]

2009-03-11T22:00:55.007444Z Ray Johnston

Set the log_op (ROP) to a straightforward value when doing the pdf14 put_image
ignoring the input imager state log_op. Bug 690321.

DETAILS:

The rev 8170 alludes to doing something to prevent a similar problem (bug
689186: see DETAILS comment #2 in the log message), but this was NOT the
correct solution. When writing the transparency buffer to the target device
in the pdf14 POP_DEVICE using the "put_image" proc, we really need to use
a ROP that simply allows us to copy the image in 'normal' mode i.e. use
rop3_default.

The state of the low bits of the clist_playback_band imager_state.log_op is
rather arbitrary at the end of the band and not relevant to the put_image
operation.

[base/gdevp14.c]

2009-03-11T13:46:33.591266Z Alex Cherepanov

Move a variable declaration to the outer block to prevent out-of-scope access
and a corresponding Coverity warning.

[psi/idict.c]

2009-03-11T12:51:21.059563Z Alex Cherepanov

Propagate error code from gs_path_enum_next() upstream in operator
.getpath . Fix a Coverity warning.

[psi/zupath.c]

2009-03-10T00:07:03.756709Z Ralph Giles

Add the soclean and debugclean targets to distclean. Bug 690263.

[base/Makefile.in]

2009-03-07T22:59:15.942227Z Alex Cherepanov

Increase operand stack to 100000 elements and change stack overflow handling.

DETAILS:
Following Adobe implementation, copy only a few top elements of the stack
to the corresponding element of the $error dictionary when the stack
overflows. Adobe copies up to 500 top elements, we copy up to 65535. This
feature enables Ghostscript to have maximum stack sizes larger than 65535.
The maximum operand stack size is set to 100000 to match Adobe interpreters.
The large stack size is needed for some PDF files that construct large
dictionaries using << ... >> operators. Bug 690307, customer 850.

[Resource/Init/gs_init.ps psi/interp.c]

2009-03-07T21:46:16.367445Z Till Kamppeter

Let pdftoraster CUPS filter not be build with CUPS < 1.2 and allow suppressing build of pdftoraster via command line option (needed for Mac OS X).

[cups/cups.mak base/Makefile.in base/configure.ac]

2009-03-05T09:56:07.987614Z Ralph Giles

Look for the 'cmap' table in the font dictionary and use it when mapping
a cid to a character code when using the FAPI bridge.

This replaces a segfault with an invalid font error. Bug 689826.

Details:

This clause in FAPI_do_char() was explicitly calling
cid_to_TT_charcode() with a NULL TT_cmap argument, which that function
dereferenced, causing a segfault. As far as Ken and I can tell, that
function can't do anything useful without the cmap table from the
underlying font, so it makes the most sense the resolve the segfault
this way.

However, the ps library code doesn't set this key in the font
dictionary, so for now this just replaces the segfault with an
/invalidfont in --.FAPIBuildGlyph-- error. We could continue
silently by ignoring the mapping if the cmap isn't available down
in TT_char_code_from_CID_no_subst() in which case that font just
would not render as part of the document. We expect to fix this on
the postscript side, so I felt this was a better course for now.

[psi/zfapi.c]

2009-03-04T13:27:07.376818Z Ken Sharp

Fix the FreeType bridge code for outlines (result of charpath). 

The previous code assumed that co-ordinates returned by FT were in a 16.16 fixed
precision format, whereas they are actually in a 26.6 form. Rescale the 26.6 to 16.16
before returning to FAPI so that the conversion into GS co-ordinates works correctly.

[psi/fapi_ft.c]

2009-03-03T16:23:24.892806Z Ken Sharp

Fix (colour): Faulty error handling

Details:
bug #690312 "gs stalls, never returns on attached figure"

The job causes the 'base' (Gray, RGB, CMYK) colour code to be executed with a completely
full stack, which causes a stackoverflow because this routine needs to push the colour
space name onto the operand stack.

However, the operand stack wasn't being checked until after the continuation procedure 
had been pushed onto the execution stack, so after the error handling, we returned to
the continuation procedure, but without an appropriate operand stack. This caused a
loop to run without bounds.

Fixed by checking the operand stack beforesetting up the execution stack for the
continuation and aborting if it is full. Desk checking revealed another potential case
of the same problem, fixed in the same patch.

[psi/zcolor.c]

2009-03-02T19:54:01.945423Z Ray Johnston

Add mention of 'vewrgb.ps'. See the source for usage.

[doc/Psfiles.htm]

2009-03-02T19:47:28.992085Z Ralph Giles

Update copyright header and file metadata for viewrgb.ps.

[lib/viewrgb.ps]

2009-03-02T18:45:32.781041Z Ray Johnston

Add support for BITS=2, remove left over debugging messages. Note that
this has only been tested for BITS=1, BITS=2, BITS=8. BITS=4 is not
supported (Indexed color space is limited to palette of 4096 colors).

[lib/viewrgb.ps]

2009-03-02T17:44:22.371407Z Ray Johnston

Add a utility to view bitrgb files (derived from viewcmyk.ps)

[lib/viewrgb.ps]

2009-03-02T06:13:02.641888Z Alex Cherepanov

When /JBIG2Decode filter takes /.jbig2globalctx parameter and retains a
pointer to it, the filter must not be allocated in global memory if the
parameter is local. Bug 690308.

[psi/zfjbig2.c]

2009-02-28T00:03:41.220730Z Ralph Giles

Remove a continued line in a makefile variable.

Solaris 'make' doesn't like this. Bug 690311.

[psi/psromfs.mak]

2009-02-26T04:07:56.132242Z Ray Johnston

Fix for access to potentially uninitialized memory in gx_hld_get_gstate_ptr
when called with an imager_state that is on the stack (as it is when this
is called from the clist). Valgrind spotted this. See coment #5 in Bug
690299.

DETAILS:

The previous method of checking the object type depended on access BEFORE
the pointer. This was (margnially) OK for allocated objects, but NOT OK
when the structure is stack based.

[base/gsstate.c base/gxclist.c base/gxistate.h base/gdevvec.c base/gxhldevc.c]

2009-02-26T03:51:58.114906Z Ray Johnston

Add some documentation on a useful debugging PS operator and it's C code hook.

[doc/Language.htm]

2009-02-23T19:17:44.665816Z Marcos H. Woehrmann


Change the maxval value for pkm and pkmraw files from 1 to 255.

Details:

Some programs (notably Adobe Photoshop through at least CS4) do not
correctly read PPM files that have a maxval!=255, displaying them
as all black (technically not entirely black, but with pixels set
to 0 or 1).  

This change causes Ghostscript to set maxval to 255 and scale the
output bitmap to 0..255.  Because PBM doesn't pack pixels in the
PPM raw format the output file size will not change; PPM files will
up to double in size (previously each pixel used 6 bytes, "1 1 1 ",
now each pixel uses up to 12 bytes, "255 255 255 ").

[base/gdevpbm.c]

2009-02-23T11:35:26.753646Z Ken Sharp

Fix (ps2write)

Details
The Debug flag for the new 'center pages' switch was incorrectly spelled as PDFR_DEBUG1 instead of PDFR_DEBUG.

[Resource/Init/opdfread.ps]

2009-02-21T20:59:34.903436Z Ralph Giles

Update the msvc build of the freetype bridge for the new link scheme.

This commmit fixes some errors in the earlier untested update. In addition, the earlier FT_LIB (singular) makefile variable is resurrected for the msvc build only. It is necessary because the freetype project file embeds the release number of build variant in the library filename. If FT_LIB is not set it defaults to the multi-threaded debug build of the 2.3.8 release. Obviously this should be changed when building a binary for release, or against a different version of the freetype library.

[base/winlib.mak doc/Make.htm]

2009-02-20T23:17:14.675067Z Ralph Giles

Replace the hardcoded reference to the FreeType library subpaths with a
more direct specification of compile and link flags.

The msvc build is untested.

Details:

Previously, the top level makefile was supposed to define a path to the
freetype source directory, along with the platform-specific library
filename extension. From this the ft bridge makefile section generated
specific references for include paths and the library. This only worked
with a specific version of the library.

This commit removes the variable for passing the library extension,
and relies on the top-level makefile to provide the link commands,
passed in the FT_LIBS variable. Such link commands are generally
platform-specific anyway, so FT_LIB_EXT was redundant. Likewise,
the include path specifiers must be part of the FT_CFLAGS variable.

Previously, FT_LIBS was called FT_LIB. We generally use _LIB for a
single library name. Having the plural LIBS is more common for an
actual link command, which may include flags and other libraries
which are dependencies. This variable is used in the second way.

The build documentation is also updated to reflect the new scheme,
and mention the incremental font support, which seems to be disabled
in most builds.

[base/winlib.mak doc/Make.htm psi/int.mak]

2009-02-20T23:17:10.859552Z Ralph Giles

Add some missing dependencies to the interpreter makefile.

Strangely, these don't help ensure arch.h is built before write_t2.c.

[psi/int.mak]

2009-02-20T23:17:08.595733Z Ralph Giles

Replace 'Free Type' with 'FreeType' in the build documentation.

[doc/Make.htm]

2009-02-20T23:17:05.547619Z Ralph Giles

Update freetype includes to the currently recommended scheme.

Details:

In freetype2, the recommended method of including the headers is to
include <ft2build.h>, depending on a -I line on the compiler's command
line to select the particular location for this, usually something like
$(INCLUDE_DIR)/freetype/

This header defines macros which expand to includes for particular
features, depending on how the particular freetype instance being
built is configured.

This means that we can't have explicit dependencies on the headers we
use, so those references are also removed. This has a side effect of
making it much easier to link with a system version of freetype.

However, the fapi_ft bridge requires freetype's incremental fonts
feature, which seems not to be enabled by default.

[psi/fapi_ft.c psi/int.mak]

2009-02-20T19:10:04.104225Z Alex Cherepanov

Check that gs_init.ps can be found at $(GenericResourceDir)Init/gs_init.ps
Issue a warning if this file cannot be found. Bug 690289.

[Resource/Init/gs_res.ps]

2009-02-19T18:53:21.845051Z Ralph Giles

Update our internal copy of the libpng source to the 1.2.35 release.

[libpng]

2009-02-19T18:52:24.164375Z Ralph Giles

Move the libpng source out of the way for an upgrade.

[libpng]

2009-02-19T17:13:36.155519Z Ray Johnston

Fix for segfault reported as bug 690051 caused by the assumption that the architecture
had 32-bit integers. Thanks to Wendy for the patch.

[base/gdevsgi.h base/gdevsgi.c]

2009-02-17T20:40:38.935981Z Alex Cherepanov

Remove obsolete information from Use.htm. Ghostscript now accepts PDF from
standard input and, since rev. 610 flushpage occurs even with -dNOPROMPT .

[doc/Use.htm]

2009-02-16T20:00:17.223054Z Ralph Giles

Set native eol-style on the jasper library source. Bug 690292.

[jasper/src/libjasper/include/jasper/jas_types.h jasper/src/libjasper/jpc/jpc_cs.c jasper/src/libjasper/mif/mif_cod.h jasper/src/libjasper/pgx/pgx_enc.c jasper/src/libjasper/bmp/bmp_cod.c jasper/src/libjasper/jpc/jpc_cs.h jasper/src/libjasper/ras/ras_dec.c jasper/src/libjasper/pgx/pgx_enc.h jasper/src/libjasper/bmp/bmp_cod.h jasper/src/libjasper/base/jas_version.c jasper/src/libjasper/jpc/jpc_qmfb.c jasper/src/libjasper/ras/ras_cod.c jasper/src/libjasper/base/jas_iccdata.c jasper/src/libjasper/base/jas_seq.c jasper/src/libjasper/jpg/jpg_val.c jasper/src/libjasper/jpc/jpc_qmfb.h jasper/src/libjasper/jpc/jpc_fix.h jasper/src/libjasper/jpc/jpc_tagtree.c jasper/src/libjasper/ras/ras_cod.h jasper/src/libjasper/pgx/pgx_dec.c jasper/src/libjasper/jpc/jpc_tagtree.h jasper/src/libjasper/base/jas_getopt.c jasper/src/libjasper/jpc/jpc_mqenc.c jasper/src/libjasper/include/jasper/jas_getopt.h jasper/src/libjasper/jpg/jpg_dummy.c jasper/src/libjasper/jpc/jpc_bs.c jasper/src/libjasper/include/jasper/jas_init.h jasper/src/libjasper/jpc/jpc_enc.c jasper/src/libjasper/base/jas_string.c jasper/src/libjasper/base/jas_malloc.c jasper/src/libjasper/include/jasper/jas_string.h jasper/src/libjasper/include/jasper/jas_malloc.h jasper/src/libjasper/jpc/jpc_mqenc.h jasper/src/libjasper/pgx/pgx_cod.c jasper/src/libjasper/jpc/jpc_bs.h jasper/src/libjasper/jpc/jpc_t1enc.c jasper/src/libjasper/jpc/jpc_enc.h jasper/src/libjasper/jpg/jpg_enc.c jasper/src/libjasper/pgx/pgx_cod.h jasper/src/libjasper/jpc/jpc_t1enc.h jasper/src/libjasper/jpg/jpg_enc.h jasper/src/libjasper/include/jasper/jas_version.h jasper/src/libjasper/include/jasper/jas_seq.h jasper/src/libjasper/jpc/jpc_mqdec.c jasper/src/libjasper/include/jasper/jas_math.h jasper/src/libjasper/base/jas_stream.c jasper/src/libjasper/jpc/jpc_flt.h jasper/src/libjasper/jpc/jpc_dec.c jasper/src/libjasper/include/jasper/jas_stream.h jasper/src/libjasper/base/jas_icc.c jasper/src/libjasper/jpc/jpc_mqdec.h jasper/src/libjasper/jpc/jpc_t1dec.c jasper/src/libjasper/jpc/jpc_dec.h jasper/src/libjasper/pnm/pnm_enc.c jasper/src/libjasper/jpg/jpg_dec.c jasper/src/libjasper/jp2/jp2_enc.c jasper/src/libjasper/jpc/jpc_mqcod.c jasper/src/libjasper/jpc/jpc_t1dec.h jasper/src/libjasper/pnm/pnm_enc.h jasper/src/libjasper/base/jas_tvp.c jasper/src/libjasper/jpc/jpc_mqcod.h jasper/src/libjasper/jpc/jpc_t1cod.c jasper/src/libjasper/jpc/jpc_cod.h jasper/src/libjasper/jpc/jpc_t2enc.c jasper/src/libjasper/jpc/jpc_util.c jasper/src/libjasper/jpc/jpc_t1cod.h jasper/src/libjasper/jpc/jpc_t2enc.h jasper/src/libjasper/jpc/jpc_util.h jasper/src/libjasper/jpg/jpg_cod.h jasper/src/libjasper/jpc/jpc_mct.c jasper/src/libjasper/include/jasper/jas_image.h jasper/src/libjasper/include/jasper/jas_debug.h jasper/src/libjasper/pnm/pnm_dec.c jasper/src/libjasper/jpc/jpc_mct.h jasper/src/libjasper/include/jasper/jas_config_win32.h jasper/src/libjasper/jpc/jpc_math.c jasper/src/libjasper/jp2/jp2_dec.c jasper/src/libjasper/jpg/jpg_jpeglib.h jasper/src/libjasper/jpc/jpc_math.h jasper/src/libjasper/jp2/jp2_dec.h jasper/src/libjasper/base/jas_cm.c jasper/src/libjasper/include/jasper/jas_icc.h jasper/src/libjasper/include/jasper/jas_cm.h jasper/src/libjasper/jpc/jpc_t2dec.c jasper/src/libjasper/pnm/pnm_cod.c jasper/src/libjasper/base/jas_init.c jasper/src/libjasper/jp2/jp2_cod.c jasper/src/libjasper/include/jasper/jas_config.h jasper/src/libjasper/jpc/jpc_t2dec.h jasper/src/libjasper/pnm/pnm_cod.h jasper/src/libjasper/jp2/jp2_cod.h jasper/src/libjasper/bmp/bmp_enc.c jasper/src/libjasper/include/jasper/jas_tvp.h jasper/src/libjasper/jpc/jpc_t2cod.c jasper/src/libjasper/bmp/bmp_enc.h jasper/src/libjasper/jpc/jpc_t2cod.h jasper/src/libjasper/base/jas_image.c jasper/src/libjasper/base/jas_debug.c jasper/src/libjasper/include/jasper/jas_fix.h jasper/src/libjasper/ras/ras_enc.c jasper/src/libjasper/include/jasper/jasper.h jasper/src/libjasper/ras/ras_enc.h jasper/src/libjasper/jpc/jpc_tsfb.c jasper/src/libjasper/bmp/bmp_dec.c jasper/src/libjasper/jpc/jpc_tsfb.h jasper/src/libjasper/mif/mif_cod.c]

2009-02-16T19:58:09.175955Z Ralph Giles

Convert a jasper source file to unix line endings. Bug 690292.

[jasper/src/libjasper/jpc/jpc_qmfb.c]

2009-02-14T00:46:58.521562Z Ralph Giles

Don't strip dynamic driver modules when linking them.

This is better done at the install or packaging stages if space is a 
concern.

Also, propagate LDFLAGS to the link command line. This may or may not be 
what you want, but is more likely to help helpful than not.

After a patch by Kevin Pyle. Bug 690288. Originally Gentoo bug 215913.

[base/devs.mak]

2009-02-13T09:22:34.492616Z Ken Sharp

Fix (TrueType interpreter): Ignore a 'faulty font' condition

Details:
bug #689760 "Missing characters: Failed to interpret TT instructions"

The font in question is technically invalid. The problem occurs in function 1 of the
FPGM table:

	00069: PUSHB[2]              0    21 
	00072: JMPR       
	00073: ABS        
	00074: DUP        
	00075: ROLL       
	00076: RCVT       
	00077: DUP        
	00078: ROLL       
	00079: SUB        
	00080: ABS        
	00081: PUSHB[1]             50 
	00083: LT         
	00084: IF         
	00085: SWAP       
	00086: EIF        
	00087: POP        
	00088: ROUND[Black] 
	00089: PUSHB[1]             64 
	00091: MAX        
	00092: ENDF       

The JMPR (jump relative) instruction is intended to resume execution at the ENDF
instruction, but the number of bytes is miscounted, falling of the end of the function.
I suspect some TT interpreters catch this by spotting the fact that the IP is past the
end of the function.

We don't seem to be able to check if we've fallen off a function, because we don't store
function lengths, so this code works around the problem by checking the opcode after we
apply the JMPR but befopre resuming execution. If the opcode is *not* ENDF, but the 
preceding opcode was, assume that we have a counting problem, and move the IP back one
instruction.

Also applied the same work around to JROT and JROF instructions.

[base/ttinterp.c]

2009-02-12T21:07:53.759360Z Alex Cherepanov

Limit the length of a buffer string for CCITTFaxEncode compression in
Type 32 font to 65535. Old code used worst case estimation (5x expansion)
that exceeded maximum string size for large glyphs. Bug 690286.

[Resource/Init/gs_typ32.ps]

2009-02-11T20:35:13.542448Z Henry Stiles

Revert the last change which was completely wrong.  The system does
not support depth 3 as Ray pointed out.  As it turns out the depth is
corrected so there is no difference in output between the two
configurations.

[base/gdevbit.c]

2009-02-11T19:37:42.026795Z Henry Stiles

The default bitrgb device prototype specified a depth of 4 instead of
3.  This change will break all regression tests that use bitrgb
(hopefully).

[base/gdevbit.c]

2009-02-11T15:41:25.950909Z Ken Sharp

Fix (TrueType interpreter): Ignore a 'faulty font' error

Details:
bug #689471 "Error in Processing Type42 Charstrings"

The font in question is missing a glyph in the GLYF table, which is used 
as a component by a composite glyph. A later instruction then tries to access 
a non-existent point (probably defined in the missing component), which causes
an error.

FreeType 1 and 2 both ignore this error unless pedantic_hinting is set, other
TrueType interpreters behave similarly.

Modified the code in Ins_MIAP to ignore errors of this type, and continue.

[base/ttinterp.c]

2009-02-10T19:55:40.527955Z Ralph Giles

Move some components of the freetype bridge to the interpreter source 
directory.

These should have been put there in the source tree reorganization.

[base/write_t1.c base/wrfont.c base/write_t2.c psi/write_t1.c psi/wrfont.c psi/write_t2.c base/write_t1.h base/wrfont.h base/write_t2.h psi/write_t1.h psi/wrfont.h psi/write_t2.h]

2009-02-10T17:38:02.642910Z Marcos H. Woehrmann

Make the font cache determinstic.

Details:

Previously the font cache order was based on the value of the pair
pointer.  On some (most?) computers this resulted in the cache being
filled in a deterministic way but not on the the cluster used for
regression testing.  The cache fill order is important because it
affects which entries are removed when the cache is full which
matters because re-rendered glyphs can differ from the cached
rendering (a separate bug, 690281, has been opened for this issue).

Fixes bugs 690232 and 690233.

[base/gxfcache.h base/gsfont.c base/gxccman.c]

2009-02-10T11:56:30.899368Z Ken Sharp

Fix (graphics library): Rotated/skewed text not anti-aliased

Details:
bug #688032 "Rotated text is not antialiased."

A specific test in 'show_set_scale' disabled oversampling of text if it was
rotated or skewed. Testing indicates that anti-aliasing does provide some improvement 
in text, even when it is rotated or skewed, so this test has been removed.

Also removed the compile-time option to not cache rotated glyphs by removing the
#define CACHE_ROTATED_CHARS and the test against it in show_state_setup. This allowed
the removal of the routine 'is_matrix_good_for_caching'.

[base/gxchar.c]

2009-02-10T02:17:30.702347Z Ralph Giles

Propagate LDFLAGS when linking the pdftoraster utility. Bug 690279.

Also, move the cups link libraries to the end of the command line
for tools that require dependency order.

[cups/cups.mak]

2009-02-09T22:18:20.864249Z Ralph Giles

Protect some printf-like calls in the pcl3 output device from spurious
format specifiers. This eliminates a security-related gcc warning.

Details:

I believe the previous code was actually safe. However, this approach is
more robust. If any of the string buffers passed to errprintf() happened
to contain a format specifier (like %d) an out of bounds stack reference
could result.

This allows the default build to complete with -Werror=format-security,
which the Mandriva linux distribution is reported to be using.

[contrib/pcl3/eprn/gdeveprn.c contrib/pcl3/src/gdevpcl3.c]

2009-02-09T22:18:18.594295Z Ralph Giles

Have gs_throw_code() print the corresponding error string literally to
avoid interpretation of spurious format specifiers. This removes a
security-related gcc warning.

Details:

The previous code was safe. gs_(re)throw_code() called gs_errstr() to
convert the code to a printable string, and these contain no format
specifiers. However, the new method is more robust, and allows
compilation with -Werror=format-security which Madriva is reportedly
using by default.

[base/gserror.h]

2009-02-09T00:32:35.099915Z Alex Cherepanov

Add a reference to doc/Use.htm#CIDFontSubstitution to the message about
CIDFont substitution based on registery and ordering data. Bug 690102.

[Resource/Init/pdf_font.ps]

2009-02-08T06:05:54.380114Z Alex Cherepanov

Correct handling of the operand stack overflow requires one more element than
the normal case. The maximum operand stack size has been reduced by 1 element
relatively to the size set by rev. 6889 for the bug 688764. Bug 690209.

[Resource/Init/gs_init.ps]

2009-02-06T19:17:54.834304Z Ray Johnston

Fix for 0 length files from the bit*** devices when -dLastLine was not set.
The LastLine now defaults to the last line of the page (height-1). Bug 690217.
Thanks to Piotr Strzelczyk for spotting this.

DETAILS:

Note that this prevents output of a single line at the top (line 0), but this
was mostly just for testing to emulate custom devices that only call 'get_bits'
on less than all of the lines which had the potential to confuse the thread
lookahead prediction logic in the multi-threaded rendering case.

[base/gdevbit.c]

2009-02-05T13:29:10.275517Z Ken Sharp

New feature (pswrite): Center pages on output, new switch -dCenterPages

Details:
bug #690100 "Enhancement request: create centered output when reading PDF"

Added a new switch to the collection of media handling controls supported by ps2write. The new CenterPages switch will center the output image on the media, regardless of the size of the media (if the output is larger than the media it will be truncated, but the image will still be centered on the media).

This switch is compatible with the RotatePages control, but not with SetPageSize or FitPages. Like the other switches it can be set as an argument to ps2write when creating a PostScript file (which fixes the result) or it can be supplied to the consuming interpreter in some fashion.

Updated ps2ps2.htm with the new details.

[doc/Ps2ps2.htm base/gdevpdfx.h base/gdevpdfp.c Resource/Init/opdfread.ps base/gdevpdfu.c]

2009-02-04T08:45:21.899308Z Ken Sharp

Fix (pdfwrite): Limit on CIDFont size too low

Details:
bug #688736 "ps2pdf does not work on these files"

The 'remaining' issue in these files is the 'error -15' problem. This is caused when writing out a subset CIDFont, and the subset grows to be a large font in its own right.

The way that CFF fonts are written, there is interaction between certain parts. The offset of various tables depends on the size of the Top Dict, but the Top Dict contains the offsets of the CharStrings and the CharSet, so its size is partially dependent on those offsets....

The code in psf_write_cid0_font() initially assigns large values (0x7fffff) to the offsets, then iterates over the data quickly converging on a suitable size of offset, which allows calculation of the Top Dict. 

The problem was that 0x7fffff was too small for the offset of the Font Dict, (which comes after the CharStrings) if the CharStrings table was very large (~8MB). While this is probably adequate in 'real life', because its unlikely a real job would contain so many different glyphs, it is simple to solve by increasing the original 'guess' from 0x7fffff to 0x1ffffff (~32MB), which should be enough for any font.

[base/gdevpsf2.c]

2009-02-04T08:44:40.067265Z Ken Sharp

Fix (pswrite): Incorrect A3 page size

Details:
bug #690259 "A3 pagesize pointsize definition wrong in gdevpsu.c"

The definition of the A3 paper size was 842 by 1190 in psw_write_page_header(). The definitions elsewhere in GS have a height of 1191 (which is closer to the ISO metric paper size).

Modified the page height to be 1191, also modified the media matching code so that it allows +/- 5 points when matching media.

Thanks to Roland Friedwagner for debugging the problem and supplying a patch, and to Alex Cherepanov for suggesting the media matching.

[base/gdevpsu.c]

2009-02-04T03:39:35.058845Z Alex Cherepanov

Keep reading the data sources until all of them reach EOF instead of bailing
out when the first one reaches EOF. Different data sources can use different
compression techniques and buffer sizes. The mask in masked images also has
different length than other streams.
Bug 690237, customer 850.

[psi/zimage.c]

2009-02-03T23:56:30.290105Z Alex Cherepanov

Add one more header type to the list of possible CFF headers.
Bug 690256, customer 210.

[Resource/Init/pdf_font.ps]

2009-02-03T19:23:42.937693Z Ralph Giles

Bump version number and product name after the 8.64 release.

[base/gscdef.c base/version.mak Resource/Init/gs_init.ps doc/News.htm]

2009-02-03T17:03:41.696119Z Ralph Giles

Update release date and change logs for the 8.64 release.

[doc/History7.htm doc/Projects.htm doc/History8.htm man/dvipdf.1 base/gscdef.c man/ps2ascii.1 doc/Use.htm doc/Readme.htm doc/Source.htm doc/Deprecated.htm man/ps2epsi.1 doc/Install.htm doc/API.htm doc/Issues.htm doc/DLL.htm doc/Drivers.htm man/pfbtopfa.1 doc/Release.htm doc/Commprod.htm doc/Xfonts.htm doc/Devices.htm doc/Language.htm man/gs.1 man/pf2afm.1 doc/Fonts.htm doc/Ps2ps2.htm man/printafm.1 doc/Ps2pdf.htm doc/Develop.htm doc/Helpers.htm man/pdf2dsc.1 doc/Psfiles.htm doc/Lib.htm doc/gs-vms.hlp man/font2c.1 man/gsnd.1 base/version.mak man/pdfopt.1 doc/News.htm man/pdf2ps.1 man/ps2pdf.1 doc/Make.htm doc/Details8.htm doc/Unix-lpr.htm doc/C-style.htm doc/Ps-style.htm doc/History1.htm doc/History2.htm man/gslp.1 man/wftopfa.1 doc/History3.htm man/ps2ps.1 doc/Ps2epsi.htm doc/History4.htm man/ps2pdfwr.1 doc/History5.htm doc/History6.htm]

2009-02-02T19:13:01.319812Z Ralph Giles

Update change logs and release date for 8.64rc3.

[doc/History7.htm doc/Projects.htm doc/History8.htm man/dvipdf.1 man/ps2ascii.1 doc/Use.htm doc/Readme.htm doc/Source.htm doc/Deprecated.htm man/ps2epsi.1 doc/Install.htm doc/Changes.htm doc/API.htm doc/Issues.htm doc/DLL.htm doc/Drivers.htm man/pfbtopfa.1 doc/Release.htm doc/Commprod.htm doc/Xfonts.htm doc/Devices.htm doc/Language.htm man/gs.1 man/pf2afm.1 doc/Ps2ps2.htm doc/Fonts.htm man/printafm.1 doc/Ps2pdf.htm doc/Develop.htm doc/Helpers.htm man/pdf2dsc.1 doc/Psfiles.htm doc/Lib.htm doc/gs-vms.hlp man/font2c.1 man/gsnd.1 base/version.mak man/pdfopt.1 doc/News.htm man/pdf2ps.1 man/ps2pdf.1 doc/Make.htm doc/Details8.htm doc/Unix-lpr.htm doc/C-style.htm doc/Ps-style.htm doc/History1.htm doc/History2.htm man/gslp.1 man/wftopfa.1 doc/History3.htm man/ps2ps.1 doc/Details.htm doc/Ps2epsi.htm doc/History4.htm man/ps2pdfwr.1 doc/History5.htm doc/History6.htm]

2009-02-02T08:58:11.805173Z Ray Johnston

Fix broken bbox device caused by the 'fillpage' commit of rev 9288. This
resolves bug 690260 and other cases where the bbox was all 0's.

DETAILS:

When the 'RECT_IS_PAGE' check was removed, the BBOX_INIT_BOX function was
invoked unconditionally MUCH too often, leading to an empty bbox (0's)
which also caused the x11 device to not update many areas from the under-
lying image24 buffer to the screen. The 'BBOX_INIT_BOX' should only be
needed when the params change the geometry or when 'fillpage' is done.

[base/gdevbbox.c]


Version 8.64 (2009-02-02)

This is the fifth scheduled release in the stable Ghostscript 8.6x series.

Approximately 100 bugs have been fixed since the 8.63 release.

Of particular note in this release are improvements to overprint and spot color support in documents with transparency, improvements to PDF and PS output, proper handling of PDF-specific text rendering modes and support for reading AES-encrypted PDF documents.

Also improved is handling of CJK text, especially in vertical writing modes, memory footprint processing some files at high resolution and support for using the system's default paper size on unix.

The interpreter's handling of color spaces has been moved from PostScript code to C.

A number of the included printer drivers and cups wrappers have been updated to support a PDF-based workflow. Also fixed are several long-standing bugs in the pcl drivers with respect to duplex, resolution and paper tray selection.

The following bugs were open at the time of the last release:

226943, 430175, 465936, 493348, 535932, 578865, 614298, 626295, 686853, 686865, 687011, 687084, 687095, 687146, 687193, 687257, 687271, 687280, 687295, 687297, 687303, 687327, 687375, 687414, 687475, 687492, 687514, 687520, 687536, 687561, 687593, 687608, 687630, 687650, 687666, 687674, 687677, 687695, 687697, 687702, 687715, 687721, 687728, 687731, 687775, 687780, 687782, 687793, 687796, 687805, 687850, 687887, 687903, 687904, 687915, 687931, 687950, 687981, 687983, 688007, 688022, 688024, 688026, 688032, 688036, 688042, 688061, 688064, 688081, 688130, 688166, 688184, 688187, 688204, 688210, 688215, 688227, 688267, 688269, 688280, 688288, 688312, 688318, 688320, 688333, 688342, 688361, 688363, 688372, 688386, 688387, 688389, 688395, 688413, 688436, 688437, 688440, 688448, 688473, 688475, 688483, 688495, 688500, 688515, 688528, 688533, 688539, 688540, 688542, 688557, 688565, 688580, 688581, 688601, 688604, 688605, 688607, 688616, 688617, 688627, 688636, 688638, 688647, 688651, 688655, 688673, 688699, 688708, 688709, 688710, 688714, 688728, 688731, 688736, 688757, 688777, 688797, 688818, 688829, 688843, 688846, 688871, 688872, 688908, 688918, 688919, 688926, 688933, 688942, 688949, 688958, 688969, 688978, 688990, 688994, 688999, 689003, 689011, 689013, 689025, 689028, 689031, 689032, 689040, 689044, 689046, 689048, 689057, 689060, 689070, 689076, 689077, 689078, 689081, 689093, 689094, 689098, 689133, 689137, 689145, 689150, 689153, 689161, 689167, 689174, 689184, 689188, 689195, 689198, 689199, 689209, 689222, 689224, 689236, 689247, 689248, 689252, 689253, 689278, 689279, 689280, 689283, 689289, 689290, 689295, 689308, 689331, 689335, 689340, 689341, 689361, 689370, 689376, 689378, 689392, 689396, 689418, 689419, 689421, 689422, 689423, 689438, 689439, 689450, 689451, 689456, 689460, 689471, 689484, 689487, 689489, 689490, 689498, 689500, 689502, 689506, 689507, 689512, 689518, 689522, 689546, 689547, 689549, 689554, 689557, 689560, 689561, 689563, 689566, 689571, 689573, 689574, 689581, 689584, 689585, 689591, 689592, 689595, 689598, 689601, 689606, 689610, 689616, 689623, 689625, 689627, 689632, 689636, 689641, 689653, 689657, 689658, 689663, 689670, 689674, 689681, 689682, 689684, 689689, 689690, 689691, 689697, 689698, 689704, 689705, 689709, 689710, 689711, 689715, 689721, 689725, 689726, 689727, 689734, 689737, 689741, 689747, 689752, 689756, 689759, 689760, 689761, 689767, 689769, 689772, 689775, 689778, 689781, 689786, 689792, 689793, 689794, 689799, 689801, 689805, 689808, 689817, 689822, 689823, 689826, 689835, 689836, 689840, 689853, 689856, 689858, 689859, 689860, 689861, 689862, 689868, 689869, 689870, 689871, 689878, 689883, 689885, 689910, 689915, 689916, 689917, 689928, 689929, 689930, 689931, 689933, 689937, 689938, 689939, 689940, 689941, 689942, 689943, 689947, 689950, 689951, 689952, 689957, 689968, 689969, 689972, 689974, 689980, 689986, 689991, 689996, 689997, 690003, 690005, 690006, 690007, 690009, 690020, 690022, 690024, 690025, 690026, 690029, 690033, 690036, 690043, 690047, 690051, 690053, 690054, 690056, 690057, 690058, 690061, 690066, 690068, 690069, 690073, 690083, 690084, 690085, 690093, 690094, 690098, 690100, 690102, 690110, 690115, 690119, 690123, 690125, 690126, 690131, 690132, 690137, 690143, 690146, 690157, 690160, 690162, 690170, 690171, 690174, 690176, 690180, 690182, 690183, 690184, 690185, 690189, 690191, 690192, 690199, 690200, 690203, 690207, 690208, 690209, 690212, 690213, 690214, 690216, 690218, 690224, 690225, 690226, 690229, 690230, 690232, 690233, 690234, 690235, 690237, 690238, 690239, 690241, 690246, 690247, 690248, 690249, 690250, 690251, 690253, 690256, 690259, 690261, 690262, 690263, 690264.

Incompatible changes

In this release the C source files have been split into two new directories. Interpreter source files are now in psi and the graphics library and output devices are now in base. Previously everything was in src. This may cause problems with existing references in external build files or when applying patches generated against an older version.

The compiled in font set in Resource/Fonts has been updated to the version from the 8.11 release. This is the same set which was recommended prior to the 8.63.

Changelog

2009-02-02T08:58:11.805173Z Ray Johnston

Fix broken bbox device caused by the 'fillpage' commit of rev 9288. This
resolves bug 690260 and other cases where the bbox was all 0's.

DETAILS:

When the 'RECT_IS_PAGE' check was removed, the BBOX_INIT_BOX function was
invoked unconditionally MUCH too often, leading to an empty bbox (0's)
which also caused the x11 device to not update many areas from the under-
lying image24 buffer to the screen. The 'BBOX_INIT_BOX' should only be
needed when the params change the geometry or when 'fillpage' is done.

[base/gdevbbox.c]

2009-02-02T08:52:01.582216Z Ray Johnston

Revert the patch of 9314 that caused a problem with the Ubuntu bug 160203
(https://bugs.launchpad.net/ubuntu/+source/ghostscript/+bug/160203). This
patch appears to be a fix for a much older (~2004) version of gs and should
not be needed as of rev 8161 that resolved segfaults when there is a NULL
get_color_mapping_procs pointer. The mapping of 'black' and 'white' is
needed to properly allow for non-white painting in the bbox device to
avoid 0 0 0 0 BoundingBox.

[base/gdevbbox.c]

2009-01-30T21:10:55.690493Z Russell Lang

Add the default papersize module to the OS/2 build.

[psi/os2.mak]

2009-01-27T23:04:37.869301Z Ralph Giles

Update the directory listing the license for the source code
reorganization.

[LICENSE]

2009-01-27T22:40:23.384111Z Ralph Giles

Update internal copyright string.

[base/gscdef.c]

2009-01-27T21:00:23.120021Z Ralph Giles

Update changelogs and release dates for 8.64rc2.

[doc/History7.htm doc/Projects.htm doc/History8.htm man/dvipdf.1 man/ps2ascii.1 doc/Use.htm doc/Readme.htm doc/Source.htm doc/Deprecated.htm man/ps2epsi.1 doc/Install.htm doc/Changes.htm doc/API.htm doc/Issues.htm doc/DLL.htm doc/Drivers.htm man/pfbtopfa.1 doc/Release.htm doc/Commprod.htm doc/Xfonts.htm doc/Devices.htm doc/Language.htm man/gs.1 man/pf2afm.1 doc/Ps2ps2.htm doc/Fonts.htm man/printafm.1 doc/Ps2pdf.htm doc/Develop.htm doc/Helpers.htm man/pdf2dsc.1 doc/Psfiles.htm doc/Lib.htm doc/gs-vms.hlp man/font2c.1 man/gsnd.1 base/version.mak man/pdfopt.1 doc/News.htm man/pdf2ps.1 man/ps2pdf.1 doc/Make.htm doc/Details8.htm doc/Unix-lpr.htm doc/C-style.htm doc/Ps-style.htm doc/History1.htm doc/History2.htm man/gslp.1 man/wftopfa.1 doc/History3.htm man/ps2ps.1 doc/Details.htm doc/Ps2epsi.htm doc/History4.htm man/ps2pdfwr.1 doc/History5.htm doc/History6.htm]

2009-01-27T20:50:54.789641Z Ralph Giles

Update the release notes for 8.64rc2.

The x11alpha issue has been worked around.

Add some comments from Till Kamppeter.

[doc/News.htm]

2009-01-27T20:43:39.460217Z Ralph Giles

Fix fillpage in the x11alpha device.

This reverts an incorrect code change which prevented the fillpage
method of the x11alpha device from clearing the buffer. Bug 690255.

Details:

In r9288, a new fillpage method was added. This is a stub in printer
devices, but is overridden to detect page flushes in some high
level devices. That commit included incomplete changes to gdevxini.c
which didn't compile. Alex suggested a fix in 690202, which was
committed as r9294 after approval from the author of 9288. This was
what broke page clearing in the x11alpha device.

This commit removes the changes both commits made to the x11 devices and
restores gdevxini.c to its state prior as of r9287.

[base/gdevxini.c]

2009-01-27T20:43:37.567128Z Ralph Giles

Update documentation on the COMPILE_INITS makefile variable.
In particular, it's normally no longer 0.

Thanks to Ken Sharp for pointing this out.

[base/gs.mak]

2009-01-27T20:43:33.967975Z Ralph Giles

Escape significant characters when generating html changelog entries.

[toolbin/split_changelog.py]

2009-01-27T00:18:29.136711Z Ralph Giles

Remove $(GS_LIB)\Resource directory from the search path in the msvc 
build to shadowing the compiled in version.

GS_LIB is set in the Windows registery by the installer, but it does not 
currently install a duplicate copy of the Resource tree in the 
filesystem. Having this directory in the search path caused Ghostscript 
to use it for Resource lookup to the exclusion of the %rom% version, and 
since the files weren't installed there, Ghostscript would error out in 
the initialization phase.

Files like cidfmap and available fonts can still be overridden by 
putting them in $(GS_LIB)\lib and $(GS_LIB)\fonts.

Patch from Russell Lang.

[psi/dwsetup.cpp]

2009-01-26T19:25:28.295228Z Ralph Giles

Update changelogs for 8.64rc1.

[doc/Changes.htm doc/History8.htm doc/News.htm doc/Details8.htm doc/Details.htm]

2009-01-26T18:59:39.072673Z Ralph Giles

Release notes for 8.64rc1.

[doc/News.htm]

2009-01-26T18:05:53.102397Z Ralph Giles

Propagate release number and date to the documentation.

[doc/History7.htm doc/Projects.htm doc/History8.htm man/dvipdf.1 man/ps2ascii.1 doc/Use.htm doc/Readme.htm doc/Source.htm doc/Deprecated.htm man/ps2epsi.1 doc/Install.htm doc/API.htm doc/Issues.htm doc/DLL.htm doc/Drivers.htm man/pfbtopfa.1 doc/Release.htm doc/Commprod.htm doc/Xfonts.htm doc/Devices.htm doc/Language.htm man/gs.1 man/pf2afm.1 doc/Fonts.htm doc/Ps2ps2.htm man/printafm.1 doc/Ps2pdf.htm doc/Develop.htm doc/Helpers.htm man/pdf2dsc.1 doc/Psfiles.htm doc/Lib.htm doc/gs-vms.hlp man/font2c.1 man/gsnd.1 man/pdfopt.1 doc/News.htm man/pdf2ps.1 man/ps2pdf.1 doc/Make.htm doc/Details8.htm doc/Unix-lpr.htm doc/C-style.htm doc/Ps-style.htm doc/History1.htm doc/History2.htm man/gslp.1 man/wftopfa.1 doc/History3.htm man/ps2ps.1 doc/Ps2epsi.htm doc/History4.htm man/ps2pdfwr.1 doc/History5.htm doc/History6.htm]

2009-01-26T18:04:16.208144Z Ralph Giles

Bump release numbers and copyright dates for 8.64rc1.

[base/gscdef.c base/version.mak doc/News.htm psi/dwsetup.rc psi/winint.mak doc/Release.htm]

2009-01-26T18:02:43.525231Z Ralph Giles

Work around an issue with comment parsing in the pre.tcl release script.

My tclsh seems to be broken.

[toolbin/pre.tcl]

2009-01-26T18:02:41.107170Z Ralph Giles

Update the pre.tcl release script for the new source locations.

[toolbin/pre.tcl]

2009-01-26T18:02:37.633990Z Ralph Giles

Update the pre.tcl release script for the new gs_init.ps location.

The essential ps library files were moved from lib to Resource/Init for
clarity and simpler behavior with compile-inits.

[toolbin/pre.tcl]

2009-01-26T17:33:36.155851Z Ken Sharp

Fix (pswrite): Incorrect PageBoundingBox comment location

Details:
The new %%PageBoundingBox comment was being emitted between a %%BeginPageSetup and %%EndPageSetup comment pair, which was causing it to be ignored by CUPS.

Moved the bounding box in front of the page setup comment

[base/gdevpsu.c]

2009-01-26T17:16:47.546837Z Ken Sharp

Yet more tidying up in the batch file. Adds release builds to the solution, better directory handling, a usage comment in the batch file and, if invoked without parameters, a usage printout for the user.

[toolbin/msvcxml.bat]

2009-01-25T06:59:45.428302Z Ralph Giles

Make the GS_SPLIT_LIBS configure function only recognize -l at the start 
of an argument, to avoid false positives from hyphens inside linker 
arguments. Bug 690254.

[base/configure.ac]

2009-01-24T09:31:46.808669Z Ken Sharp

This batch file, to generate a MSVC solution for building GS, was invalidated by the source re-organisation, and the inclusion of the resources in a ROM file system.

Fixed various aspects so that it now works again, basically.

[toolbin/msvcxml.bat]

2009-01-24T09:05:50.373013Z Ken Sharp

Add a check when comparing clip paths to see if both are NULL. Silences a Coverity warning and one day might conceivably prevent a crash.

[base/gdevpdfd.c]

2009-01-23T22:53:02.093705Z Ralph Giles

Convert 24 bit RGB data to grayscale when printing in monochrome with
eplaser device. Previously the RGB data was sent as is, resulting in
a stretched and truncated page image.

Patch from Olaf Meeuwissen. Bug 690252.

[contrib/eplaser/gdevescv.c]

2009-01-23T19:04:40.484432Z Alex Cherepanov

Continue the the fix from rev. 9384, plug 2 more ways that caused multiple
inclusion of page objects into the linearized file. Bug 690140, customer 932.

[lib/pdfopt.ps]

2009-01-23T03:10:05.467096Z Ralph Giles

Use the page parameters set on the X11 device when called by Ghostview.

This patch allows gv to control the output page parameters, overriding
document and gs default settings. Since it has been tested in the
Debian distribution and is contingent on being wrapped by the viewer,
I consider it low risk.

Original patch by William Bader. Bug 688943.

[base/gdevxini.c]

2009-01-22T13:53:18.843673Z Ken Sharp

Initialise two uninitialised variables. Not thought to be a real problem, but worth making certain. Flagged by Coverity.

[base/gdevpsf1.c base/gdevpsfx.c]

2009-01-22T13:15:07.920292Z Ken Sharp

Check the return value of gdev_prepare_stroke. Another warning from Coverity.

[base/gdevps.c]

2009-01-22T02:53:01.653019Z Alex Cherepanov

Fix multiple inclusion of page objects referenced from beads array.
Bug 690140, customer 932.

[lib/pdfopt.ps]

2009-01-22T01:48:31.483983Z Ray Johnston

Fix for Segfault with tiffsep devics when a file has more than 64 spot colors
and uses transparency. Clean up indentations to C-style. Problem seen with
Bug 690157.

DETAILS:

The number of channels needed in the pdf14 device is one greater than the
number of separations, to allow for the alpha channel (gxblend.h) and the
'comps' variable needs to be at a gx_color_index size to avoid truncation.

Note that the output from tiffsep and psdcmyk is still incorrect -- there
is a gray background in the black channel that is not expected. Also, the
color swatches defined as Alternate colors do not appear in the output,
only the Separations and the device (process) colors.

Also note that this does not address comment #5 from bug 690157 since the
default behavior when the maximum number of separations is reached is to
silently use the Alternate color.

This patch is primarily designed to cure the segfault (buffer OOB) issue.

[base/gdevp14.c base/gxblend.h]

2009-01-22T01:17:35.554315Z Alex Cherepanov

Check for and skip null objects (and other junk) in the /Anots array.
Bug 690244.

[Resource/Init/pdf_main.ps]

2009-01-21T15:34:55.892148Z Ken Sharp

Add a couple of error return checks which were missing. Picked up by Coverity.

[psi/zcolor.c psi/zicc.c]

2009-01-19T11:13:05.930829Z Ken Sharp

Revision 8951 missed an important part of the fix for pswrite, emitting a %%PageBoundingBox for each
page of the output.

[base/gdevpsu.c]

2009-01-19T09:47:56.340575Z Ken Sharp

Fix (pswrite): %%BoundingBox comment geenration
   (ps2write): media selection and %%BoundingBox generation

Details:
bug #690236 "Ghostscript is not able to convert PDF to PostScript 
maintaining the input document's page sizes"

The pswrite bug is actually in the consuming applications, which are unable to 
process the media selection requests in the pswrite output and instead use DSC
comments to select the media. pswrite attempts to use the bbox deice to generate a
%%BoundingBox comment, but because this is a high-level device, no marks are made, so 
the BoundingBox is 0 0 0 0. 

Fixed by using the media size instead if this case is detected.


ps2write did not generate a %%BoundingBox, or any other DSC comment at all, because it
does not produce DSC PostScript (there is a request to address this already #690064).
Also the media selection in the ps2write output is disabled by default, forcing users
to find some means to set particular keys in userdict on the target device.

Fixed by emitting a %%BoundingBox equal to the media size of the first page (NB as
this is not DSC, other pages will be selected incorrectly if this is all the
application uses). Also allow the use of the /SetPageSize, /RotatePages and /FitPages
keys during ps2write processing to emit a PostScript file with these keys already
set, thus allowing media selection to take place without further user intervention.

[doc/Ps2ps2.htm base/gdevpdfx.h base/gdevpsu.c base/gdevpdfp.c base/gdevpdfu.c base/gdevpdfb.h]

2009-01-18T19:57:58.223740Z Alex Cherepanov

Fix SEGV in 'inferno' device caused by insufficient memory allocation. Pass
correct device type to prn_device_body() macro. thanks to Wendy for the patch.

[base/gdevifno.c]

2009-01-16T18:38:48.474888Z Ken Sharp

Fix (pdfwrite): Invalid metadata for PDF/A output

Details:
bug #690046 "Ghostscript doesn't produce valid PDF/A-1B files"

Now that we have an example file, the remaining issues are resolved:

1) The recommended tags for font metadata in the ISO spec are not present in the XMP schema, resulting in Acrobat preflight complaining. Distiller does not (and never has, apparently) write font metadata for PDF/A files, and the spec says only that files 'should' contain metadata. For now we disable writing font metadata to match Distiller.

2) When converting TrueType fonts into CIDFonts, for PDF/A compatability, we must also write a CIDSet resource. The code was creating and initialising a table containing an explicit 256 entries, but the CIDSet resource was writing as many entries as there are glyphs in the base font. If this was larger we wrote uninitialised data to the CIDSet. Altererd to create and initialise a table the size of the number of glyphs in the base font.

[base/gdevpdtd.c base/gdevpdfe.c]

2009-01-16T05:03:44.102465Z Ralph Giles

Move the font api bridge implementations to the psi directory.

Bug 690231, fixes the language switch build with ufst.

These are referenced from int.mak and depend on interpreter-level 
headers. So while the font api should be part of the graphics library, 
these files actually belong in the interpreter.

[psi/fapi_ft.c base/fapiufst.c psi/fapiufst.c base/fapi_ft.c]

2009-01-15T15:22:39.193218Z Ken Sharp

Update a comment to say why the minimum file size is 4KB

[lib/pdfopt.ps]

2009-01-15T15:20:15.993430Z Ken Sharp

Fix (pdfopt): Minimum optimised file size changed in Acrobat 9

Details:
bug #690210 "Inconsistent "fast web view' results"

It seems Acrobat 9 will decide that any file less than 4Kb in size is not optimised for fast web view, regardless of content. Previous versions of Acrobat insisted on a minimum of 1Kb.

[lib/pdfopt.ps]

2009-01-15T09:16:00.166572Z Ken Sharp

Fix (pdfwrite)

Details:
revision 9346 sets the about member of the XMP metadata to empty ("") unconditionally, this should only be done when writing PDF/A files.

[base/gdevpdfe.c]

2009-01-15T07:52:13.786371Z Alex Cherepanov

Fix compilation on Windows NT, which doesn't define LOCALE_IPAPERSIZE.

[base/gp_wpapr.c]

2009-01-14T22:58:56.327548Z Ralph Giles

Check for a null target_info in bbox_image_end_image before
trying to free it. Fixes bug 680019.

[base/gdevbbox.c]

2009-01-14T11:15:24.692365Z Igor Melichev

Fix (graphics) : Redundant patterns in clist (continued 7).

DETAILS :

Bug 690228 "pcl6 regression".

Don't write a pattern in the short form (just tile id)
to the "all bands" list if some bands don't store same tile id.
Otherwise those bands would be confused and try to call pattern_load,
which is not supported while a clist playback. 

[base/gxclpath.c]

2009-01-13T22:17:21.104569Z Alex Cherepanov

Return 0 when accessing Type1C font table out of range or the table is too
short and display a warning if possible. Bug 690050, customer 353.

DETAILS:
Old code smashed the stack when operator read was unsuccessful and failed
shortly afterwards. New code tolerates PDF files produced by 'Exstream
Dialogue', which have Type1C fonts with overlapping tables, which Ghostscript
shortens to non-overlapping length. Thanks to Ray for the origimal patch.

[Resource/Init/gs_cff.ps]

2009-01-13T18:38:37.869412Z Ray Johnston

Revert .outputattrkeys to the list prior to rev 8026 to fix problems with
Duplex introduced with that change. Bug 690041.

[Resource/Init/gs_setpd.ps]

2009-01-12T19:33:58.722824Z Ralph Giles

Fix a gcc warning in gxshade6.c.

When VD_TRACE is not defined, vdtrace.h defines most of its operations
as DO_NOTHING, but with was not done for vd_restore and vd_disable,
causing compiler warnings in gxshade6.c, where vd_disable is called
as the sole body of an if() statement.

Bug 690204.

[base/vdtrace.h]

2009-01-12T16:51:59.689070Z Ken Sharp

Fix (pdfwrite): Invalid metadata for PDF/A output

Details:
bug #690046 "Ghostscript doesn't produce valid PDF/A-1B files"

This does not, unfortunately, address some of the issues raised in the bug report,
without a sample PostScript file to work from these cannot currently be addressed.

However, there were significant problems with the XMP metadata being written:
1) The rdf attribute 'about' has changed, it is no longer recommended to use a UUID,
it should be left empty or formatted as a URI. Altered to empty.
2) The Adobe parser does not like mix and match of attributes and properties, if we
are setting properties, we can't use (at least some) attributes.
3) The preferred schema namespace prefix for the XMP basic schema is now 'xmp' not
'xap'.
4) Date syntax was incorrect for GMT. XMP specifies *either* 'Z' *or* +/-hh:mm. We
were writing 'Z00:00' (that is, both alternatives).

Also added support for the /Subject and /Keywords elements of the Document Info
dictionary, if these are present, as per the patch from Florian Haenel.

[base/gdevpdfe.c]

2009-01-10T22:11:18.954264Z Till Kamppeter

Add "-sstdout=%stderr" to scripts that call gs so that they don't corrupt their own output when outputing to stdout (Thanks to Dan Sheridan (djs at adelard dot com), Ubuntu bug #314439).

[lib/eps2eps lib/ps2pdfwr lib/ps2ps lib/ps2ps2 lib/dvipdf]

2009-01-09T08:53:40.554994Z Till Kamppeter

Added support for GNU Hurd (patch from Debian package).

[base/configure.ac]

2009-01-09T00:28:18.396434Z Ray Johnston

Correct very minor typo.

[Resource/Init/pdf_base.ps]

2009-01-08T21:28:55.852108Z Till Kamppeter

Small correction on ./configure magic for libpaper.

[base/configure.ac]

2009-01-08T12:51:35.348058Z Till Kamppeter

Added auto-detection for libpaper to the configure script

[base/configure.ac]

2009-01-08T12:43:28.851914Z Igor Melichev

Fix (TT font handler) : Wrong glyph posiitions with vertical writing mode (continued).

DETAILS :

Bug 689304 "improper handling of vertical japanese text".

This is fourth partial patch for the bug 689304.
It adds a code for processing CoverageFormat2,
which is used by IPAfont00203.

Besides that, in the old CoverageFormat1 code
subst.GlyphCount was used instead cov.GlyphCount . 
It didn't cause a problem because (we guess)
normally they are equal.

The field CoverageFormat2::RangeRecord is renamed into 
RangeArray to avoid possible conflict with same name for
a structure type. Rather it is a correct C,
we're not sure that all compilers accept it with no warning.

[base/gstype42.c]

2009-01-08T09:17:18.162362Z Russell Lang

Automatically select the default paper size from the locale
on the Windows platform, and make provision for doing this
on Linux.

DETAILS:
This adds a new platform function gp_defaultpapersize and a new 
operator .defaultpapersize.
In order of priority, the paper size is set from PAPERSIZE,
DEFAULTPAPERSIZE, .defaultpapersize, or the compiled in
device paper size.

It has been tested on Windows 98, XP and Vista.

[base/openvms.mmk base/lib.mak base/gp_paper.c doc/Use.htm doc/Develop.htm base/unix-aux.mak base/macos-mcp.mak psi/zmisc.c psi/os2.mak base/winlib.mak base/watclib.mak base/gp.h Resource/Init/gs_init.ps base/openvms.mak base/gp_upapr.c base/gp_wpapr.c doc/Language.htm]

2009-01-08T08:04:41.159684Z Russell Lang

Fix stackunderflow when specified PAPERSIZE is unknown.
Ghostscript will now use the device default page size when
PAPERSIZE is unknown.

[Resource/Init/gs_init.ps]

2009-01-07T17:36:55.528046Z Michael Vrhel

Fix for overprinting with transparency.  This fixes bugs related to the lack of overprint support when there is transparency present in the file. 

DETAILS: Previously if a sep device is used when processing a file that contains both transparency and overprinting, the overprinted colors would blow away the other sep colors.  In this commit, there was one fix to improper geometry in pfd14_cmykspot_put_image.  The remaining changes involved 1) passing overprint compositor actions to the pdf14 device, which occurs during the clist reading phase (in pdf14_create_compositor)  2) adding over_print and overprint mode to the pdf14 clist parameters (this follows the same process that is currently done for text knockout, blend mode etc) and 3) adding the actual fill support in pdf14_mark_fill_rectangle. 

EXPECTED DIFFERENCES:  In the regression tests Bug688631.pdf and Bug690206.pdf will have slight differences due to the blending of spot colors when the color space is subtractive. This matches what is seen in AR.

[base/gdevp14.c base/gdevp14.h base/gstrans.h]

2009-01-07T08:33:14.825057Z Ken Sharp

Fix (PDF Interpreter): Default Unicode decoding clashing with ToUnicode CMap

Details:
bug #690190 "Problem with -dProvideUnicode"

The ProvideUnicode switch creates a (read only) default Unicode decoding resource, presumably to use as a default ToUnicode Cmap when creating PDF files.

This interferes with PDF files which contain a real ToUnicode CMap, as the resource is read only and so cannot be updated with the content of the ToUnicode CMap.

Fixed by checking to see if the GlyphNamesToUnicode dictionary is writeable, and if it is not, creating a new one, when processing a ToUnicode CMap.

[Resource/Init/pdf_font.ps]

2009-01-06T14:38:01.194845Z Ken Sharp

Fix (pdfwrite): Missing glyphs in CIDFont causing errors.

Details:
Bug #690139: "Regression: Error writing PDF file: Missing glyph CID=0 in Bug689614.pdf".

When we find that a string in a PDF file uses a glyph which is not present in the current CIDFont we substitute the .notdef glyph (CID=0). However, if we do not have a width for the .notdef (this is the first missing glyph) we proceed to get one, and then attempt to run the CDevProc for the font.

This, unfortunately, attempts to use the original (missing) glyph, and so fails with a rangecheck error. Added a check to catch this condition and skip the CDevProc and caching.

Also improved the error message slightly.

[base/gdevpdtc.c]

2009-01-06T14:11:30.802229Z Igor Melichev

Fix (PDF interpreter) : A more explanatory message when a CID font is missing.

DETAILS :

Bug 688770 "/undefinedresource in --findresource--".

The patch prints which CID font is missing,
and a better explanation about CID font substitution and
about the related exit with error.  

[Resource/Init/pdf_font.ps]

2009-01-05T17:17:01.015629Z Marcos H. Woehrmann

Removed old code that failed in 2009.

[toolbin/bugsByEngineer.pl]

2009-01-05T14:02:04.227069Z Till Kamppeter

Added examples of PostScript files with CJK text

[examples/cjk examples/cjk/all_ag1.ps examples/cjk/iso2022.ps examples/cjk/all_aj1.ps examples/cjk/all_aj2.ps examples/cjk/all_ak1.ps examples/cjk/gscjk_ac.ps examples/cjk/iso2022v.ps examples/cjk/gscjk_ag.ps examples/cjk/gscjk_aj.ps examples/cjk/all_ac1.ps examples/cjk/article9.ps examples/cjk/gscjk_ak.ps]

2009-01-05T10:34:13.766328Z Till Kamppeter

Accidentally committed an obsolete patch. Reverted.

[base/gdevxini.c]

2009-01-04T20:20:47.824575Z Till Kamppeter

Fix sigbus/segfaults on sparc, hppa, etc. Debian bug 453903.

See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=453903 for details.

[psi/store.h]

2009-01-04T20:15:19.267170Z Till Kamppeter

Improved man pages of ps2pdf.

[man/ps2pdf.1 man/de/ps2pdf.1]

2009-01-04T20:13:28.072664Z Till Kamppeter

Fixed syntax error in gs.css.

[doc/gs.css]

2009-01-04T20:11:57.725211Z Till Kamppeter

Assorted script fixes.

[lib/ps2epsi lib/dumphint lib/dvipdf]

2009-01-04T20:07:04.350954Z Till Kamppeter

Fix insecure script in toolbin.

[toolbin/pre.tcl]

2009-01-04T20:05:41.434499Z Till Kamppeter

Typo fixes in "gs" man page.

[man/gs.1]

2009-01-04T20:03:38.607601Z Till Kamppeter

Fix segfault in X device when page size changes.

[base/gdevxini.c]

2009-01-04T20:01:10.696570Z Till Kamppeter

Adjust the margins for Epson dot matrix printer drivers

[base/gdevepsn.c]

2009-01-04T19:58:54.777417Z Till Kamppeter

Fix a problem with Brother 7x0 GDI, contributed to Debian by B. Janssen.

[base/gdevhl7x.c]

2009-01-04T19:57:07.064594Z Till Kamppeter

Fix segmentation fault on -sDEVICE=bbox, contributed to Debian by Yaroslav Halchenko.

Original issue reported in
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=250290 and
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=254877

[base/gdevbbox.c]

2009-01-03T22:45:50.335886Z Michael Vrhel

Debug raw dumping code that I have found useful in my debug of transparency and overprint issues.  

DETAILS : Open images with Photoshop in the raw format with the dimensions given in the file name.

EXPECTED DIFFERENCES :  None



[base/gxblend.c base/gxblend.h]

2009-01-03T19:51:08.451624Z Igor Melichev

Fix (graphics) : Incorrect bounds for clipping list.

DETAILS :

Bug 690060 "Regression: ball not round in Altona_Visual_1v2a_x3.pdf"

The bug persists since the repository was created. 
The revision 8020 brought an attempt to fix it,
but really it just replaced one wrong code with another wrong one.
Coding the right formula now.

[base/gxcpath.c]

2009-01-01T05:34:09.090806Z Alex Cherepanov

Continue to access the stream while reading a string (sgets()) until the
string is filled, EOF is reached, or an error occurs. Don't return after
first partial read. Bug 690152.

DETAILS:
Old code did this only for 1-byte reads, which commonly occur during
reading stdin one byte at a time. Repeated reading is now extended to
reads of any size.

[base/stream.c]

2008-12-30T18:58:17.371540Z Igor Melichev

Fix (garbager) : Wrong object marks when the object is freed by a garbager callback.

DETAILS :

Debugged on Vista x64 with running a 32 bits debug build of revision 9299 
with this command line :

..\..\gs-hd\bin\gswin32c.exe -IF:\AFPL\gs-hd\Resource\Init;f:\afpl\fonts -Z$?@ -r300 
       -dMaxBitmap=1000000  -dNOOUTERSAVE -sDEVICE=ppmraw -sOutputFile=out.ppm -dBATCH 
       -dNOPAUSE "H:\AuxFiles\CompareFiles\084-01.ps"  

1. The main change (gsalloc.c) :

The bug persists since the repository was created. 
When an object is freed after the garbager marking phase and before the
relocation phase, the heap consistency check misrecognizes it
as a free object pointed from an useful object. It happens because
the smark field was left unchanged ("marked") but the object status 
changed to 'freed', which must be unmarked.

In the test case such thing happens when a names subtable is freed
with this stack :
    i_free_object()  Line 721
    name_free_sub()  Line 541
    name_scan_sub()  Line 582
    names_trace_finish()  Line 416
    gs_gc_reclaim()  Line 371 

The patch resets the mark whenever i_free_object is called,
so that any freed object automatically becomes unmarked.
We could do it more delicate with checking whether a garbager
is on stack with a new special flag in gs_ref_memory_t,
but we don't see enough reasons for such complex check.

2. Minor change (igc.c) : 

Provide a right operand when gs_abort is called from  
gc_objects_set_reloc. The old code crashed due to dereferencing NULL.

[psi/igc.c base/gsalloc.c]

2008-12-29T18:25:08.338456Z Marcos H. Woehrmann

Script to print out open customer/P1/regression bugs by engineer.

Usage:  bugsByEngineer.pl >report.txt

[toolbin/bugsByEngineer.pl]

2008-12-29T06:43:42.727931Z Michael Vrhel

Fix for Bug 689895.  gx_put_blended_image_cmykspot was improperly inverting the alpha channel.   

[base/gxblend1.c]

2008-12-28T16:03:29.366807Z Alex Cherepanov

Use a proper destructor to free a file stream when access to the file is not
permitted in the safe mode, not just close the file and drop the rest of the
file structure. Bug 689975.

[psi/zfile.c]

2008-12-26T07:25:31.122671Z Alex Cherepanov

Fix 3 last cases of missing prototypes in MS Windows build.

[base/lib.mak psi/int.mak psi/zfcid1.c base/gxblend1.c base/gdevddrw.c]

2008-12-26T04:48:20.570500Z Alex Cherepanov

Remove the last 2 unused variables from Ghostscript code base.

[psi/dwtrace.c base/gdevdjet.c]

2008-12-24T20:33:22.470682Z Alex Cherepanov

Fix a buffer overflow in base font writer module of pdfwrite defice.
Allocate sufficient buffer for the worst case. Bug 690211.

[base/gdevpdtb.c]

2008-12-24T15:36:40.083208Z Ken Sharp

Fix (pdfwrite): Image with SMask fails when inside transparency group.

Details:
Bug #690139: "Regression: pdfwrite creates empty file".

The PDF Interpreter internally surrounds SMask images with an extra transparency group definition. If emitted to PDF this is invalid and causes Acrobat to complain. This was fixed in revision 6878 (bug 688767) by adding an extra parameter  'Image_with_SMask' to the dictionary.

The pdfwrite code checks for the existence of this in the group, and if present (and true) skips the transparency group begin. It also sets a flag in the device, to skip the end of the group as well.

However, the flag is only reset when a new transparency group is begun. If the SMask was nested inside a group then the flag remained set, causing the 'end' for all enclosing groups to be skipped as well. This caused empty output or, in extreme cases, a 'rangecheck' error in discardtransparencygroup, because we overflowed an internal stack.

We now set the device flag to false after we have skipped an end group.

[base/gdevpdft.c]

2008-12-23T09:05:30.676239Z Ken Sharp

Fix (pdfwrite): DSC comments interfering with Page Tree Orientation.

Details:
Bug #689922 "Rotation issues with pdfwrite and multiple operations".

When writing out a PDF file, pdfwrite adds /Rotate keys to individual pages, and if the document is gnerally rotated (eg landscape) will set a /Rotate key in the pages treee. This causes all pages which do not have their own value to inherit this as a default.

Unfortunately, the page tree code uses the same logic as the individual page, whch honours DSC '%%Orientation' and '%%ViewingOrientation' comments. If the last file processed contained one of these, this would become the default for all pages, regardless of their actual orientation. This would cause pages to be inappropriately rotated.

Fixed by clearing the DSC information before writing the orientation for the page tree, by this time all the pages that require it have already been written with their own value.

[base/gdevpdf.c]

2008-12-21T14:34:29.309508Z Igor Melichev

Fix (PS interpreter) : The operator 'gstate' leaked memory.

DETAILS :

Bug 689849 "gstate leaks memory"

The old code of gsave executes 'ref_save' without a clear reason. 
The patch disables it with #if 0.
For a while we keep the old code for an easier
understanding of an unexpected behavior difference, if any.
 

[psi/zdps1.c]

2008-12-21T07:46:52.896538Z Alex Cherepanov

Implement Algorithm 8.1 from PDF 1.6 Reference. Map /BBox of the appearance
stream transformed by /Matrix onto the annotation rectangle.
Bug 690195, customer 770.

[psi/zmatrix.c psi/int.mak Resource/Init/pdf_draw.ps]

2008-12-19T16:50:41.185072Z Ken Sharp

Fix: Problem with /DeviceN [/All].

Details:
Bug #690177 "Separation names become operator names.".

/DeviceN [/All] is technically illegal, but is allowed by Acrobat. We convert this to a /Separation /All colour space for compatibility. An error in the processing of this kind of space led to a string object being used in place of a name object to create the named space.

This led to 'peculiar' plate names instead of 'All', which caused no problems when rendering to CMYK (the alternate is used and sets all inks). However if rendering to a device with additional spot plates not alll plates would be marked as they should be for a /All space. Also pdfwrite produced incorrectly named plates in the output PDF file.

[psi/zcolor.c]

2008-12-19T01:53:18.887063Z Ralph Giles

Warn when the JPX ColorSpace key workaround is activated.

Details:

We don't use pdfformaterror because this is our failing, not the files.
But we call stderrprint to generate the output so it doesn't mangle
device output on stdout.

Suggested by Ray Johnston.

[Resource/Init/pdf_draw.ps]

2008-12-19T01:53:17.038875Z Ralph Giles

Assume unlabled JPXDecode streams are 8 bit DeviceRGB.

This is a work-around for bugs 688159, 689058 and 689509.

Details:

The PDF spec allows the ColorSpace and BitsPerComponent keys of a
JPXDecode filtered image dictionary to be left out, in which case
the interpreter is expected to obtain this information by examining
the stream.

This change does not implement that, but in most cases the image
is RGB, and 8 bits per component; assuming this format allows
correct rendering of all wild files we've seen of this type.

[Resource/Init/pdf_draw.ps]

2008-12-18T23:37:32.655756Z Alex Cherepanov

Change accessors to cmap data to support cmap subtables exceeding 64K-1 bytes.
Bug 690206, customer 870.

[Resource/Init/gs_ttf.ps]

2008-12-16T18:35:55.343539Z Ralph Giles

Fix a typo in commit r9288 which broke the X11 device build. Bug 690202.

Patch by Alex Cherepanov.

[base/gdevxini.c]

2008-12-16T17:52:13.417519Z Ralph Giles

Add the CVS directory to the romfs exclusion list. Bug 690205.

Details:

Currently the mkromfs script just includes the entire file tree under
Resource/ but the presence of any extraneous directories there confuses
the enumeration machinery. We have a exclusion for the .svn directory
so builds out of svn work, but apparently some people have a CVS mirror?

Anyway, it isn't difficult to add an additional exclusion for CVS
metadata. This isn't an issue for git, darcs or mercurial because they
keep all their repository data in the top-level directory.

[base/lib.mak]

2008-12-15T17:15:06.646171Z Ken Sharp

Enhancement (pdfwrite): Add support for the fillpage method.

Details:
The new fillpage device method can be used to detect occurences of erasepage more reliably (and probably more cheaply in performance terms) than the previous checks in the fill_rectangle methods. 

Removed the old code which checked the rectangle size against the page size, the colour against white, and the transparency stack depth, from the fill_rectangle methods. Added a new routine gdev_pdf_fillpage to implement the new fillpage device method.

[base/gdevpdfx.h base/gdevpdfd.c base/gdevpdfb.h]

2008-12-13T20:05:37.951803Z Igor Melichev

Enhancement (graphics) : Implement new device virtual method 'fillpage'.

DETAILS :

The new method improves the handling of 'erasepage' and 'fillpage'
for high level devices, bbox device. Also it is a preparation for
optimizing 'erasepage' for printer devices as for bug 690131.

When erasing a page, the old code passes fill_rectangle through
the device interface. However some devises need to recognize it
as a special high level operation and distinguish from an usual
rectangle filling. The old code implemented some trics for that.
This patch replaces the tricks with a strong logic for bbox device.
The pdfwrite device to be improved separately.

The old function gx_fillpage is now splitted into two parts,
one of which works before the device interface, and another one
after it. The second one looks as a default implementation
for the 'fillpage' device virtual method. Forwarding devices
implement new function gx_forward_fillpage.


[base/gdevrops.c base/gdevdflt.c base/gdevbbox.c base/gxcldev.h base/gxclipm.c base/gsovrc.c base/gxdevice.h base/gdevnfwd.c base/gspaint.c base/gdevddrw.c base/gxclip2.c base/gdevprn.h base/gdevp14.c base/gxdevcli.h base/gxclrect.c base/gdevxini.c base/gxclist.c base/gxclist.h base/gxclip.c base/gxclrast.c]

2008-12-13T16:54:17.751950Z Igor Melichev

Fix (graphics) : Redundant patterns in clist (continued 6).

DETAILS :

This is a further improvement for the bug 690133
"Regression: Ghostscript takes up all disk space when rendering eog or GIMP PDF output in 1200 dpi".
Also it is a preparation for a partial fix for the bug 690131 "Optimize consecutive setpagedevice". 

The last partch appears syntactically incorrect, now fixing.

[base/gxclpath.c]

2008-12-13T12:55:14.082194Z Igor Melichev

Fix (graphics) : Redundant patterns in clist (continued 5).

DETAILS :

This is a further improvement for the bug 690133
"Regression: Ghostscript takes up all disk space when rendering eog or GIMP PDF output in 1200 dpi".
Also it is a preparation for a partial fix for the bug 690131 "Optimize consecutive setpagedevice". 

The last partch wrongly distributed the saved pattern id for all bands
when writing a non-pattern color to all bands.
We believe it never happens the current revision with reasonable banding settings,
but fix fix it for code consistency and for avoiding problems
with further revisions.

[base/gxclpath.c]

2008-12-13T11:14:54.029422Z Igor Melichev

Fix (graphics) : Redundant patterns in clist (continued 4).

DETAILS :

This is a further improvement for the bug 690133
"Regression: Ghostscript takes up all disk space when rendering eog or GIMP PDF output in 1200 dpi".
Also it is a preparation for a partial fix for the bug 690131 "Optimize consecutive setpagedevice". 

This patch passes the coverage rectangle of a graphic element
for a better computation in cmd_put_drawing_color of the size 
would be consumed while serializing a color to clist
with copying to all covered bands.
When we need to force writing to all bands,
we pass a NULL instead the coverage rectangle.

[base/gxclpath.c base/gxclimag.c base/gxclrect.c base/gxclpath.h base/gxcldev.h]

2008-12-13T10:18:02.260144Z Ken Sharp

Fix (pdfwrite): Fonts with unusual FontMatrix generating incorrect FontBBox.

Details:
bug #689879 "wrong FontBBox in PDF file"

Fonts other than type 3 may not have a FontMatrix in PDF, these fonts are assumed to be on a 1000x1000 design grid. Most fonts already are, and embedded TrueType fonts are already catered for, but some unusual fonts have a non-standard (not [0.001 0 0 0.001 0 0]) FontMatrix. The matrix is accounted for when scaling the font, so the Tf operator is correct in the page content stream, but the FontBBox was calculated using the unscaled glyph outline.

We now scale the font outline into a 1000x1000 design grid before calculating the bounding box, so that the FontBBox entry will be correct.

[base/gdevpdtd.c]

2008-12-13T10:13:47.692668Z Ken Sharp

Fix (pdfwrite): Tidy up code.

Details:
Tidy up some code for bug #690118; When writing TrueType hmtx/vmtx, define a new function put_short which is functionally identical to put_ushort but doesn't truncate the sign bit. Use this instead of put_ushort when the value to be written may be negative. Add 0.5 to the floating point calculations and floor() the result so that we get the nearest approximation to the float when writing out the short.

A small number of files exhibit a number of single pixel differences in position or rendering of glyphs with this change. In all cases comparing the rendered result of the new PDF file with the rendered result of the original file shows no differences, so I consider these to be progressions.

[base/gdevpsft.c]

2008-12-10T19:10:43.669416Z Ralph Giles

Set standard properties on pdf_main.ps. Bug 690198.

[Resource/Init/pdf_main.ps]

2008-12-10T07:29:39.713832Z Igor Melichev

Fix (PDF interpreter) : Avoid extra erasepage, part 1.

DETAILS :

This is the first partial fix for the 
bug 690131 "Optimize consecutive setpagedevice".

The PDF interpreter calls extra setpagedevice for initializing the number of spot colors.
First it happens in pdfshowpage_setpage, and we merge that call
with another one that sets other multiple page parameters. 
Second in pdfshowpage_finish we replace it with .setpagedevice, 
which doesn't call .postinstall that calls erasepage.

[Resource/Init/pdf_main.ps]

2008-12-09T17:30:40.898715Z Marcos H. Woehrmann


Fix for weird math issue under AIX that cause problems in glpyh spacing when
writing type42 fonts for ps2write and pdfwrite.

This fixes bug 690118.

Details:

For reasons that I don't undertand under AIX (ushort) (double * double)
produces a 0 if the first double is > -1 and < 0 (and the sum is < -1).
Presumably the cast happens before the multiplication, but this isn't
reasonable and doesn't occur on other operating systems, even running
the same version of gcc.  Temporarily assigning the sum to a float and
then casting to a ushort resolves the problem.

The temporary assignment should be removed by the optimizer, so there
shouldn't be a performance hit (I did check, the optimized code is still
correct under AIX).


[base/gdevpsft.c]

2008-12-09T08:45:20.654566Z Ken Sharp

Fix (pdfwrite): regression with type 3 fonts using show charpath stroke combinations.

Details:
bug #690196 "regression: file for bug 689687"

The recent changes for text rendering modes caused a regression with Quark's type 3 font for special text effects, when optimising a show followed by charpath stroke into a single 'Tj' with a text rendering mode of 2 in the resulting PDF file.

Fixed by ceasing to treat type 3 fonts specially and applying the same optimisation as for other font types. A couple of other Quark files exhibit very small differences, comparing these to the rendered output of the original files the new result seems closer to the original. (ie a progression)

Also resolved a compiler warning.

[base/gdevpdtc.c base/gdevpdfd.c]

2008-12-09T08:01:43.121661Z Igor Melichev

Fix (graphics) : Redundant patterns in clist (continued 3).

DETAILS :

Bug 690133 "Regression: Ghostscript takes up all disk space when rendering eog or GIMP PDF output in 1200 dpi".

When filling a path with a pattern, the old code
stores the pattern to all bands that are covered with the path.
If the pattern is represented with a long clist, 
it consumes too big memory for the page clist.

If the pattern is big, the new code writes it 
to the "all bands" list instead replicating it to bands. 
Therefore the overall memory is smaller.

The decision about storing a pattern to "all bands"
should also depend on the number of bands.
This patch doesn't account that because current data flows
don't pass the number of bands to the point where
the decision must be taken. It may need a further improvement.

The threshold for "big" pattern is arbitrary set to 1Mb.
It may need an improvement also. It's another threshold 
than one for representing a pattern as a raster or a clist.

[base/gxclpath.c base/gxclutil.c base/gxcldev.h]

2008-12-09T07:58:55.697280Z Igor Melichev

Fix (graphics) : Redundant patterns in clist (continued 2).

DETAILS :

This patch is important for the bug Bug 690133 
"Regression: Ghostscript takes up all disk space when rendering eog or GIMP PDF output in 1200 dpi",
but it is not restricted with its case.

When writing a pattern color to a band,
the old code uses the "saved color" structure
for remembering which color has been stored for the band.
In the case of pattern it stores the client's pattern id.
However it doesn't provide enough resolution because
a client's pattern may be instantiated with various CTMs.
The new code uses the pattern tile id to distinguish the pattern instances.

We're not sure why saved color structure stores the client's pattern id only.
It should be so for pdfwrite, but need to check whether other
cases are possible. Therefore the current change is kind of hackish.
See comment in code.

[base/gxclpath.c]

2008-12-08T08:17:55.714566Z Ken Sharp

Fix (pdfwrite): Large type 1 or 2 fonts caused errors with text.

Details:
bug #690144 "Files render properly with gs, but are misformatted in ps2pdf"

Revision 8235 added support to pdfwrite for type 0 fonts with type 1 or type 2 (CFF) descendant fonts, emitting these as subsets of the original instead of rendering the glyphs and embedding type 3 fonts with bitmap images. This results in better quality and smaller files.

However type 1 or 2 fonts which are too large for an arbitrary Ghostscript limit (> 65537 glyphs) can not be copied. This 'should' have fallen back to the old mechanism, but some data had been altered which led to this failing.

The fix for this comprises 3 parts:

1) Mmodified scan_cmap_text to save the data we modify for subsetting, and restore it if pdf_obtain_font_resource_unencoded fails, which then falls back to the 'default' type 3 mechanism (in case of future problems in this area). 

2) Increased the limit of glyphs (for type 1 or 2 fonts) in gs_copy_font. Added a new parameter 'max_reserved_glyphs'. If this is -1 then we reserve enough space for the number of glyphs in the original font. Otherwise we reserve space for the specified maximum. This limit only applies to font type 1 or 2, and is used by pdfwrite to avoid making excessively large font copies.

3) Modified pdf_base_alloc so that if the font is large (and is not one of the standard 13 fonts), we don't allocate a complete copy for our 'subset', we only allocate as many glyphs as will fit in a standard Encoding, 256, plus  one for the required .notdef making 257 in total. We also avoid making a second 'complete' copy of the font, because we will never write the complete font.

[base/gdevpdtb.c base/gxfcopy.c base/gdevpdtc.c base/gxfcopy.h]

2008-12-05T07:39:06.671710Z Alex Cherepanov

Check the whole Decode array to detect special cases of identity and inverse
decoding. Previous test analyzed every channel separately and misidentified
decoding arrays like [0 1 1 0 0 1]. Bug 690178.

[base/gxipixel.c]

2008-12-05T04:44:51.989860Z Alex Cherepanov

Adds special, tolerant to singular matrix processing, to the case when
ImageMatrix is differs from the CTM by the translation vector only, which
happens in cached character rendering. The patch clears PostScript errors
during text rendering with singular CTM. Bug 690179, customer 870.

[base/gxipixel.c base/gsimage.c base/gxccache.c]

2008-11-29T14:33:26.712726Z Alex Cherepanov

Ignore /ToUnicode attribute when it points to an object other then a stream.
Bug 680138.

[Resource/Init/pdf_font.ps]

2008-11-29T12:27:04.428583Z Till Kamppeter

The pstopxl CUPS filter did not remove its temporary file.

[cups/pstopxl.in]

2008-11-27T15:05:37.010932Z Ken Sharp

Fix (pdfwrite): more issues with PDF Text rendering modes.

Details:
Bug #689692 Colour and linewidth is not set correct for text with rendermode STROKE
and FILLSTROKE
Bug #Bug690025 pxlmono driver prints some glyphs as squares when the input is PostScript generated by Ghostscript

This follows on from revision 9196 and further addresses problems with PDF text rendering modes. Fundamentally the problem is that the PDF text matrix (Tm) should not affect the stroke width. However PostScript only has one transformation matrix, so when we get a Tm, the PDF interpreter modifies the CTM accordingly. This alters the (effective) stroke width, resulting in incorrect output.

This patch modifies the CTM before executing a stroke in modes 2 & 6, and for mode 1 modifies the stroke width by calculating what it would have been if the CTM were the identity at the time the text block began. Since pdfwrite emits text in an identity CTM, this corrects the problem.

The pdfwrite code for combining show/charpath/stroke operations into a single text rendering mode has been modified to expect the CTM to be correct, and to utilise it, when emitting the combined operation.


[Resource/Init/pdf_ops.ps base/gdevpdts.c base/gdevpdfd.c base/gdevpdts.h base/gdevpdfg.c]

2008-11-27T05:20:05.725774Z Alex Cherepanov

Use the same name (/PDFType3Untitled) for all Type 3 fonts without /FontName
attribute. PDF interpreter doesn't need unique names and the previous attempt
to generate unique names didn't work. Bug 689358.

[Resource/Init/pdf_font.ps]

2008-11-27T01:58:54.354925Z Alex Cherepanov

Restore language level after loading pdfwrite.ps for consistency and
compatibility with PS utilities. Also pick a few nits that may cause errors
if some of start-up files ever loaded in level 1 mode. Thanks to SaGS
for the patch. Bug 688151.

[lib/pdfwrite.ps Resource/Init/gs_dpnxt.ps Resource/Init/gs_cff.ps]

2008-11-25T17:19:23.759068Z Till Kamppeter

Fixed paper tray selection for the PCL 4/5/5e drivers (bug 690182). Works fine now with "-dMediaPosition=..." and for all possible trays. Needs review to see whether it does not break anything else.

[base/gdevdjet.c]

2008-11-24T23:04:21.969628Z Alex Cherepanov

Skip everything before 'begincodespacerange' in ToUnicode CMap stream
to avoid PostScript errors in CMap headers. PDF interpreter doesn't
need any data from the header. Bug 689842, customer 870.

[Resource/Init/pdf_font.ps]

2008-11-24T19:15:04.507271Z Till Kamppeter

Fixed input tray selection support in the PCL-XL drivers ("pxlmono"/"pxlcolor"), fixes on CUPS filter and PPDs to make input tray selection actually work.

[base/gdevpx.c cups/pstopxl.in cups/pxlmono.ppd cups/pxlcolor.ppd]

2008-11-24T11:01:42.358113Z Till Kamppeter

Made the CUPS filters and PPDs for PCL-XL also work with PDF as input data format

[cups/pstopxl.in cups/pxlmono.ppd cups/pxlcolor.ppd]

2008-11-23T20:36:12.040586Z Igor Melichev

Fix (CID font emulation) : CID from another writing mode rendered a wrong glyph (continued)

DETAILS :

This improve3s the second partial fix for Bug 689304  
"improper handling of vertical japanese text", related to Comment #30, #31. 

The revision 9213 appears buggy.
When a SubstCID resource is not available,
the stack balance is broken.

[Resource/Init/gs_cidtt.ps]

2008-11-21T14:24:21.693040Z Till Kamppeter

The "cups" output device was logging way to much in CUPS' debug logging mode. Moved some logging to debug2.

[cups/gdevcups.c]

2008-11-21T05:31:10.447898Z Alex Cherepanov

Add a check for bogus '>>' after 'endstream' to recover files generated 
by 'Kroll Background Screening'. Bug 690161.

[Resource/Init/pdf_base.ps]

2008-11-20T21:11:09.954526Z Alex Cherepanov

Move validation of the page tree after installation of the decryption handler
because access to encrypted xref streams needs decryption. Fix regression
introduced by the rev. 8933. Bug 690175.

[Resource/Init/pdf_main.ps]

2008-11-20T19:31:36.700423Z Ralph Giles

Add AES support to the pdf interpreter.

This commit adds convenience wrappers around the aes stream
implementation to pdf_sec.ps, and calls them when appropriate,
based on the crypt filter methods defined in the file Trailer's
Encrypt dictionary. Bug 688958.

It also includes comment and whitespace cleanup.

[Resource/Init/pdf_sec.ps]

2008-11-17T19:43:47.727833Z Alex Cherepanov

Add missing initialization of read_id field in reusable streams.

DETAILS:
This error was detected by Valgrind. I don't have any samples where this fix
affects the output.


[psi/zfrsd.c]

2008-11-17T10:41:13.803460Z Ken Sharp

Fix (pdfwrite): Not considering all glyphs in a string when noting first/last character

Details:
Bug 690166: extra space after apostrophe when distilled
Revision 8235 added support for type 0 fotns with type 1 or 2 descendants, this required using pdf_adjust_first_last_char so that we correctly noted the used glyphs, and stored their widths.

An oversight in calling the function resulted in only the first glyph in the string being considered.

[base/gdevpdtc.c]

2008-11-16T14:47:49.851717Z Igor Melichev

Fix (PS interpreter) : Eliminate unuseful transfer of left side bearing to type42_finish.

DETAILS :

This change is algorithmically equivalent.

type42_finish never uses lsb data that could be passed to it via
operand stack from some clients. This patch removes those data
and related arguments of some C functions.

[psi/zchar42.c psi/zchar42.h psi/zchar.c]

2008-11-16T12:15:46.619814Z Igor Melichev

Fix (TT font handler) : Wrong glyph posiitions with vertical vcriting mode.

DETAILS :

Bug 689304 "improper handling of vertical japanese text".

This is third partial patch for the bug 689304.
The old formulas were obtained impirically and don't
give the right result. The new ones are coded with a better understanding
of the problem. See comments in code for more details. 

Rather the patch closes the bug, we want to do some additional
equivalent changes for cleaning the code. Another patch coming soon.

[psi/zchar42.c]

2008-11-15T14:07:27.807825Z Ken Sharp

Fix PS interpreter: issues with ICCBased spaces

Details:
Bug #690169 Regression: seg fault reading  Bug689830.pdf, Bug689831.pdf, and annots.pdf

The 9218 revision to restore the 'optional' nature of the Alternate in ICCBased colour spaces was unfortunately incomplete. This led to us trying to set a 'null' colour space when a PDF file had a damaged and unusable ICC specification.

We now use the technique specified in the PDF Reference, take the value of 'N' from the space and use that to select an appropriate alternate, when one is not specified.

[psi/zcolor.c]

2008-11-13T14:23:05.749468Z Alex Cherepanov

Skip null entries in /Annots array. Bug 690161.

[Resource/Init/pdf_main.ps]

2008-11-13T02:02:49.620374Z Ray Johnston

Revert 8.63 behavior where the /Alternate key/value pair in ICCBased param dictionaries
is optional. Bug 690165 for customer 850.

DETAILS:

This allows:

[ /ICCBased << /N 3 /DataSource (srgb.icc) (r) file >> ] setcolorspace

to work, where srgb.icc is the path to an 'input' ICC color profile.

Until Ghostscript has support for ICC profiles throughout, this is useful to
allow for setting the Resource/ColorSpace/Default*** colorspaces (or
defining the ColorSpace resources) using ICC profiles.

[psi/zcolor.c]

2008-11-10T19:01:57.531817Z Igor Melichev

Fix (clist writer) : A crash when transparent object appears over the page top.

DETAILS :

Bug 690149 "PDF-file can not be converted".

The transparency compositor cropping caused an attempt to
Write to a non-existing band over the page top.
This patch skips writing such compositor commands. 


[base/gxclimag.c]

2008-11-09T20:38:08.817663Z Igor Melichev

Fix (CID font emulation) : CID from another writing mode rendered a wrong glyph (part 2).

DETAILS :

This change fixes the previous change's commitment error.
This log message describes the union of the 2 changes.

This is a second partial fix for Bug 689304
"improper handling of vertical japanese text", related to Comment #30, #31.

When emulating a CID font with an Open Type font, a CID is first
mapped to an OpenType encoding and then to a glyph index.
However OpenType provides same character codes for glyph variants,
which render differently depending on writing mode.
The glyph '(' is an example.

This patch works for OpenType fonts only, which provide a GSUB for vertical 
writing mode.
It is not working for True Type collections with no GSUB.
They need a further improvement.

The patch assumes that all interpreters initialize a Type 42 font with 
zeroing all its fields.
Postscript interpreter does so since a long ago, but we're not sure about 
others.
They may need an improvement.

1. Define a new resource category SubstCID (Resource/Init/gs_ciddc.ps).

2. Provide a tool for generating resources for that category 
(toolbin/GenSubstCID).

3. Provide resources for various orderings (Resource/SubstCID/CNS1-WMode,
Resource/SubstCID/GB1-WMode, Resource/SubstCID/Japan1-WMode, 
Resource/SubstCID/Korea1-WMode).

4. When loading a TrueType or OpenType font for a CID font emulation, 
associate an
appropriate SubstCID resource to it (Resource/Init\gs_cidtt.ps).
(We do associate the resource with TrueType hoping that some
True Type fonts may provide GSUB).

5. Define a new structure gs_subst_CID_on_WMode_s for storing that 
information
for the graphics library (base\gxfcid.h), and its garbager descriptor 
(base/gsfcid.c).
Since it may duplicate for several fonts, it is shared and 
reference-counted.

6. The new function get_subst_CID_on_WMode loads the resource data for the 
graphics library
in psi\zfcid1.c . Note it is implemented for PS interpreter only.

7. Generalized gs_type42_substitute_glyph_index_vertical with providing a 
CID in base/gstype42.c
and made it be a virtual function of gs_font_type42 (base/gxfont42.c).
We're not sure how other interpreters initialize the font, so
we're checking it for NULL for safety and use 
gs_type42_substitute_glyph_index_vertical
as a default implementation.

8. font11_substitute_glyph_index_vertical is another implementation of that 
function, which
accounts gs_subst_CID_on_WMode_s data for providing a right glyph depending 
on WMode.
Rather a SubstCID resource provides a substitution, currently
we only use the fact that a CID is substituted, and never use
the substituting CID. Nevertheless we prefer to define and store the 
resource
in the complete form for possible improvements in future (zfcid1.c).

9. release_subst_CID_on_WMode automatically releases the resource data
when all fonts (that use it) are released.

10. Added SubstCID to the ROM file system in psi/psromfs.mak .

11. Minor unrelated fix : propagate errors from gs_font_notify_register for 
(7) in base/gstype42.c .

[psi/zchar42.c Resource/Init/gs_ciddc.ps Resource/Init/gs_cidtt.ps psi/int.mak psi/zfcid1.c psi/zfont42.c]

2008-11-09T19:09:30.285684Z Igor Melichev

Fix (CID font emulation) : CID from another writing mode rendered a wrong 
glyph (part 1).
This revision is incomplete due to a commitment error. Please use next 
revision.

DETAILS :

This is a second partial fix for Bug 689304
"improper handling of vertical japanese text", related to Comment #30, #31.

When emulating a CID font with an Open Type font, a CID is first
mapped to an OpenType encoding and then to a glyph index.
However OpenType provides same character codes for glyph variants,
which render differently depending on writing mode.
The glyph '(' is an example.

This patch works for OpenType fonts only, which provide a GSUB for vertical 
writing mode.
It is not working for True Type collections with no GSUB.
They need a further improvement.

The patch assumes that all interpreters initialize a Type 42 font with 
zeroing all its fields.
Postscript interpreter does so since a long ago, but we're not sure about 
others.
They may need an improvement.

1. Define a new resource category SubstCID (Resource/Init/gs_ciddc.ps).

2. Provide a tool for generating resources for that category 
(toolbin/GenSubstCID).

3. Provide resources for various orderings (Resource/SubstCID/CNS1-WMode,
Resource/SubstCID/GB1-WMode, Resource/SubstCID/Japan1-WMode, 
Resource/SubstCID/Korea1-WMode).

4. When loading a TrueType or OpenType font for a CID font emulation, 
associate an
appropriate SubstCID resource to it (Resource/Init\gs_cidtt.ps).
(We do associate the resource with TrueType hoping that some
True Type fonts may provide GSUB).

5. Define a new structure gs_subst_CID_on_WMode_s for storing that 
information
for the graphics library (base\gxfcid.h), and its garbager descriptor 
(base/gsfcid.c).
Since it may duplicate for several fonts, it is shared and 
reference-counted.

6. The new function get_subst_CID_on_WMode loads the resource data for the 
graphics library
in psi\zfcid1.c . Note it is implemented for PS interpreter only.

7. Generalized gs_type42_substitute_glyph_index_vertical with providing a 
CID in base/gstype42.c
and made it be a virtual function of gs_font_type42 (base/gxfont42.c).
We're not sure how other interpreters initialize the font, so
we're checking it for NULL for safety and use 
gs_type42_substitute_glyph_index_vertical
as a default implementation.

8. font11_substitute_glyph_index_vertical is another implementation of that 
function, which
accounts gs_subst_CID_on_WMode_s data for providing a right glyph depending 
on WMode.
Rather a SubstCID resource provides a substitution, currently
we only use the fact that a CID is substituted, and never use
the substituting CID. Nevertheless we prefer to define and store the 
resource
in the complete form for possible improvements in future (zfcid1.c).

9. release_subst_CID_on_WMode automatically releases the resource data
when all fonts (that use it) are released.

10. Added SubstCID to the ROM file system in psi/psromfs.mak .

11. Minor unrelated fix : propagate errors from gs_font_notify_register for 
(7) in base/gstype42.c .

[Resource/SubstCID/CNS1-WMode base/gxfcid.h Resource/SubstCID base/lib.mak Resource/SubstCID/GB1-WMode Resource/SubstCID/Japan1-WMode base/gsfcid.c base/gxfont42.h psi/psromfs.mak base/gstype42.c toolbin/GenSubstCID.ps Resource/SubstCID/Korea1-WMode]

2008-11-07T18:49:34.403723Z Ralph Giles

Remove a duplicate typedef for stream_arcfour_state.

Details:

The duplicate (opaque pointer) typedef in gdevpdfx.h was
redundant and any users that dereferenced members or allocated
the struct on the stack already included sarc4.h.

I believe the idea here was just to hide the structure details
from some hypothetical user of the pdf_crypt api. However, the
stream state structure should either be opaque, with only the
typedef in sarc4.h or it should be public and using it requires
sarc4.h. The duplication isn't justified in either case.

Since stream state structures generally are public so they can
be stack-allocated, we decided to remove the duplicate typedef.

Also adds a missing dependency to the makefile.

Issue originally reported by the coverity hfa checker.

[base/gdevpdfx.h base/devs.mak]

2008-11-06T23:51:27.600449Z Marcos H. Woehrmann

Updates to nightly regressions to allow them to run under Mac OS X.  

Details:

Change uname parameters from '-m -o' to '-m -s'
Don't appened ".db" to filename when opening database.
Replace sendmail python function with call to /usr/bin/sendmail.
Archive daily rasters.
Change location of gscdef.c from src to base.
Call time from /usr/local/bin (/usr/bin/time doesn't take -f option).

Note that some of these changes are not compatible with peeves.

[toolbin/tests/make_baselinedb.py toolbin/tests/gscheck_raster.py toolbin/tests/testdiff.py toolbin/tests/compare_checksums.py toolbin/tests/gscheck_pdfwrite.py toolbin/tests/build_revision.py toolbin/tests/check_dirs.py toolbin/tests/compare_checksumdb.py toolbin/tests/gsconf.py toolbin/tests/get_baseline_log.py toolbin/tests/run_nightly.py toolbin/tests/gstestgs.py toolbin/tests/run_regression.py toolbin/tests/update_baseline.py]

2008-11-06T23:30:55.150402Z Marcos H. Woehrmann

Stopped generating 600 dpi raster files when running make_missing since they were never being tested.

[toolbin/tests/gsparamsets.py]

2008-11-06T23:27:54.191464Z Marcos H. Woehrmann

Made some messages prettier.

[toolbin/tests/testdiff.py]

2008-11-06T23:25:02.686517Z Marcos H. Woehrmann

Fixed typo.

[toolbin/tests/update_baseline.py]

2008-11-06T20:13:19.335714Z Igor Melichev

Fix (graphics) : A missed dependency in makefile.

[base/lib.mak]

2008-11-06T20:04:26.632073Z Igor Melichev

Fix (clist interpreter) : A faster procesing without a preliminary clearing of the band buffer.

DETAILS :

The preliminary cleaning of the buffer appears unuseful because erasepage
in the clist code performs same function.

[base/gxclread.c]

2008-11-06T19:09:39.284217Z Ralph Giles

Remove an unused variable.

[base/gdevpdtt.c]

2008-11-06T19:09:37.330669Z Ralph Giles

Add a missing include for pdf_prepare_stroke().

[base/gdevpdts.c base/devs.mak]

2008-11-05T20:41:22.951927Z Ralph Giles

Remove psromfs.mak from ugcclib.mak.

This makefile is ostensibly for the graphics library only.

[base/ugcclib.mak]

2008-11-05T20:41:06.620266Z Ralph Giles

Add -lpthread to ugcclib.mak. It is now required by sync=posync.

[base/ugcclib.mak]

2008-11-05T08:26:19.980667Z Ken Sharp

Fix (pdfwrite): several issues with PaintType 2 (stroked fonts) and PDF Text rendering modes.

Details:
Bug #690136 Differences in character stroke width
Bug #689970 major artefacts in pdfwriter output
Bug #688267 Ghostscript need native PDF graphic state
Bug #689654 pdfwrite ignores font /PaintType 1
Bug #689692 Colour and linewidth is not set correct for text with rendermode STROKE
and FILLSTROKE

The current implementation of text rendering modes has some problems. I've been able to address most of these in this patch by:

1) Making the charpath detection slightly less picky. This picks up more instances of filled text followed by 'charpath stroke', combining correctly into a PDF text  rendering mode.

2) Relaxing the criteria for detecting a Tr mode involving stroking.

3) Removing some spurious scaling, and applying a better scale factor when using stroked fonts (Paint Type 2).

There are still problems with this code, and they are insuperable in the current architecture of pdfwrite/PDF interpreter. Specifically; Text render mode 6 (fill, stroke and clip) doe snot work properly, text which is stroked using a linewidth set  outside the text block, and with a non-identity CTM and non-identity text matrix  results in incorrect stroke widths.

This will need to be addressed further under bug #688267, which is an enhancement. In the meantime this patch significantly improves the current implementation. Note; bug #689692 is still slightly incorrect with this patch, though improved. Bug #690025 is unchanged (still incorrect).

[base/gdevpdts.c base/gdevpdtt.c]

2008-11-04T05:07:32.360011Z Alex Cherepanov

Add support for indirect objects in /W and /W2 entries in the CIDFont
dictionary. Bug 690151.

[Resource/Init/pdf_font.ps]

2008-11-04T03:33:52.379523Z Alex Cherepanov

Export (i.e. don't undefine) runpdfpagerange procedure for the benefit
of PDF manipulation utilities. Bug 690153.

[Resource/Init/pdf_main.ps]

2008-11-03T06:26:32.640021Z Alex Cherepanov

Fix a bug in object stream handling that sometimes dropped incremental
updates. Bug 690141.

DETAILS:
An incremental update can replace only some of the objects in the
object stream. Old code didn't check xref tables and resolfed all 
unresolved objects from the stream. Once resolved, an object is no
longer accessed through xref.

[Resource/Init/pdf_base.ps]

2008-11-03T04:28:51.792909Z Ray Johnston

Fix Floating Point excpetion caused by improper initializer of a private device
structure subclassed (in the klunky C ghostscript fashion) from the gx_device_printers_s
structure. Restructure a macro in base/gdevprn.h to help prevent similar bit rot in the
future.  Bug 690122.

DETAILS:

The problem was with devices that use the contrib/lips4/gdevlprn.h header
files. The lp_duplex_device_body_rest_ and lp_device_body_rest_ macros that
initialized the prn_device structure 'common' elements were out of date with
respect to the revision in the gx_device_printer_s structure made for the
multi-threaded rendering. The num_render_threads_requested integer was added.

I restructured the prn_device_body_rest2_ in base/gdevprn.h so that the
contrib/lips4/gdevlprn.h initialization macro could use this to minimize the
likelihood of bit rot in the future.

I did a search for other devices that might have the same problem and did not
find them (although I may have missed them).

[base/gdevprn.h contrib/lips4/gdevlprn.h]

2008-10-28T03:15:52.084170Z Alex Cherepanov

Don't assume that the top of the dictionary stack is writable or can be made
writable by allocating a new PDF graphic state. The latter cannot be done in
pdfinflt.ps and similar clients. This patch replaces my previous fix (r. 9124)
for the bug 690088. Bug 690134.

[Resource/Init/pdf_base.ps]

2008-10-28T00:43:49.468966Z Alex Cherepanov

Ignore named encodings for known symbolic fonts. Bug 690135, customer 580.

DETAILS:
Acrobat reader appears to know that /WinAnsiEncoding is not compatible with
Wingdings2. The patch looks up the font name in a table to determine whether
the font is symbolic because corresponding /Flags attribute is unreliable.

[Resource/Init/pdf_font.ps]

2008-10-27T21:53:17.877952Z Ralph Giles

Update the documentation reference to psromfs.mak.

This file moved from base to psi in r9126.

[doc/Develop.htm]

2008-10-25T04:34:30.742669Z Michael Vrhel

Fix for bug 690103.  This issue was introduced with r8868 where spatial interpolation in the source color space was introduced.  The part that was missing in that commit was to handle the case where we had 8 bit image data that was non CIE based and NOT encoded with [0 1] .

DETAILS:

This patch was tested with forced interpolation on a set of files that are known to have issues with interpolation. It performed properly on those and on the customer's bug file. 

The part that was missing in the old code was the case where we have encoded
(not [0 1]) nonindexed 8 bit image data that is not CIE based.	For this case,
it was not getting properly decoded prior to interpolation.  

[base/lib.mak base/gscspace.h base/gxiscale.c base/gscspace.c]

2008-10-24T14:51:44.819826Z Igor Melichev

Fix (TT font handler) : Properly process a broken TTC header.

DETAILS :

Bug 690105 "seg fault reading pcl file"

1. Check for TTC version header and print error if it is unknown.
2. Fixing the formatting according to C-style.htm .

[base/gstype42.c]

2008-10-23T04:33:29.326096Z Marcos H. Woehrmann

Make gx_sort_ht_order() deterministic.

DETAILS:

The gx_sort_ht_order() routine sorts the halftone mask values.
These values are often the same and qsort() does not guarantee the
order of equal elements.  However, the order appears to be significant
for the output (differences in the nightly regression are seen on
different computers).  And it's also possible that this indeterminism
is part of the cluster regression problem.

This revision sorts equal masks by index value.

DIFFERENCES EXPECTED:

Some of the pbmraw or pkmraw nightly regressions may have minor
differences in the dithering pattern.

[base/gsht.c]

2008-10-23T04:28:42.566180Z Marcos H. Woehrmann

Changed decleration of det from float to double in gs_matrix_invert().  

DETAILS:

On peeves the results of gs_matrix_invert() change depending on
whether or not compiler optimization is enabled if det is declared
as a float.  I believe this is due to the optimized code never
storing the det value so it never get shortened to a float; by
declaring it as a double the unoptimized code should act the same.

[base/gsmatrix.c]

2008-10-21T18:09:59.854984Z Ralph Giles

Fix a makefile dependency which should have been added in r8872.

[base/lib.mak]

2008-10-21T16:26:09.248809Z Igor Melichev

Fix (PS intetreter) : Crash in garbager when resetting marks in names table.

DETAILS :

Bug 690129 "MSVC8 x64 debug build crashes in names_trace_finish"

1. The real bug : the old code sometimes removes an element from nt->sub table with name_scan_sub,
and then resets marks in the element that has same table index. 
If the removed element is the last one,
it tryes to process an uninitialised element and crashes indeterministically.
The new variable save_count works for that.
The bug persisted since the repository was created.

2. Minor change : an optimization : The old code checked twice
for the loop exit condition. To fix it we changed the type of
the variable 'i' and changed the loop condition.

[psi/iname.c]

2008-10-21T10:35:52.809111Z Ken Sharp

Fix (pdfwrite): Conversion of PaintType 0 fonts to text rendering mode
1 sometimes produced incorrect stroke width.

Details:
Bug #690116 "StrokeWidth of outline font too small"

pdfwrite converts fonts with a PaintType of 0 (outline fonts) to a normal
font, but sets the text rendering mode to 1. The calculation of the 
required stroke width was insufficient in some cases.

[base/gdevpdts.c base/gdevpdtt.c base/gdevpdts.h]

2008-10-19T20:32:03.940940Z Alex Cherepanov

Search for 'startxref' instead of '%%EOF' in PDF recovery code because
'%%EOF' is mangled more ofthen than 'startxref'. Bug 690071, customer 384.

[Resource/Init/pdf_rbld.ps]

2008-10-19T01:23:28.662366Z Alex Cherepanov

Extend the size of the array for procedures scheduled for binding in DELAYBIND
mode to 2000. Prevent an overflow when 3rd party code (such as Ubuntu CJKV
patch) binds many new procedures. Bug 690124.

[Resource/Init/gs_init.ps]

2008-10-18T10:52:42.057112Z Till Kamppeter

Fixed bug #690032: bjc600/bjc800 drivers do not work with PDF input

[base/gdevcdj.c]

2008-10-18T03:11:41.445457Z Alex Cherepanov

Fix a bug in a new reusable stream implementation introduced in rev. 8810.
Take into account unread data left in the stream buffer before refilling
the buffer. Bug 690090, customers 384, 581, 661.

[psi/zfrsd.c]

2008-10-17T22:58:21.764880Z Ralph Giles

Update properties for cups driver files.

[cups/pstoraster.in cups/pdftoraster.c cups/pstopxl.in cups/pxlmono.ppd cups/cups.mak cups/gdevcups.c cups/pxlcolor.ppd]

2008-10-17T22:57:38.635737Z Till Kamppeter

Use $(PDFTORASTER_XE) for path to compiled pdftoraster binary

[cups/cups.mak]

2008-10-17T21:46:27.567328Z Till Kamppeter

Put new files under MIT license,

[cups/pdftoraster.c cups/pdftoraster.convs]

2008-10-17T20:50:06.903656Z Igor Melichev

Fix (clist writer) : Wrong compositor cropping when a shading is entirely clipped out (continued).

DETAILS :

Bug 690106 "Regression: /unregistered in --run--" 

The recent patch for the subject is not sufficient because
an empty clipping condition cannot be anticipated in the clist writer.
To fix it we introduce a new flag gx_device_clist_writer_s::cropping_saved
especially for clist_fill_path to know whether it was called recursively
for passing an untrivial clipping path for a shading. The cropping must be restored
in the outer call iff it is set.

[base/gxclpath.c base/gxclist.c base/gxclist.h]

2008-10-17T20:27:04.052662Z Till Kamppeter

Added Ghostscript-based pdftoraster filter

[cups/pdftoraster.c cups/cups.mak cups/pdftoraster.convs]

2008-10-17T16:49:58.474885Z Till Kamppeter

Fixed several bugs, like crash if input is PDF (bug #690101), duplex not working, ...

[cups/gdevcups.c]

2008-10-17T13:44:34.259593Z Alex Cherepanov

Consider /Identity CMap compatible with any CIDFont /Ordering. Bug 690120.

[Resource/Init/gs_cidcm.ps]

2008-10-17T09:31:35.914027Z Ken Sharp

Fix (pdfwrite): ICCBased color spaces in input PDF files, /Alternate space converted to
ICCBased in output PDF file.

Details:
Bug #690038 "Regression: ghostscript cannot read ghostscript produced PDF file."

The PDF interpreter always runs with (in effect) /UseCIEColor set to true. This converts
process spaces to CIE color spaces, which are emitted in the PDF as ICCBased color
spaces when using pdfwrite/ps2write.

However, for ICCBased color spaces this caused the /Alternate space of the ICCBased
space to become another ICCBased space, which is legal but silly, and caused the GS PDF
interpreter problems.

Modified the alternate space extraction routines so that they can use the UseCIE flag in
the color handling code to prevent the base space being  substituted with a CIE space,
when the parent space is an ICCBased space.

Also discovered in passing that zfsample.c and zfunc4.c use zcolor.h but the makefile
did not have dependencies for them. Fixed.

[psi/zcolor.c psi/zfunc4.c psi/zcolor.h psi/int.mak psi/zfsample.c]

2008-10-15T17:47:00.008618Z Ray Johnston

Switch file I/O of 'opdfread.ps' to 'strmio' that supports the %rom% file system
as well as the default (%os%) file system. Bug 690074.

[base/gdevpdfu.c base/devs.mak]

2008-10-15T07:06:40.437422Z Ken Sharp

Revision 9154 accidentally left a temporary C++ style comment in place.

[psi/zicc.c]

2008-10-15T04:51:30.597312Z Michael Vrhel

Fix for bug 689961.

There was a problem with the testing to determine if a color space mapping was linear within a triangle and along a line.  The old code assumed the number of components was the same in the client and device color space.  In general this is not true, especially if we have a DeviceN color space with one color and a CMYK output device, which was the test case given.  

[base/gscspace.c]

2008-10-15T01:32:43.847670Z Ralph Giles

Exclude local repository files from other version control systems
from clusterpush.

[toolbin/clusterpush.sh]

2008-10-15T01:32:39.731625Z Ralph Giles

Read git commit names if an svn revision number isn't available.

[toolbin/clusterpush.sh]

2008-10-15T01:32:33.815878Z Ralph Giles

Update the clusterpush script for the new source locations.

Previously we copied the baseline from the last ghostpcl run on the
cluster, but since the ghostpdl tree moved to the public repository it
runs in an updating directory like gs.

Also, compare return codes numerically instead of as a string.

[toolbin/clusterpush.sh]

2008-10-14T18:27:24.066580Z Ken Sharp

Fix (PS interpreter): .seticcspace leaving operand on stack.

Details:
Bug #690039 "failure to read ICC profiles generated by  
Adobe Photoshop Version 7 and 9".

ICC profiles in PostScript comments are handled by the comment 
parsing code in gs_icc.ps, using the .seticcspace operator. After
the recent change to handle colour in 'C' rather than PostScript,
the .seticcspace operator was not removing its argument from the 
operand stack.

This led to the comment processing for other purposes (specifically
pdfwrite in this case) generating errors, as the stack had been disturbed.

Altered the 'seticc' routine (called by .seticcspace) to remove the
operand from the stack. Also required altering the C colour processing
to increment the operand stack and pass the operand that way, when 
calling seticc for PDF interpretation.

[psi/zcolor.c psi/zicc.c]

2008-10-13T21:03:48.526048Z Till Kamppeter

Make Duplex with the "pxlcolor" and "pxlmono" drivers work (standard command line options "-dDuplex" and "-dTumble").

[base/gdevpx.c]

2008-10-12T06:38:18.212672Z Alex Cherepanov

Remove spurious un-definition of GlobalSubrs attribute during loading of
OpenType CFF fonts as CIDFont resources. Bug 690113, customer 1110.

[Resource/Init/gs_cff.ps]

2008-10-10T08:51:42.858031Z Ken Sharp

The update for opdfread.ps in revision 8706 missed a required routine 'putu32'.

Details:
putu32, used to update the offsets of TrueType tables in the TrueType header, uses
putu16, which was accidentally omitted. This (oddly) didn't seem to cause a problem with
testing but did for the customer. Added the missing routine.

[Resource/Init/opdfread.ps]

2008-10-09T19:48:14.487705Z Alex Cherepanov

Scale widget annotations in x and y directions to fit the BBox of the
appearance stream into the annotation rectangle. Old code considered
y direction only. Bug 690109.

DETAILS:
This implementation is mainly based on the experiments with AR5.

[Resource/Init/pdf_draw.ps]

2008-10-09T17:53:10.358436Z Ray Johnston