summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--base/gscdefs.h2
-rw-r--r--base/version.mak2
-rw-r--r--doc/DLL.htm2
-rw-r--r--doc/Deprecated.htm2
-rw-r--r--doc/Develop.htm2
-rw-r--r--doc/Devices.htm2
-rw-r--r--doc/Drivers.htm2
-rw-r--r--doc/Fonts.htm2
-rw-r--r--doc/History9.htm1244
-rw-r--r--doc/Install.htm2
-rw-r--r--doc/Internal.htm2
-rw-r--r--doc/Language.htm2
-rw-r--r--doc/Lib.htm2
-rw-r--r--doc/Make.htm2
-rw-r--r--doc/News.htm53
-rw-r--r--doc/Ps-style.htm2
-rw-r--r--doc/Ps2epsi.htm2
-rw-r--r--doc/Psfiles.htm2
-rw-r--r--doc/Readme.htm2
-rw-r--r--doc/Release.htm2
-rw-r--r--doc/SavedPages.htm2
-rw-r--r--doc/Source.htm2
-rw-r--r--doc/Unix-lpr.htm2
-rw-r--r--doc/Use.htm2
-rw-r--r--doc/VectorDevices.htm2
-rw-r--r--doc/WhatIsGS.htm2
-rw-r--r--doc/gs-vms.hlp2
-rw-r--r--doc/sample_downscale_device.htm2
-rw-r--r--doc/subclass.htm2
-rw-r--r--doc/thirdparty.htm2
-rw-r--r--man/dvipdf.12
-rw-r--r--man/gs.12
-rw-r--r--man/gslp.12
-rw-r--r--man/gsnd.12
-rw-r--r--man/pdf2dsc.12
-rw-r--r--man/pdf2ps.12
-rw-r--r--man/pf2afm.12
-rw-r--r--man/pfbtopfa.12
-rw-r--r--man/printafm.12
-rw-r--r--man/ps2ascii.12
-rw-r--r--man/ps2epsi.12
-rw-r--r--man/ps2pdf.12
-rw-r--r--man/ps2pdfwr.12
-rw-r--r--man/ps2ps.12
44 files changed, 1274 insertions, 107 deletions
diff --git a/base/gscdefs.h b/base/gscdefs.h
index fd15ec80f..a67e1c6e8 100644
--- a/base/gscdefs.h
+++ b/base/gscdefs.h
@@ -37,7 +37,7 @@
#ifndef GS_PRODUCT
# define GS_PRODUCT\
- GS_PRODUCTFAMILY " RELEASE CANDIDATE 1"
+ GS_PRODUCTFAMILY " RELEASE CANDIDATE 2"
#endif
/* Prototypes for configuration definitions in gconfig.c. */
diff --git a/base/version.mak b/base/version.mak
index 88041f2df..377a37c67 100644
--- a/base/version.mak
+++ b/base/version.mak
@@ -18,7 +18,7 @@ GS_VERSION_MAJOR=9
GS_VERSION_MINOR=51
GS_VERSION_MINOR0=51
# Revision date: year x 10000 + month x 100 + day.
-GS_REVISIONDATE=20191015
+GS_REVISIONDATE=20200228
# Derived values
GS_VERSION=$(GS_VERSION_MAJOR)$(GS_VERSION_MINOR0)
GS_DOT_VERSION=$(GS_VERSION_MAJOR).$(GS_VERSION_MINOR0)
diff --git a/doc/DLL.htm b/doc/DLL.htm
index cca416881..6fcfa9f2d 100644
--- a/doc/DLL.htm
+++ b/doc/DLL.htm
@@ -776,7 +776,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Deprecated.htm b/doc/Deprecated.htm
index eddc36586..dd6037c84 100644
--- a/doc/Deprecated.htm
+++ b/doc/Deprecated.htm
@@ -5773,7 +5773,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Develop.htm b/doc/Develop.htm
index d9744b6e0..1e88b964b 100644
--- a/doc/Develop.htm
+++ b/doc/Develop.htm
@@ -4773,7 +4773,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Devices.htm b/doc/Devices.htm
index 252afa8a3..2efe40a47 100644
--- a/doc/Devices.htm
+++ b/doc/Devices.htm
@@ -2015,7 +2015,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Drivers.htm b/doc/Drivers.htm
index 5fd62e442..5c3acd0a7 100644
--- a/doc/Drivers.htm
+++ b/doc/Drivers.htm
@@ -3678,7 +3678,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Fonts.htm b/doc/Fonts.htm
index ae491a621..05893a1b6 100644
--- a/doc/Fonts.htm
+++ b/doc/Fonts.htm
@@ -370,7 +370,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/History9.htm b/doc/History9.htm
index f0363879b..f70f44427 100644
--- a/doc/History9.htm
+++ b/doc/History9.htm
@@ -79,7 +79,7 @@ TOC to see how to edit it for visual conciseness.
<h2>Table of contents</h2>
<blockquote><ul>
-<li><a href="#Version9.51">Version 9.51 (2020-02-12)</a>
+<li><a href="#Version9.51">Version 9.51 (2020-02-28)</a>
<li><a href="#Version9.50">Version 9.50 (2019-10-15)</a>
<li><a href="#Version9.27">Version 9.27 (2019-04-03)</a>
<li><a href="#Version9.26">Version 9.26 (2018-11-20)</a>
@@ -134,50 +134,40 @@ overview</a>.
<!-- [1.0 end visible header] ============================================== -->
<!-- [2.0 begin contents] ================================================== -->
-<h2><a name="Version9.50"></a>Version 9.51 (2020-02-12)</h2>
+<h2><a name="Version9.51"></a>Version 9.51 (2020-02-28)</h2>
<p> Highlights in this release include:
<ul>
<li>
-<p>The change to version 9.50 (rather than the intended 9.28) follows recognition
-of the extent and importance of the file access control redesign/reimplementation
-outlined below.
+<p>9.51 is primarily a maintainance release, consolidating the changes we introduced
+in 9.50.
</li>
<li>
-<p>The file access control capability (enable with <code>-dSAFER</code>) has been
-completely rewritten, with a ground-up rethink of the design. For more details,
-see: <a href="Use.htm#Safer">SAFER</a>.
-<p>It is important to note that <code>-dSAFER</code> now <strong>only</strong> enables
-the file access controls, and no longer applies restrictions to standard Postscript
-functionality (specifically, restrictions on <code>setpagedevice</code>. If your
-application relies on these Postscript restrictions, see <a href="Use.htm#OldSafer">OLDSAFER</a>,
-and please get in touch, as we do plan to remove those Postscript restrictions
-unless we have reason not to.
-<p><strong>IMPORTANT:</strong> File access controls are now enabled by default. In
-order to run Ghostscript without these controls, see <a href="Use.htm#NoSafer">NOSAFER</a>
+<p>We have continued our work on code hygiene for this release, with a focus on the
+static analysis tool Coverity (from <a href="https://www.synopsys.com">Synopsys, Inc</a>)
+and we are now maintaining a policy of zero Coverity issues in the Ghostscript/GhostPDL
+source base.
</li>
-<p><strong>Important Note for Windows Users</strong>: See below under
-<a href="#28_Incompatible_changes">Incompatible Changes</a>
<li>
-<p>IMPORTANT: We are in the process of forking LittleCMS. LCMS2 is not thread safe, and
-cannot be made thread safe without breaking the ABI. Our fork will be thread safe, and include
-performance enhancements (these changes have all be been offered and rejected upstream). We
-will maintain compatibility between Ghostscript and LCMS2 for a time, but not in perpetuity.
-Our fork will be available as its own package separately from Ghostscript (and MuPDF).
+<p>IMPORTANT: We have forked LittleCMS2 into LittleCMS2mt (the "mt" indicating "multi-thred").
+LCMS2 is not thread safe, and cannot be made thread safe without breaking the ABI. Our fork
+will be thread safe, and include performance enhancements (these changes have all be been
+offered and rejected upstream). We will maintain compatibility between Ghostscript and LCMS2
+for a time, but not in perpetuity. If there is sufficient interest, our fork will be
+available as its own package separately from Ghostscript (and MuPDF).
</li>
<li>
<p>The usual round of bug fixes, compatibility changes, and incremental improvements.
</li>
-<li>
-<p>Special thanks to Akira Kakuto, Paul Wessel, William Bader, Nelson H. F. Beebe and
-everyone else who put time and effort into testing this new release.
-</li>
</ul>
<p>For a list of open issues, or to report problems,
please visit <a href="http://bugs.ghostscript.com/">bugs.ghostscript.com</a>.
<h3><a name="9.51_Incompatible_changes"></a>Incompatible changes</h3>
+<h4>Included below are incompatible changes from recent releases (the
+specific release in question listed in parentheses). We include these,
+for now, as we are aware that not everyone upgrades with every release.</h4>
<ul>
<li>
-<p>There are a couple of subtle incompatibilities between the old and new SAFER
+<p>(9.50) There are a couple of subtle incompatibilities between the old and new SAFER
implementations. Firstly, as mentioned above, SAFER now leaves standard Postcript
functionality unchanged (except for the file access limitations). Secondly,
the interaction with <code>save</code>&sol;<code>restore</code> operations, see
@@ -190,9 +180,7 @@ change in behaviour compared to the old code which, on Windows, was case
in that it now supports (although does not enforce) case sensitivity.
</li>
<li>
-<p>The following is not strictly speaking new to 9.50, as not much has changed since
-9.27 in this area, but for those who don't upgrade with every release:
-<p>The process of &quot;tidying&quot; the Postscript name space should have removed
+<p>(9.27) The process of &quot;tidying&quot; the Postscript name space should have removed
only non-standard and undocumented operators. Nevertheless, it is possible that
any integrations or utilities that rely on those non-standard and undocumented
operators may stop working, or may change behaviour.
@@ -207,6 +195,1198 @@ at <a href="https://www.mupdf.com">MuPDF</a>.
</li>
</ul>
<h3><a name="9.51_changelog"></a>Changelog</h3>
+<p><strong>2020-02-26 15:22:04 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dbaddcf6e251229a1506f2df33844365df39de44">dbaddcf6e251229a1506f2df33844365df39de44</a>
+<blockquote>
+<p>
+ Fix signed issue in 16bit alpha blending fill_rectangle routines.<br>
+<br>
+ As seen by the central spot in the pink region of page 1 of:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -o out%d.psd -dMaxBitmap=2000M<br>
+ tests_private/pdf/pdf_1.7_ATS_EXXPA1DC_PDFACT.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 15:09:35 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4ad8020c3cb63345dd76119e8978c3353940a68e">4ad8020c3cb63345dd76119e8978c3353940a68e</a>
+<blockquote>
+<p>
+ pdfwrite - Fix indeterminism with QL shading tests<br>
+<br>
+ When creating a new colour space to put in a PDF file we perform various<br>
+ tests to see if its a space we have already written, to prevent writing<br>
+ duplicate spaces (we perform similar tests for most resources).<br>
+<br>
+ In some cases, when we write the resource to a file, we create an MD5<br>
+ hash and compare those to see if the resources are the same. In the<br>
+ case of colour spaces, however, they are retained in memory and so we<br>
+ use a different method. We 'serialise' the colour space. This is not the<br>
+ same as writing it to the PDF file, and its a graphics library thing not<br>
+ a pdfwrite function. Basically this writes out the content of the<br>
+ various C structures. The stream we use is an in-memory stream.<br>
+<br>
+ Unfortunately, for Separation colour spaces, there was a fault in the<br>
+ function which writes the colour space name, and it was writing out<br>
+ the bytes forming the address of the name instead of the actual string.<br>
+<br>
+ This could, very rarely, mean that we would mis-identify a new colour<br>
+ space as being the same as an old colour space, and so would reuse the<br>
+ old space instead of creating a new one.<br>
+<br>
+ I've checked the DeviceN code and it does not suffer the same problem.<br>
+<br>
+base/gscsepr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 13:03:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3cb8b3a403450d617b2b96ec0349bb99ce0d8379">3cb8b3a403450d617b2b96ec0349bb99ce0d8379</a>
+<blockquote>
+<p>
+ Fix the overflow case in 16 bit saturation blending.<br>
+<br>
+ As seen with the second apple of the bottom row of page 1<br>
+ of:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -r72 -o out%d.psd -dMaxBitmap=2000M<br>
+ ../tests_private/pdf/PDF_1.7_ATS/AIX4G1C3.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 17:10:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5d4305e916d3f75492d03dfd79ab1aaedf9545e3">5d4305e916d3f75492d03dfd79ab1aaedf9545e3</a>
+<blockquote>
+<p>
+ Fix for bug 702150: make pl_main_run_file_utf8() check for error from s_process_read_buf().<br>
+<br>
+ Avoids infinite loop in:<br>
+ ./membin/gpcl6 -sDEVICE=ppmraw -o /dev/null .<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 18:24:55 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2c6efee0f594ad29394bf8a303f21d85dcb1d70a">2c6efee0f594ad29394bf8a303f21d85dcb1d70a</a>
+<blockquote>
+<p>
+ minor improvements to toolbin/squeeze2text.py.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 08:25:13 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ef5dfe7e3b3858bdfb20c168b4818c4d65fb932f">ef5dfe7e3b3858bdfb20c168b4818c4d65fb932f</a>
+<blockquote>
+<p>
+ CID 354310: Remove pointless unsigned comparison with 0.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 08:11:49 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=29335f43967a0f089d6f2f37883a22f1516f7bde">29335f43967a0f089d6f2f37883a22f1516f7bde</a>
+<blockquote>
+<p>
+ CID 354291: Add error handling for inability to allocate<br>
+<br>
+ Coverity complained about setting dash.pattern = NULL and &quot;Passing &quot;&amp;dash&quot;<br>
+ to &quot;gstate_copy_dash&quot;, which dereferences null &quot;dash.pattern&quot; which is either<br>
+ wrong, or *very* misleading. We assume that it means that gx_set_dash() *may*<br>
+ access that pointer.<br>
+<br>
+ In truth, this can never happen in these circumstances.<br>
+<br>
+ Nevertheless, in gx_set_dash() is we have a NULL mem (allocator) pointer and the<br>
+ dash pattern pointer is NULL at the point we have to copy into it, then throw<br>
+ an error.<br>
+<br>
+base/gsline.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 19:59:03 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1d0889b9fcf3a5d5012fad021b4c53828879016e">1d0889b9fcf3a5d5012fad021b4c53828879016e</a>
+<blockquote>
+<p>
+ Fix bug 702139 - clist clipping bug.<br>
+<br>
+ When characters are filled as paths, the fill_adjust may be set to 0.<br>
+ Clip paths are supposed to match fill paths, i.e. the 'any part of pixel'<br>
+ rule, so we need fill_adjust of 0.5 (not 0). The most foolproof way to fix<br>
+ this is to set it in the reader when processing 'begin_clip' and restore<br>
+ it when handling the end_clip.<br>
+<br>
+ There are many progressions with this change, but it also exposes some<br>
+ cases where the change in clipping allows other elements to be seen that<br>
+ were previously hidden. Those few instances are minor and mostly seem to<br>
+ occur when page mode differs from clist mode. Examination of some of those<br>
+ cases shows that the clip path with clist mode now matches page mode and<br>
+ other elements (e.g. images) differ in extent between page and clist mode.<br>
+<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 19:39:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=86f81e9b799b66207c699768616a6e3ba3c311c3">86f81e9b799b66207c699768616a6e3ba3c311c3</a>
+<blockquote>
+<p>
+ Fix gx_default_copy_alpha_hl_color for 16 bit operation.<br>
+<br>
+ The code to write the composite data back to buffers to be sent<br>
+ to copy_alpha was getting the first byte of each 16 bit pair<br>
+ wrong in the 16bit data case.<br>
+<br>
+ Also, when we 'restart' after skipping a zero byte in the 16bit<br>
+ case we need to skip 2 bytes per pixel, not one.<br>
+<br>
+ This can be seen when running:<br>
+<br>
+ gs -r72 -o out%d.psd -sDEVICE=psdcmyk16 -dMaxBitmap=2000M<br>
+ ../tests_private/comparefiles/js.pdf<br>
+<br>
+base/gdevdbit.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 18:19:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=635303ca7d8a36b3dabc9afbd9132f4b9a36dce5">635303ca7d8a36b3dabc9afbd9132f4b9a36dce5</a>
+<blockquote>
+<p>
+ Fix psdcmyk16 blending issue.<br>
+<br>
+ Use uint32_t rather than int to avoid signedness issues.<br>
+<br>
+ Seen in the psdcmyk16 page mode rendering of<br>
+<br>
+ tests_private/comparefiles/Bug692766.pdf<br>
+<br>
+ (bad colors in 4th rgb circle intersection test).<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 15:57:36 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a00c75369e082798d82202a2b64d8e4b484d0c11">a00c75369e082798d82202a2b64d8e4b484d0c11</a>
+<blockquote>
+<p>
+ Fix coverity issues 354292 and 354293.<br>
+<br>
+ Don't bother testing an unsigned value for clipping against 0.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 08:58:32 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=32f3d6703a7e5c6582c066837783c6697e98b1ca">32f3d6703a7e5c6582c066837783c6697e98b1ca</a>
+<blockquote>
+<p>
+ Replace 0 with NULL for pointer validation/setting.<br>
+<br>
+ Also make validation an explicit comparison with NULL i.e.:<br>
+ &quot;if (mem != NULL)&quot; rather than &quot;if (mem)&quot;.<br>
+<br>
+base/gsline.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 17:30:54 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6c1002cc251907e702fd5db9dc81365a964816c6">6c1002cc251907e702fd5db9dc81365a964816c6</a>
+<blockquote>
+<p>
+ Add support for multiple squeezes in one run.<br>
+<br>
+ E.g. MEMENTO_SQUEEZES=115867-1..+3,119928-1..+3 ...<br>
+<br>
+ This is equivalent running multiple times with MEMENTO_FAILAT set to 115866,<br>
+ 115867, 11588, 119927, 119928, 119929.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 10:38:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=39557bd53eee75a8b8f762457ce57a5437e79d6c">39557bd53eee75a8b8f762457ce57a5437e79d6c</a>
+<blockquote>
+<p>
+ Fix for MEMENTO_FAILAT=119928: only call gs_grestoreall_for_restore() if vmsave-&gt;gsave not NULL.<br>
+<br>
+ Also fix error cleanup in gs_gsave_for_save(), otherwise this fix breaks<br>
+ previous fix for MEMENTO_FAILAT=115802.<br>
+<br>
+ [Thanks to chrisl for this and various other recent fixes.]<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=119928 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsstate.c<br>
+psi/isave.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 11:21:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=60507d492507817bb5ae14a17a01d19c50d41e0a">60507d492507817bb5ae14a17a01d19c50d41e0a</a>
+<blockquote>
+<p>
+ toolbin/squeeze2text.py: improve log output.<br>
+<br>
+ With -p, if there is gap in 'Memory squeezing @ &lt;N&gt;' output (because of calls<br>
+ to free()), output next &lt;N&gt;.<br>
+<br>
+ Also flush log output to avoid looking like we've hung.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 21:00:21 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3a9ea36465e97ce729c5ab26dc8e0d1435b7b246">3a9ea36465e97ce729c5ab26dc8e0d1435b7b246</a>
+<blockquote>
+<p>
+ Fix issue with fts_14_1416.pdf and psdcmyk16<br>
+<br>
+ This was missed in the fix. Affected only 16 bit devices.<br>
+<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=b1ac0686eea6adcf2db8cabf7858796494b4459d<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 20:05:49 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8f3320f9b6214907d24a4a9f77638b199aa95f8e">8f3320f9b6214907d24a4a9f77638b199aa95f8e</a>
+<blockquote>
+<p>
+ Fix Ink names leaking.<br>
+<br>
+ The cause of the leak was a typo in gx_final_DeviceN.<br>
+<br>
+ Once this is fixed, we hit a problem where ink names are set<br>
+ to be a pointer to a static empty string, which can't be<br>
+ freed. Change to using NULL to mean empty ink name.<br>
+<br>
+base/gscdevn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:01:43 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b28d57e7422d2d4df8c805342ad01dfc6c6e1232">b28d57e7422d2d4df8c805342ad01dfc6c6e1232</a>
+<blockquote>
+<p>
+ Memento/Valgrind tweak.<br>
+<br>
+ Ensure we mark the contents of a block readable before we<br>
+ look for pointers in it, and don't overrun the end.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:57:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0822ac2a5f1f02315a783504fccf615a55cf494f">0822ac2a5f1f02315a783504fccf615a55cf494f</a>
+<blockquote>
+<p>
+ Squash some unused variable warnings.<br>
+<br>
+base/claptrap-planar.c<br>
+base/gp_unifs.c<br>
+base/gxclpath.c<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:14:23 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=82a2d6356858c0a4ab9ff7fa294c0380d04aa9e3">82a2d6356858c0a4ab9ff7fa294c0380d04aa9e3</a>
+<blockquote>
+<p>
+ pdf14_{fill_stroke_path,clist_fill_stroke_path_pattern_setup} cleanups.<br>
+<br>
+ Use a nicer method of breaking const (to avoid warnings). Ensure<br>
+ that we always put everything back as it was when we leave the<br>
+ functions, even if we have an error.<br>
+<br>
+ Remove needless cleanup code to handle functions that can never<br>
+ return an error to us returning an error.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:35:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b1ff23ccf08707af544de59d6c59971d0c17098c">b1ff23ccf08707af544de59d6c59971d0c17098c</a>
+<blockquote>
+<p>
+ pdf14_clist_fill_stroke_path_pattern_setup overprint fix.<br>
+<br>
+ Only enable CompatibleOverprint for the stroke part of stroke/fill<br>
+ patterns if we are in a subtractive space.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 11:24:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=389324fd827e1172eb358b616a32af5fcb2633f6">389324fd827e1172eb358b616a32af5fcb2633f6</a>
+<blockquote>
+<p>
+ Squash some warnings with gs_swapcolors_quick breaking const.<br>
+<br>
+ At various places in the code, we call gs_swapcolors_quick where<br>
+ we only have a const pgs.<br>
+<br>
+ Properly, we should copy the pgs to a non-const pgs, and then use<br>
+ that, but that would be a performance hit.<br>
+<br>
+ In all cases, we change the graphics state, then restore it before<br>
+ exit, so effectively it is const over the entire call of the<br>
+ enclosing procedure.<br>
+<br>
+ Rather than having lots of small hacky casts removing const, we<br>
+ push the const breakage into gs_swapcolors_quick itself where we<br>
+ do it in the &quot;approved&quot; way using a union.<br>
+<br>
+base/gdevp14.c<br>
+base/gsstate.c<br>
+base/gxfill.c<br>
+base/gxgstate.h<br>
+devices/vector/gdevpdfd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 10:10:25 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=449433ff6689c603a56186dbde5721f6139aa939">449433ff6689c603a56186dbde5721f6139aa939</a>
+<blockquote>
+<p>
+ Avoid floating point in gxblend.c<br>
+<br>
+ Use fixed point in preference.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 08:23:59 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6badfb362efe0fb4f0c3df106a33ecd5b0265ef7">6badfb362efe0fb4f0c3df106a33ecd5b0265ef7</a>
+<blockquote>
+<p>
+ Implement OPM tracking in pdfwrite<br>
+<br>
+ More than somewhat to my surprise, the release testing of 9.51 revealed<br>
+ that pdfwrite was not tracking the state of overprint mode (OPM). It<br>
+ could be set by setdistillerparams, and in no other way.<br>
+<br>
+ This commit adds tracking the OPM in the graphics state, removes the<br>
+ old overprint_mode variable from the device, but preserves the ability<br>
+ to alter the OPM using setdistillerparms.<br>
+<br>
+ This also alters the initial state of OPM, the distiller params<br>
+ reference states that the 'factory default' of OPM is 1, but the PDF<br>
+ Reference says that the initial state of OPM is 0. We need to start<br>
+ with the correct setting of OPM so we change it form 1 to 0<br>
+ in gs_pdfwr.ps.<br>
+<br>
+ In passing, cast a const gs_gstate * to a gs_gstate * when used by<br>
+ gs_swapcolours_quick, in order to avoid a compiler warning.<br>
+<br>
+ This causes a small number of progressions in files using OPM (which is<br>
+ rare, its even rarer to actually alter it during the course of the file)<br>
+<br>
+Resource/Init/gs_pdfwr.ps<br>
+devices/vector/gdevpdfb.h<br>
+devices/vector/gdevpdfd.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 16:24:12 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3dc65600d6d4eb060398f06f148cfe4f07a82439">3dc65600d6d4eb060398f06f148cfe4f07a82439</a>
+<blockquote>
+<p>
+ Bug 702117 Knockout groups containing non-isolated groups<br>
+<br>
+ So this ended up being rather complicated. The first issue was that<br>
+ we were not setting the backdrop properly for non-isolated groups that<br>
+ reside in knockout groups. When that was fixed, it was revealed that we<br>
+ were not doing the recompositing operation for non-isolated knockout groups. This meant<br>
+ that the backdrop was getting applied twice effectively (once in the original<br>
+ fill and then again when the group was popped). The only file that showed<br>
+ this issue was the crazy Altona page with the many overlapping groups. Customer<br>
+ file added to provide a clearer case in the regression tests.<br>
+<br>
+base/gdevp14.c<br>
+base/gxblend.c<br>
+base/gxblend1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 17:09:41 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=416baca7c4bcf0b1794b7b1647250bf09adaee9d">416baca7c4bcf0b1794b7b1647250bf09adaee9d</a>
+<blockquote>
+<p>
+ Fix MEMENTO_FAILAT=115867 - segv in i_unregister_root() after failure in i_register_root().<br>
+<br>
+ In pl_main_delete_instance(), don't call gs_unregister_root() if<br>
+ minst-&gt;device_root is NULL.<br>
+<br>
+ Also in pl_top_create_device(), check return from<br>
+ gs_register_struct_root(). But this doesn't appear to make any difference to<br>
+ the handling of the memento error.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=115867 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 16:51:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4eb54af16c69ef36371291bd43f853865adea1eb">4eb54af16c69ef36371291bd43f853865adea1eb</a>
+<blockquote>
+<p>
+ Fix deep color group compose issue.<br>
+<br>
+ In commit bb7d57e84e9fe I reordered parameters to keep 8/16<br>
+ branches consistent, and missed one case.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:27:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a2276988137021618bb3ca440aba50e126160bcd">a2276988137021618bb3ca440aba50e126160bcd</a>
+<blockquote>
+<p>
+ Remove needless &quot;isolated&quot; parameter from pdf14_mark_rect routines.<br>
+<br>
+ The value was carefully plumbed through (only in the 8bit case) in<br>
+ a recent commit, but was never actually used. Remove it a) because<br>
+ it's pointless passing a variable we don't use, and b) because it's<br>
+ another difference between 8 and 16 bit versions.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:21:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9ddcae93fe1629e81d36b17b7fec9de787b411cc">9ddcae93fe1629e81d36b17b7fec9de787b411cc</a>
+<blockquote>
+<p>
+ Fix typing mistake in 16bit transparency.<br>
+<br>
+ When promoting from 8 to 16 bit, shape and src_alpha become<br>
+ uint16_ts rather than bytes.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:06:38 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7de8fe5a49df0f9154fa707a934e39c012c3cc2a">7de8fe5a49df0f9154fa707a934e39c012c3cc2a</a>
+<blockquote>
+<p>
+ Fix more overprint problems with deep color transparency.<br>
+<br>
+ Again, overprint changes to the 8 bit paths had not been<br>
+ pulled across to the 16 bit path.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 07:10:40 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2d3f8c01231d52a5595e2727b31b8044188a5af8">2d3f8c01231d52a5595e2727b31b8044188a5af8</a>
+<blockquote>
+<p>
+ Added toolbin/squeeze2text.py, for processing output from MEMENTO_SQUEEZEAT=...<br>
+<br>
+ An alternative to squeeze2html.pl, outputing just summary information.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 11:18:11 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=777d79315e0094bef83d241bc0d5683ea6775a55">777d79315e0094bef83d241bc0d5683ea6775a55</a>
+<blockquote>
+<p>
+ Fix for MEMENTO_FAILAT=115802: make gs_gsave_for_save() call gs_gsave() so it can restore after error.<br>
+<br>
+ Previously, zsave() called gs_gsave_for_save() then gs_gsave(), but if<br>
+ gs_gsave() failed we ended up with SEGV in finalise code.<br>
+<br>
+ To allow zsave() to restore things after gs_gsave() failure, we would need to<br>
+ add an include of base/gxgstate.h.<br>
+<br>
+ Instead we remove the call of gs_gsave() from zsave() and append it to<br>
+ gs_gsave_for_save(), where things can be easily restored if it fails.<br>
+<br>
+ [There are no other callers of gs_gsave_for_save().]<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=115802 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsstate.c<br>
+psi/zvmem.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 09:44:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6db4560f1e31bb92321894e0d008d310aa600097">6db4560f1e31bb92321894e0d008d310aa600097</a>
+<blockquote>
+<p>
+ Avoid leaks if we get alloc failure when closing down (found by memento).<br>
+<br>
+ In gs_main_finit(), ignore gs_error_VMerror from interp_reclaim(). Such error<br>
+ ultimately comes from gs_vmreclaim() calling context_state_load(), but the<br>
+ missing info doesn't seem to be required for gs_main_finit() to carry on.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=147801 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+psi/imain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 17:40:51 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eb726fb4d2597cfcd4986dd9c105cf1ab71d09e3">eb726fb4d2597cfcd4986dd9c105cf1ab71d09e3</a>
+<blockquote>
+<p>
+ Fix image_color_icc_prep to properly align planar buffers.<br>
+<br>
+base/gxicolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 10:50:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e01371e00caa8f5d08ef150a6f594c93ca495be2">e01371e00caa8f5d08ef150a6f594c93ca495be2</a>
+<blockquote>
+<p>
+ Enable CAL for gxicolor halftoning.<br>
+<br>
+ Looks like the calling code was unfinished, and the build<br>
+ changes were not done.<br>
+<br>
+ Also, squash some warnings.<br>
+<br>
+base/gxicolor.c<br>
+base/gximono.c<br>
+base/lib.mak<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 15:57:47 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c4e7cddc4d053f2850e697696e2498180547961a">c4e7cddc4d053f2850e697696e2498180547961a</a>
+<blockquote>
+<p>
+ Ensure the memory entry in a cloned gstate is correct.<br>
+<br>
+ In theory, we could end up cloning a graphics state with one allocator, then<br>
+ assigning the &quot;memory&quot; entry in the cloned state to that of the state we are<br>
+ cloning.<br>
+<br>
+ In practice the two have (so far) been the same, but that is not guaranteed.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 11:08:57 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=239e70cd02491bab1cce9092c07c959427358646">239e70cd02491bab1cce9092c07c959427358646</a>
+<blockquote>
+<p>
+ Fix segfault cleaning up after gstate clone failure.<br>
+<br>
+ For me this happens with MEMENTO_FAILAT=112447 and for Julian it happens with<br>
+ MEMENTO_FAILAT=115905.<br>
+<br>
+ Basically, the order of events was that we'd allocate a new gstate, copy the<br>
+ contents of the existing gstate to the new one, then copy the dash pattern<br>
+ (which could fail) and copy the &quot;client_data&quot; (which could and, in this case,<br>
+ did fail). When either of those failed, we'd jump to the error handling and<br>
+ exit with the error.<br>
+<br>
+ The problem is that, by jumping to the &quot;fail&quot; label, we skip over all the code<br>
+ that fixes up the reference counts (and various other things) to account for<br>
+ the newly created gstate.<br>
+<br>
+ This commit reorders things so we allocate the gstate, copy the client data,<br>
+ copy the dash pattern, *then* assign the contents of the old gstate to the new<br>
+ one, and carry on. Thus, by the time the gstate contents are copied, the<br>
+ function cannot fail, and everything is sure to be correctly setup.<br>
+<br>
+ In the event that either the dash pattern or the client data fail to allocate,<br>
+ the new gstate is still filled with NULLs, except for the subset of<br>
+ &quot;gs_gstate_parts&quot; which are allocated and setup correctly so we can safely<br>
+ free the graphics state object before returning the error.<br>
+<br>
+ Also, use NULL for pointer validation instead of 0.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 17:43:18 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=db5b51109ddee39b17b2ff2c2ac12f41a70785ef">db5b51109ddee39b17b2ff2c2ac12f41a70785ef</a>
+<blockquote>
+<p>
+ Make sure pattern fills use proper alpha settings<br>
+<br>
+ Fix for regression of fts_28_2804.pdf pdfwrite output rendering<br>
+ with fill-stroke commit. This also fixes the rendering of fts_25_2526.pdf<br>
+ Bug 702033. Required a minor change in the XPS interpreter to make<br>
+ sure that patterns did not have their opacity double applied.<br>
+<br>
+base/gdevp14.c<br>
+xps/xpstile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 17:20:09 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cddd44e1bfcdaba1c289c3d83645613d136e5e3e">cddd44e1bfcdaba1c289c3d83645613d136e5e3e</a>
+<blockquote>
+<p>
+ Bug 702105: Premature EOF Infinite loop in interpolated imagemask stream.<br>
+<br>
+ Fix supplied by Peter Cherepanov. Many thanks.<br>
+<br>
+base/simscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 16:58:06 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=59089ab66b3faaa683bb3aeb0bf856b7aa284f9b">59089ab66b3faaa683bb3aeb0bf856b7aa284f9b</a>
+<blockquote>
+<p>
+ Fix &quot;blue gradients&quot; seen with psdrgb device.<br>
+<br>
+ Since the fill/stroke commit went in, some files have been showing<br>
+ gradients in the wrong colours. For instance this one, spotted in<br>
+ release testing:<br>
+<br>
+ gs -sDEVICE=psdrgb -r72 -dMaxBitmap=2000M -o out%d.psd<br>
+ ../tests_private/comparefiles/Layout.pdf<br>
+<br>
+ Bisecting the fill/stroke branch back, it seems the commit that<br>
+ caused it is the one that stops psdrgb using 'devn' colors.<br>
+<br>
+ This causes gradients to drop to using the color_info.comp_bits and<br>
+ comp_shift information, which the psd devices don't fill in.<br>
+<br>
+ The fix here is to make psd_prn_open call the standard function for<br>
+ setting up these values.<br>
+<br>
+devices/gdevpsd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 14:48:05 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=25cd0c72b98f9efc6968254d1e3a2f33ec376369">25cd0c72b98f9efc6968254d1e3a2f33ec376369</a>
+<blockquote>
+<p>
+ Bug701972 -- fix pdfwrite image downscaling bug<br>
+<br>
+ Calculate the bits on the row using the input image width,<br>
+ not the output image width.<br>
+<br>
+ I had to add an extra argument to a few functions to propagate the info<br>
+ down to where it is needed.<br>
+<br>
+ Note obscure case involving calling psdf_setup_image_to_mask_filter()<br>
+ for a Type 4 image and CompatibilityLevel &lt; 1.3. This change just<br>
+ adds the extra input_width arg, which doesn't change whatever it was<br>
+ doing before. If there is a bug lurking here, it seems unlikely<br>
+ anybody cares?<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+devices/vector/gdevpsdf.h<br>
+devices/vector/gdevpsdi.c<br>
+devices/vector/gdevpsds.c<br>
+devices/vector/gdevpsds.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 09:22:55 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e9523603ac713e365702b81c228edcaaac667dc4">e9523603ac713e365702b81c228edcaaac667dc4</a>
+<blockquote>
+<p>
+ Set the BitsPerComponent for alt stream in pdfwrite<br>
+<br>
+ Add this to the image[1] code where it was missing<br>
+<br>
+ This fixes bug where compressed images were correct, but if<br>
+ -dEncodeGrayImages=false was used, then they were truncated.<br>
+<br>
+ This is related to trimmed/rescaled image for Bug701972.<br>
+ See the sample trim-nobug.pdf attached to that bug.<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 19:25:24 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=924f7ea07c7773a3b1510c6206c9a34227e4b39e">924f7ea07c7773a3b1510c6206c9a34227e4b39e</a>
+<blockquote>
+<p>
+ Bug 702131: Fix overprint in additive spaces.<br>
+<br>
+ We should only enter CompatibleOverprint blend mode if we<br>
+ are in an subtractive space. This stops pdf14 trying to honour<br>
+ drawn_comps even in additive spaces.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 14:02:24 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d98b553c829fad94cd4338910468d2b1b6ee64f7">d98b553c829fad94cd4338910468d2b1b6ee64f7</a>
+<blockquote>
+<p>
+ Fix bug 702079: SEGV with clist and PCL caused by wrong color in images.<br>
+<br>
+ The clist_image_plane_data function was called with the dev_color for a band<br>
+ being type &lt;pattern&gt; when the image had type &lt;pure&gt;, but the code was not<br>
+ calling cmd_put_drawing_color to update the bands for the image because uses_color<br>
+ was false. Add rop3_uses_S(pgs0&gt;log_op) as well as (||) rop3_uses_T(pgs-&gt;log_op)<br>
+ when CombineWitColor is true.<br>
+ Note that extra calls to cmd_put_drawing_color before an image are low cost<br>
+ and do nothing if the current device color is already the same.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 09:48:07 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f55464d5c1640075a67a8b50557a48766783e08">4f55464d5c1640075a67a8b50557a48766783e08</a>
+<blockquote>
+<p>
+ Bug 702128 : clist pdf14 overprint state<br>
+<br>
+ This change ensures that gxdso_overprint_active<br>
+ gets the proper state information.<br>
+<br>
+ When the clist writer is active with the pdf14 device, the writer maintains<br>
+ the current overprint state (as the writer has no access to the pdf14 member variables)<br>
+ and must know what to put in the clist.<br>
+<br>
+ When the clist writer is not present (i.e. page mode), the pdf14 device<br>
+ maintains the information.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 11:46:45 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f1887408860910c19c980f05fd0f8fc93b5f06a1">f1887408860910c19c980f05fd0f8fc93b5f06a1</a>
+<blockquote>
+<p>
+ Bug 702068 continued: Fix smasked images with masks.<br>
+<br>
+ Release testing has shown up another case that needs help.<br>
+<br>
+ gs/bin -sDEVICE=ppmraw -o out.ppm -r300 -dMaxBitmap=1G<br>
+ tests_private/pdf/sumatra/1901_-_tiling_inconsistencies.pdf<br>
+<br>
+ This shows horizontal white lines in the &quot;Next&quot; &quot;Up&quot; &quot;Previous&quot;<br>
+ images at the top of the page.<br>
+<br>
+ Investigation shows this is due to the images having Masks as well<br>
+ as SMasks.<br>
+<br>
+ The Mask image is run to a 1 bit memory device, which means that<br>
+ the gxdso to check if we are in an SMask doesn't work. We work<br>
+ around this by introducing a new flag to gs_pixel_image_common<br>
+ that we can set to indicate that we are within an smask. We set<br>
+ this when we set the masked image up (using the gxdso), and check<br>
+ it when we come to do the gridfitting.<br>
+<br>
+base/gsiparam.h<br>
+base/gxclrast.c<br>
+base/gximage.c<br>
+base/gximage3.c<br>
+base/gxipixel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 19:31:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=51a0be1a6ac3bae2dc1b8bcdd91f58f76b9132c9">51a0be1a6ac3bae2dc1b8bcdd91f58f76b9132c9</a>
+<blockquote>
+<p>
+ Sync deep colour blending with recent changes to 8 bit blending.<br>
+<br>
+ Release testing reveals problems with deep color blending and<br>
+ overprint. This is because changes were made to the 8bit<br>
+ branches of gxblend.c that weren't fully reflected in the<br>
+ 16bit branches.<br>
+<br>
+ Reapply those changes here.<br>
+<br>
+ While we're at it, address some other minor code cleanups,<br>
+ including keeping the ordering of parameters the same between 8<br>
+ and 16 bit to avoid confusion in future.<br>
+<br>
+ The command that showed the inital problem was:<br>
+<br>
+ bin/gswin32c.exe -o out.psd -sDEVICE=psdcmyk16 tests_private/comparefiles/Bug695916.pdf<br>
+<br>
+ where the image of the Earth did not appear.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 13:27:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b7faa941d09db8856378e45d4f5c81b5f93e5f90">b7faa941d09db8856378e45d4f5c81b5f93e5f90</a>
+<blockquote>
+<p>
+ Bug 702130: Fix JPEG memory failure problems.<br>
+<br>
+ The SEGV reported by Memento squeezing (which oddly is at 113600<br>
+ for me, rather than Julian's higher number) is caused by jpeglib<br>
+ calling 'mem_term' on something that failed to 'mem_init'.<br>
+<br>
+ The fix is to use gs_memory_chunk_unwrap rather than target/release,<br>
+ and to check whether mem == cmem to see whether that actually did<br>
+ unwrap.<br>
+<br>
+ This runs us into a further problem, where we are freeing the<br>
+ custom memory descriptor using a gc memory pointer, where it was<br>
+ allocated using a non gc one.<br>
+<br>
+ Rather than just changing the free to use the non gc one, we take<br>
+ the opportunity to ensure that ALL the blocks are in non gc memory.<br>
+ JPEGlib will take poorly to its memory being gc'd away, and none<br>
+ of it needs to subject to gc.<br>
+<br>
+ Credit goes largely to Chris for this fix.<br>
+<br>
+base/sjpegc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 18:44:53 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=619c0231952c20cc14f0eaf603e0cb01aa937eff">619c0231952c20cc14f0eaf603e0cb01aa937eff</a>
+<blockquote>
+<p>
+ Bug 702124 (continued): Avoid FP errors leading to empty pattern cells.<br>
+<br>
+ The limited accuracy of floats can cause pattern cells to appear to<br>
+ be empty when they are not.<br>
+<br>
+ Avoid adding the (often large) tx and ty components in until after we<br>
+ have calculated the width/heights.<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 18:43:00 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8edb1b1e7bb84ff4598819fe078eb0ed2c4948d5">8edb1b1e7bb84ff4598819fe078eb0ed2c4948d5</a>
+<blockquote>
+<p>
+ Bug 702124: Avoid VMerror when a pattern cell height is 0.<br>
+<br>
+ We detect buffer_height == 0 and take it to mean that we can't<br>
+ get a large enough buffer for even a single scanline. Actually<br>
+ it can mean that the pattern cell was empty, which gives a<br>
+ spurious error.<br>
+<br>
+base/gxmclip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 17:08:12 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6beaf42d25f3969b6dc3d8e1b1795017708000c5">6beaf42d25f3969b6dc3d8e1b1795017708000c5</a>
+<blockquote>
+<p>
+ Fix segv after memento squeeze in psdf_DCT_filter().<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=117152 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+devices/vector/gdevpsdu.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 14:54:42 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8d052b3de78b8034daed23e668758c76a8d8c478">8d052b3de78b8034daed23e668758c76a8d8c478</a>
+<blockquote>
+<p>
+ Fixed double free after alloc failure in gs_lib_ctx_set_icc_directory*() (found by memento).<br>
+<br>
+ After we've freed p_ctx-&gt;profiledir we need to set it to NULL otherwise if we<br>
+ return an error it will be freed a second time when we close down.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=101810 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 11:12:37 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dbde03ca37da96a94f4b7a6f0ba22a47a7bc2cb1">dbde03ca37da96a94f4b7a6f0ba22a47a7bc2cb1</a>
+<blockquote>
+<p>
+ Fixed leak on error in gs_fapi_ufst_init() (found by memento).<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=22 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/fapiufst.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 19:48:01 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=08695f8ccebb0d25eb2a5933ecee92281eefc1be">08695f8ccebb0d25eb2a5933ecee92281eefc1be</a>
+<blockquote>
+<p>
+ Bug 702121: PCL performance degradation<br>
+<br>
+ Henry chased the cause down to commit b399f84, an attempt to<br>
+ fix Bug 700624. Looking at that code now, it has a silly typo<br>
+ in it, that was causing it not be triggered in cases when it<br>
+ should have been. Fixed here.<br>
+<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 11:11:40 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e2cdef26db058e84c2cf4dff5f638e669f961b52">e2cdef26db058e84c2cf4dff5f638e669f961b52</a>
+<blockquote>
+<p>
+ Alternative fix for leaks after error in gs_main_init_with_args01()<br>
+<br>
+ When memory squeezing gpdl, Julian found leaks in the gpdl<br>
+ startup of the postscript interpreter when allocations failed<br>
+ in gs_main_init_with_args01().<br>
+<br>
+ Here, we fix the problem by making the psitop.c layer within gpdl<br>
+ call the appropriate shutdown code when we catch the error. This<br>
+ moves gpdl to being consistent with other users of the gs_main<br>
+ layer.<br>
+<br>
+ Memento memory squeezing around the point of failure (event 2035)<br>
+ now shows this to be OK.<br>
+<br>
+ MEMENTO_SQUEEZEAT=2034 ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+gpdl/psitop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 18:47:37 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bbecd13cc34f3dcdcedd726e7de12c988da9794a">bbecd13cc34f3dcdcedd726e7de12c988da9794a</a>
+<blockquote>
+<p>
+ Revert &quot;Fix leaks after error in gs_main_init_with_args01() (found by memento).&quot;<br>
+<br>
+ This reverts commit f35924926cb35f08be5a12ded4a00eb2f42aed3e.<br>
+<br>
+ When memory squeezing gpdl, Julian found leaks in the gpdl<br>
+ startup of the postscript interpreter when allocations failed<br>
+ in gs_main_init_with_args01().<br>
+<br>
+ The initial fix attempted was to make gs_main_init_with_args01()<br>
+ closedown the interpreter on such errors. This worked for the<br>
+ tested cases, but hid problems with non-memory related errors<br>
+ (such as not being able to open a file specified on the command<br>
+ line) when called by gs (rather than gpdl).<br>
+<br>
+ The change attempted resulted in gs_main_finit() being called<br>
+ twice as gs (and other users of the gs_main APIs) expect to have<br>
+ to call gs_main_finit() to shut down after gs_main_init_with_args01()<br>
+ returns an error code.<br>
+<br>
+ The real problem is that gpdl is not doing this in the same way as<br>
+ other callers.<br>
+<br>
+ The gs_main layer has existed for donkeys years, so it's probably<br>
+ best that we just take it as fixed and don't require callers to<br>
+ start changing stuff now.<br>
+<br>
+ Accordingly, I am reverting the attempted fix here, and will<br>
+ try a different fix for it that only affects gpdl shortly.<br>
+<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-11 16:48:24 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=68be233f36feb045e442a18c4f4e4d2ced52b197">68be233f36feb045e442a18c4f4e4d2ced52b197</a>
+<blockquote>
+<p>
+ Change to improve memory and speed (Bug 702099)<br>
+<br>
+ As described in the bug, the patch to disable high-level images in<br>
+ pattern-clists when Interpolate is true is no longer needed (hasn't<br>
+ been since 2015), and it causes the memory and performance problems<br>
+ with this type of file.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 15:10:54 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2dea734a6184668511758fe1929a1d3166df85b6">2dea734a6184668511758fe1929a1d3166df85b6</a>
+<blockquote>
+<p>
+ Bug 702114 non-isolated group in knockout group<br>
+<br>
+ Make sure to use the parents backdrop as our backdrop when we<br>
+ push a non-isolated group that resides in a knockout group.<br>
+ Note though that this apparently is not the case if we are<br>
+ constructing a soft mask.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 10:54:47 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9af467b71198710bc42509e00b730a716b8e4828">9af467b71198710bc42509e00b730a716b8e4828</a>
+<blockquote>
+<p>
+ Bug 702113 Softmask with transfer function<br>
+<br>
+ In a couple spots we look at the value of the background value<br>
+ of the softmask to decide if we really need the softmask in<br>
+ areas outside the group bounding box. These checks were not<br>
+ considering the impact of the transfer function.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
<p><strong>2020-02-12 11:37:33 +0000
</strong>
<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
@@ -227068,7 +228248,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Install.htm b/doc/Install.htm
index 56e4e99f8..5e22348ea 100644
--- a/doc/Install.htm
+++ b/doc/Install.htm
@@ -440,7 +440,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Internal.htm b/doc/Internal.htm
index 3bcbd6096..fa9f9db31 100644
--- a/doc/Internal.htm
+++ b/doc/Internal.htm
@@ -118,7 +118,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Language.htm b/doc/Language.htm
index 21e4c5620..2bc7f53e7 100644
--- a/doc/Language.htm
+++ b/doc/Language.htm
@@ -2025,7 +2025,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Lib.htm b/doc/Lib.htm
index a3c9b51e0..0b8352ce1 100644
--- a/doc/Lib.htm
+++ b/doc/Lib.htm
@@ -1047,7 +1047,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Make.htm b/doc/Make.htm
index c330e2578..c3e6d1ff7 100644
--- a/doc/Make.htm
+++ b/doc/Make.htm
@@ -1527,7 +1527,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/News.htm b/doc/News.htm
index c4d1da936..160178b94 100644
--- a/doc/News.htm
+++ b/doc/News.htm
@@ -95,51 +95,40 @@ overview</a>.
<!-- [1.0 end visible header] ============================================== -->
<!-- [2.0 begin contents] ================================================== -->
-
-<h2><a name="Version9.50"></a>Version 9.51 (2020-02-12)</h2>
+<h2><a name="Version9.51"></a>Version 9.51 (2020-02-28)</h2>
<p> Highlights in this release include:
<ul>
<li>
-<p>The change to version 9.50 (rather than the intended 9.28) follows recognition
-of the extent and importance of the file access control redesign/reimplementation
-outlined below.
+<p>9.51 is primarily a maintainance release, consolidating the changes we introduced
+in 9.50.
</li>
<li>
-<p>The file access control capability (enable with <code>-dSAFER</code>) has been
-completely rewritten, with a ground-up rethink of the design. For more details,
-see: <a href="Use.htm#Safer">SAFER</a>.
-<p>It is important to note that <code>-dSAFER</code> now <strong>only</strong> enables
-the file access controls, and no longer applies restrictions to standard Postscript
-functionality (specifically, restrictions on <code>setpagedevice</code>. If your
-application relies on these Postscript restrictions, see <a href="Use.htm#OldSafer">OLDSAFER</a>,
-and please get in touch, as we do plan to remove those Postscript restrictions
-unless we have reason not to.
-<p><strong>IMPORTANT:</strong> File access controls are now enabled by default. In
-order to run Ghostscript without these controls, see <a href="Use.htm#NoSafer">NOSAFER</a>
-<p><strong>Important Note for Windows Users</strong>: See below under
-<a href="#28_Incompatible_changes">Incompatible Changes</a>
+<p>We have continued our work on code hygiene for this release, with a focus on the
+static analysis tool Coverity (from <a href="https://www.synopsys.com">Synopsys, Inc</a>)
+and we are now maintaining a policy of zero Coverity issues in the Ghostscript/GhostPDL
+source base.
</li>
<li>
-<p>IMPORTANT: We are in the process of forking LittleCMS. LCMS2 is not thread safe, and
-cannot be made thread safe without breaking the ABI. Our fork will be thread safe, and include
-performance enhancements (these changes have all be been offered and rejected upstream). We
-will maintain compatibility between Ghostscript and LCMS2 for a time, but not in perpetuity.
-Our fork will be available as its own package separately from Ghostscript (and MuPDF).
+<p>IMPORTANT: We have forked LittleCMS2 into LittleCMS2mt (the "mt" indicating "multi-thred").
+LCMS2 is not thread safe, and cannot be made thread safe without breaking the ABI. Our fork
+will be thread safe, and include performance enhancements (these changes have all be been
+offered and rejected upstream). We will maintain compatibility between Ghostscript and LCMS2
+for a time, but not in perpetuity. If there is sufficient interest, our fork will be
+available as its own package separately from Ghostscript (and MuPDF).
</li>
<li>
<p>The usual round of bug fixes, compatibility changes, and incremental improvements.
</li>
-<li>
-<p>Special thanks to Akira Kakuto, Paul Wessel, William Bader, Nelson H. F. Beebe and
-everyone else who put time and effort into testing this new release.
-</li>
</ul>
<p>For a list of open issues, or to report problems,
please visit <a href="http://bugs.ghostscript.com/">bugs.ghostscript.com</a>.
-<h3><a name="9.50_Incompatible_changes"></a>Incompatible changes</h3>
+<h3><a name="9.51_Incompatible_changes"></a>Incompatible changes</h3>
+<h4>Included below are incompatible changes from recent releases (the
+specific release in question listed in parentheses). We include these,
+for now, as we are aware that not everyone upgrades with every release.</h4>
<ul>
<li>
-<p>There are a couple of subtle incompatibilities between the old and new SAFER
+<p>(9.50) There are a couple of subtle incompatibilities between the old and new SAFER
implementations. Firstly, as mentioned above, SAFER now leaves standard Postcript
functionality unchanged (except for the file access limitations). Secondly,
the interaction with <code>save</code>&sol;<code>restore</code> operations, see
@@ -152,9 +141,7 @@ change in behaviour compared to the old code which, on Windows, was case
in that it now supports (although does not enforce) case sensitivity.
</li>
<li>
-<p>The following is not strictly speaking new to 9.50, as not much has changed since
-9.27 in this area, but for those who don't upgrade with every release:
-<p>The process of &quot;tidying&quot; the Postscript name space should have removed
+<p>(9.27) The process of &quot;tidying&quot; the Postscript name space should have removed
only non-standard and undocumented operators. Nevertheless, it is possible that
any integrations or utilities that rely on those non-standard and undocumented
operators may stop working, or may change behaviour.
@@ -193,7 +180,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Ps-style.htm b/doc/Ps-style.htm
index ebfc144ed..d69a693dc 100644
--- a/doc/Ps-style.htm
+++ b/doc/Ps-style.htm
@@ -549,7 +549,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Ps2epsi.htm b/doc/Ps2epsi.htm
index bf6a056f4..afd0e0bf9 100644
--- a/doc/Ps2epsi.htm
+++ b/doc/Ps2epsi.htm
@@ -229,7 +229,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Psfiles.htm b/doc/Psfiles.htm
index 7566c79d8..d655939cf 100644
--- a/doc/Psfiles.htm
+++ b/doc/Psfiles.htm
@@ -894,7 +894,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Readme.htm b/doc/Readme.htm
index 2445db0ae..7f3aae0ab 100644
--- a/doc/Readme.htm
+++ b/doc/Readme.htm
@@ -581,7 +581,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Release.htm b/doc/Release.htm
index c0d62d119..da4e2d39f 100644
--- a/doc/Release.htm
+++ b/doc/Release.htm
@@ -845,7 +845,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/SavedPages.htm b/doc/SavedPages.htm
index 91c8390e1..126561881 100644
--- a/doc/SavedPages.htm
+++ b/doc/SavedPages.htm
@@ -317,7 +317,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Source.htm b/doc/Source.htm
index f70edb8f6..ea3ace958 100644
--- a/doc/Source.htm
+++ b/doc/Source.htm
@@ -465,7 +465,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Unix-lpr.htm b/doc/Unix-lpr.htm
index 0b20bb2a2..e40b7b0ea 100644
--- a/doc/Unix-lpr.htm
+++ b/doc/Unix-lpr.htm
@@ -304,7 +304,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Use.htm b/doc/Use.htm
index 7808bbc48..e8015d1dd 100644
--- a/doc/Use.htm
+++ b/doc/Use.htm
@@ -5265,7 +5265,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/VectorDevices.htm b/doc/VectorDevices.htm
index ec7613557..562c57e14 100644
--- a/doc/VectorDevices.htm
+++ b/doc/VectorDevices.htm
@@ -1410,7 +1410,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/WhatIsGS.htm b/doc/WhatIsGS.htm
index 0e25b825a..20a07cf64 100644
--- a/doc/WhatIsGS.htm
+++ b/doc/WhatIsGS.htm
@@ -189,7 +189,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/gs-vms.hlp b/doc/gs-vms.hlp
index e98b9a55f..7c3e726e1 100644
--- a/doc/gs-vms.hlp
+++ b/doc/gs-vms.hlp
@@ -1,6 +1,6 @@
1 gs
gs - GPL Ghostscript interpreter/previewer
-! Ghostscript version 9.51, 12 February 2020
+! Ghostscript version 9.51, 28 February 2020
Usage:
$ gs [options] [file ...]
diff --git a/doc/sample_downscale_device.htm b/doc/sample_downscale_device.htm
index d71e2ddd4..04f160911 100644
--- a/doc/sample_downscale_device.htm
+++ b/doc/sample_downscale_device.htm
@@ -263,7 +263,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
<!--FINISH EDITING HERE-->
diff --git a/doc/subclass.htm b/doc/subclass.htm
index 62896245b..a837b0f12 100644
--- a/doc/subclass.htm
+++ b/doc/subclass.htm
@@ -812,7 +812,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/thirdparty.htm b/doc/thirdparty.htm
index d116c203c..90babef09 100644
--- a/doc/thirdparty.htm
+++ b/doc/thirdparty.htm
@@ -253,7 +253,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.51, 12 February 2020
+<small>Ghostscript version 9.51, 28 February 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/man/dvipdf.1 b/man/dvipdf.1
index f6273ba84..5d8f8a7f8 100644
--- a/man/dvipdf.1
+++ b/man/dvipdf.1
@@ -1,4 +1,4 @@
-.TH DVIPDF 1 "12 February 2020" 9.51 Ghostscript \" -*- nroff -*-
+.TH DVIPDF 1 "28 February 2020" 9.51 Ghostscript \" -*- nroff -*-
.SH NAME
dvipdf \- Convert TeX DVI file to PDF using ghostscript and dvips
.SH SYNOPSIS
diff --git a/man/gs.1 b/man/gs.1
index 56d2d4667..082946a3e 100644
--- a/man/gs.1
+++ b/man/gs.1
@@ -1,4 +1,4 @@
-.TH GS 1 "12 February 2020" 9.51 Ghostscript \" -*- nroff -*-
+.TH GS 1 "28 February 2020" 9.51 Ghostscript \" -*- nroff -*-
.SH NAME
gs \- Ghostscript (PostScript and PDF language interpreter and previewer)
.SH SYNOPSIS
diff --git a/man/gslp.1 b/man/gslp.1
index 6f772e12c..6bdeece85 100644
--- a/man/gslp.1
+++ b/man/gslp.1
@@ -1,4 +1,4 @@
-.TH GSLP 1 "12 February 2020" 9.51 Ghostscript \" -*- nroff -*-
+.TH GSLP 1 "28 February 2020" 9.51 Ghostscript \" -*- nroff -*-
.SH NAME
gslp \- Format and print text using ghostscript
.br
diff --git a/man/gsnd.1 b/man/gsnd.1
index 28c00b6bf..210265e82 100644
--- a/man/gsnd.1
+++ b/man/gsnd.1
@@ -1,4 +1,4 @@
-.TH GSND 1 "12 February 2020" 9.51 Ghostscript \" -*- nroff -*-
+.TH GSND 1 "28 February 2020" 9.51 Ghostscript \" -*- nroff -*-
.SH NAME
gsnd \- Run ghostscript (PostScript and PDF engine) without display
.SH SYNOPSIS
diff --git a/man/pdf2dsc.1 b/man/pdf2dsc.1
index a04e5397a..c1017af41 100644
--- a/man/pdf2dsc.1
+++ b/man/pdf2dsc.1
@@ -1,4 +1,4 @@
-.TH PDF2DSC 1 "12 February 2020" 9.51 "Ghostscript Tools" \" -*- nroff -*-
+.TH PDF2DSC 1 "28 February 2020" 9.51 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
pdf2dsc \- generate a PostScript page list of a PDF document
.SH SYNOPSIS
diff --git a/man/pdf2ps.1 b/man/pdf2ps.1
index 6d29c9ce0..b727620fe 100644
--- a/man/pdf2ps.1
+++ b/man/pdf2ps.1
@@ -1,4 +1,4 @@
-.TH PDF2PS 1 "12 February 2020" 9.51 "Ghostscript Tools" \" -*- nroff -*-
+.TH PDF2PS 1 "28 February 2020" 9.51 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
pdf2ps \- Ghostscript PDF to PostScript translator
.SH SYNOPSIS
diff --git a/man/pf2afm.1 b/man/pf2afm.1
index 4cd4ec56f..3c152c2b4 100644
--- a/man/pf2afm.1
+++ b/man/pf2afm.1
@@ -1,4 +1,4 @@
-.TH PF2AFM 1 "12 February 2020" 9.51 Ghostscript \" -*- nroff -*-
+.TH PF2AFM 1 "28 February 2020" 9.51 Ghostscript \" -*- nroff -*-
.SH NAME
pf2afm \- Make an AFM file from Postscript (PFB/PFA/PFM) font files using ghostscript
.SH SYNOPSIS
diff --git a/man/pfbtopfa.1 b/man/pfbtopfa.1
index 6861c60d3..8bc080b8b 100644
--- a/man/pfbtopfa.1
+++ b/man/pfbtopfa.1
@@ -1,4 +1,4 @@
-.TH PFBTOPFA 1 "12 February 2020" 9.51 Ghostscript \" -*- nroff -*-
+.TH PFBTOPFA 1 "28 February 2020" 9.51 Ghostscript \" -*- nroff -*-
.SH NAME
pfbtopfa \- Convert Postscript .pfb fonts to .pfa format using ghostscript
.SH SYNOPSIS
diff --git a/man/printafm.1 b/man/printafm.1
index faa8bf84e..de58ef139 100644
--- a/man/printafm.1
+++ b/man/printafm.1
@@ -1,4 +1,4 @@
-.TH PRINTAFM 1 "12 February 2020" 9.51 Ghostscript \" -*- nroff -*-
+.TH PRINTAFM 1 "28 February 2020" 9.51 Ghostscript \" -*- nroff -*-
.SH NAME
printafm \- Print the metrics from a Postscript font in AFM format using ghostscript
.SH SYNOPSIS
diff --git a/man/ps2ascii.1 b/man/ps2ascii.1
index 7452187cd..752b7a12b 100644
--- a/man/ps2ascii.1
+++ b/man/ps2ascii.1
@@ -1,4 +1,4 @@
-.TH PS2ASCII 1 "12 February 2020" 9.51 "Ghostscript Tools" \" -*- nroff -*-
+.TH PS2ASCII 1 "28 February 2020" 9.51 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
ps2ascii \- Ghostscript translator from PostScript or PDF to ASCII
.SH SYNOPSIS
diff --git a/man/ps2epsi.1 b/man/ps2epsi.1
index 5940f5ead..44f3856a6 100644
--- a/man/ps2epsi.1
+++ b/man/ps2epsi.1
@@ -1,4 +1,4 @@
-.TH PS2EPSI 1 "12 February 2020" 9.51 "Ghostscript Tools" \" -*- nroff -*-
+.TH PS2EPSI 1 "28 February 2020" 9.51 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
ps2epsi \- generate conforming Encapsulated PostScript
.SH SYNOPSIS
diff --git a/man/ps2pdf.1 b/man/ps2pdf.1
index ac8c8479f..a736448a5 100644
--- a/man/ps2pdf.1
+++ b/man/ps2pdf.1
@@ -1,4 +1,4 @@
-.TH PS2PDF 1 "12 February 2020" 9.51 Ghostscript \" -*- nroff -*-
+.TH PS2PDF 1 "28 February 2020" 9.51 Ghostscript \" -*- nroff -*-
.SH NAME
ps2pdf \- Convert PostScript to PDF using ghostscript
.br
diff --git a/man/ps2pdfwr.1 b/man/ps2pdfwr.1
index cef461c8f..b49be39c3 100644
--- a/man/ps2pdfwr.1
+++ b/man/ps2pdfwr.1
@@ -1,4 +1,4 @@
-.TH PS2PDFWR 1 "12 February 2020" 9.51 Ghostscript \" -*- nroff -*-
+.TH PS2PDFWR 1 "28 February 2020" 9.51 Ghostscript \" -*- nroff -*-
.SH NAME
ps2pdfwr \- Convert PostScript to PDF without specifying CompatibilityLevel, using ghostscript
.SH SYNOPSIS
diff --git a/man/ps2ps.1 b/man/ps2ps.1
index c48f22369..d125ef4cb 100644
--- a/man/ps2ps.1
+++ b/man/ps2ps.1
@@ -1,4 +1,4 @@
-.TH PS2PS 1 "12 February 2020" 9.51 "Ghostscript Tools" \" -*- nroff -*-
+.TH PS2PS 1 "28 February 2020" 9.51 "Ghostscript Tools" \" -*- nroff -*-
.SH NAME
ps2ps, eps2eps \- Ghostscript PostScript "distiller"
.SH SYNOPSIS