summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Liddell <chris.liddell@artifex.com>2019-08-15 15:54:04 +0100
committerChris Liddell <chris.liddell@artifex.com>2019-09-05 09:17:44 +0100
commitf560f3c468ac187eca8cd55ee46a46e2924e0924 (patch)
tree94969a9e5928384128a7305c21a82b2ffce51198
parentcc86598152465c85dfca5ba265608931672f730f (diff)
downloadghostpdl-f560f3c468ac187eca8cd55ee46a46e2924e0924.tar.gz
Doc updates, changelog, news etcghostpdl-9.28rc2
Update to note explicitly case sensitivity on Windsows In News.htm and History9.htm
-rw-r--r--doc/History9.htm6633
-rw-r--r--doc/News.htm52
-rw-r--r--doc/Use.htm1
3 files changed, 6638 insertions, 48 deletions
diff --git a/doc/History9.htm b/doc/History9.htm
index 703a69caf..a1c275db4 100644
--- a/doc/History9.htm
+++ b/doc/History9.htm
@@ -79,6 +79,7 @@ TOC to see how to edit it for visual conciseness.
<h2>Table of contents</h2>
<blockquote><ul>
+<li><a href="#Version9.28">Version 9.28 (2019-09-05)</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>
<li><a href="#Version9.25">Version 9.25 (2018-09-13)</a>
@@ -132,35 +133,24 @@ overview</a>.
<!-- [1.0 end visible header] ============================================== -->
<!-- [2.0 begin contents] ================================================== -->
-<h2><a name="Version9.27"></a>Version 9.27 (2019-04-03)</h2>
-<p><strong>IMPORTANT:</strong> It is our intention, within the next 12 months (ideally sooner,
-in time for the next release) to make SAFER the default mode of operation. For many users
-this will have no effect, since they use SAFER explicitly, but some niche uses which rely
-on SAFER being disabled may need to start explicitly adding the &quot;-dNOSAFER&quot; option.
+<h2><a name="Version9.28"></a>Version 9.28 (2019-09-05)</h2>
<p> Highlights in this release include:
<ul>
<li>
-<p>We have extensively cleaned up the Postscript name space: removing access to internal
-and/or undocumented Postscript operators, procedures and data. This has benefits for security
-and maintainability.
-</li>
-<li>
-<p>We have added a new &quot;product&quot;: &quot;gpdl&quot;. This is a rethink/redesign of the old
-&quot;language_switch&quot; product (pspcl6), and includes all the interpreters we
-develop based on the Ghostscript graphics library: Postscript, PDF, PCL6, PXL and XPS.
-This is experimental, and should be considered of beta testing quality, and thus is not
-built by default: it can be built by using the &quot;experimental&quot; target.
-<p><code>gpdl</code> uses a heuristic to judge the file type being passed to it. In general,
-it supports most of the widely used command line options for each interpreter, but
-compatibility is not complete (the practicalities of swapping interpreters means it is
-unlikely that full parity of command line options will be possible).
-</li>
-<li>
-<p>Fontmap can now reference invidual fonts in a TrueType Collection for font subsitution.
-Previously, a Fontmap entry could only reference a TrueType collection and use the default
-(first) font. Now, the Fontmap syntax allows for specifying a specific index in a TTC.
-See the comments at the top of (the default) Fontmap.GS for details.
+<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>
</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
@@ -174,9 +164,24 @@ Our fork will be available as its own package separately from Ghostscript (and M
</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.27_Incompatible_changes"></a>Incompatible changes</h3>
+<h3><a name="9.28_Incompatible_changes"></a>Incompatible changes</h3>
<ul>
<li>
+<p>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
+<a href="Use.htm#Safer">SAFER</a>.
+<p><strong>Important Note for Windows Users</strong>:
+<br>
+The file/path pattern matching is case sensitive, even on Windows. This is a
+change in behaviour compared to the old code which, on Windows, was case
+<i>in</i>sensitive. This is in recognition of changes in Windows behaviour,
+in that it now supports (although does not enforce) case sensitivity.
+</li>
+<li>
+<p>The following is not strictly speaking new to 9.28, 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
only non-standard and undocumented operators. Nevertheless, it is possible that
any integrations or utilities that rely on those non-standard and undocumented
@@ -190,6 +195,6582 @@ still work as previously for Postscript files. For PDF files, users are encourag
at <a href="https://www.mupdf.com">MuPDF</a>.
</li>
</ul>
+<h3><a name="9.28_changelog"></a>Changelog</h3>
+<p><strong>2019-08-15 15:54:04 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e62f684be3d80bb5599a669ddca3ee1b544100d8">e62f684be3d80bb5599a669ddca3ee1b544100d8</a>
+<blockquote>
+<p>
+ Doc updates, changelog, news etc<br>
+<br>
+ Update to note explicitly case sensitivity on Windsows<br>
+<br>
+ In News.htm and History9.htm<br>
+<br>
+doc/History9.htm<br>
+doc/News.htm<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-05 09:09:38 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cc86598152465c85dfca5ba265608931672f730f">cc86598152465c85dfca5ba265608931672f730f</a>
+<blockquote>
+<p>
+ Date for 9.28 rc2<br>
+<br>
+base/gscdefs.h<br>
+base/version.mak<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2018-10-31 20:22:11 +0100
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=350a5cd8b7bddee3fa914c914dd40a685fed54e7">350a5cd8b7bddee3fa914c914dd40a685fed54e7</a>
+<blockquote>
+<p>
+ Bug 700088: Report error if all wanted J2K components are not decoded.<br>
+<br>
+ Ghostscript used to attempt to use even the undecoded components.<br>
+ The source code for upstream's opj_decompress tool avoided this by<br>
+ a workaround along with a comment indicating that this ought to be<br>
+ done in the library (so all clients, e.g. Ghostscript will benefit<br>
+ from it). With this commit the library will error out if not all<br>
+ requested components are successfully decoded. Thus Ghostscript<br>
+ will no longer crash.<br>
+<br>
+ Reported in https://github.com/uclouvain/openjpeg/issues/1158<br>
+ sent upstream in https://github.com/uclouvain/openjpeg/pull/1164<br>
+ and finally committed in e66125fe260deee49fdf6e9978d9bd29871dd5bb<br>
+<br>
+openjpeg/src/bin/jp2/opj_decompress.c<br>
+openjpeg/src/lib/openjp2/j2k.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-03 12:34:55 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b944e875baed62e718eee8e7ad2b351cd4f4aa07">b944e875baed62e718eee8e7ad2b351cd4f4aa07</a>
+<blockquote>
+<p>
+ Undo commit 95f7befcec1b30fd5014c8ad616485d32901ce33 for release<br>
+<br>
+ Proper handling of the page group color space is going to require<br>
+ a more complex solution whereby we ensure that we do the final<br>
+ alpha blending in the page group color space and not the target<br>
+ device color space.<br>
+<br>
+base/gstrans.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-03 08:52:16 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ebfe16357f3484209e69d6788cc52b20dbdb81a0">ebfe16357f3484209e69d6788cc52b20dbdb81a0</a>
+<blockquote>
+<p>
+ Add -sBlendColorProfile into Use.htm<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-03 18:15:56 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bbdfaa56b00f2ba556476f0265e65e4ad370f641">bbdfaa56b00f2ba556476f0265e65e4ad370f641</a>
+<blockquote>
+<p>
+ Avoid potential UMR with arg checking in arg sanitization code.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-02 17:16:45 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=00d4696ea2de6c48a57d5a4ce0c3bbfd99201e3a">00d4696ea2de6c48a57d5a4ce0c3bbfd99201e3a</a>
+<blockquote>
+<p>
+ Proper fix for deep color overprint.<br>
+<br>
+ The previous fix confused memset and memcpy. Properly write the<br>
+ (native endian) 16 bit color values into the big endian buffer.<br>
+<br>
+base/gsovrc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-02 12:59:33 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c6d448b3fe616fdc2ba1e52766c9a4417e4e738f">c6d448b3fe616fdc2ba1e52766c9a4417e4e738f</a>
+<blockquote>
+<p>
+ Fix deep color mattes.<br>
+<br>
+ As seen with the content vanishing when rendering<br>
+ tests_private/pdf/sumatra/uninitialized_value_with_JPX_images.pdf<br>
+ to psdcmyk16. The Softmask on the image has a Matte of [1,1,1]<br>
+ and the calculations in the current code overflow, meaning that<br>
+ it comes out as completely white.<br>
+<br>
+ We resort to 64bit to avoid the overflow. Mattes are vanishingly<br>
+ rare, so speed shouldn't be an issue. We can revisit if we ever<br>
+ find a case that matters.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-31 12:45:47 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4c1f255c2e825ab5e0a3d0f7bfa88538c7cbb912">4c1f255c2e825ab5e0a3d0f7bfa88538c7cbb912</a>
+<blockquote>
+<p>
+ Update overprint hl_color code to cope with 16bit devices too.<br>
+<br>
+base/gsovrc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-31 12:16:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=373787ee145e906c8d19d5ccda84b4f267db2010">373787ee145e906c8d19d5ccda84b4f267db2010</a>
+<blockquote>
+<p>
+ Fix deep color transparency overprint.<br>
+<br>
+ The component copy loop at the end of the blend could fail to copy<br>
+ enough entries.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-30 15:16:34 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=361c4dd1e18ca0675173c0ad0104ffb910e93bb4">361c4dd1e18ca0675173c0ad0104ffb910e93bb4</a>
+<blockquote>
+<p>
+ Avoid overflow in deep color luminosity calculations.<br>
+<br>
+ Resort to 64bit as scale calculations are not constrained<br>
+ to the usual 16bit range.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-29 10:02:49 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=51d57fafbdc021c8c73475db505156f77e96ce39">51d57fafbdc021c8c73475db505156f77e96ce39</a>
+<blockquote>
+<p>
+ Fix clearing of the drag and drop file list<br>
+<br>
+ Because we have to store the list of file names from drag and drop events, in<br>
+ order to correctly add and remove them from the permit file read list, we also<br>
+ want to clear the lists before we destroy the &quot;text&quot; window object.<br>
+<br>
+ The problem is, this happens after we shutdown Ghostscript and unload the dll.<br>
+<br>
+ This moves that clearing of the list into function that we call before we<br>
+ shut down.<br>
+<br>
+psi/dwmain.c<br>
+psi/dwtext.c<br>
+psi/dwtext.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-28 10:14:52 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ad0532e379a9eb6eb8a6fc0a6305679b25cd9ecb">ad0532e379a9eb6eb8a6fc0a6305679b25cd9ecb</a>
+<blockquote>
+<p>
+ Fix path permissions added from cidfmap.<br>
+<br>
+ From the cidfmap, we accumulate a list of unique directory paths a we process<br>
+ cidfmap and then add them - when I did that code, I forgot that to allow access<br>
+ to the directory, we need a trailing directory separator.<br>
+<br>
+ Add that before calling .addcontrolpath<br>
+<br>
+Resource/Init/gs_cidfm.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 16:49:30 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f0fedf1f77a9fe70627355b45fdb809e83df3568">f0fedf1f77a9fe70627355b45fdb809e83df3568</a>
+<blockquote>
+<p>
+ Fix font file finding with -P<br>
+<br>
+ In trying to reproduce the issue that inspired commit dea69cd04964, I noticed<br>
+ that font file searching wasn't working correctly with -P specified on the<br>
+ command line.<br>
+<br>
+ Previously, it could just end up with us not finding a font we should have, but<br>
+ with dea69cd04964 it would result in a typecheck error.<br>
+<br>
+ This ensures the stack is always how it should be after the findlibfile<br>
+ call<br>
+<br>
+Resource/Init/gs_fonts.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 16:10:03 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5c28996d19d5e10cb177e72c47037ec0c7b3e4d5">5c28996d19d5e10cb177e72c47037ec0c7b3e4d5</a>
+<blockquote>
+<p>
+ Make it clear: file/path matching is always case sensitive<br>
+<br>
+ even on Windows.<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-29 19:50:08 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=24532ce9371fd1f69dd343cbd6ac8187a86c5c96">24532ce9371fd1f69dd343cbd6ac8187a86c5c96</a>
+<blockquote>
+<p>
+ Fix overflow in 16bit blending calculations.<br>
+<br>
+ The blending code uses the following construction in<br>
+ several places:<br>
+<br>
+ src_scale = ...; /* a value between 0 and 0x10000 */<br>
+ tmp = (y-z) * src_scale + 0x8000;<br>
+ foo = x + (tmp&gt;&gt;16);<br>
+<br>
+ Where x,y,z, are all expected to be in the 0...0xffff range.<br>
+<br>
+ Due to y-z having a sign bit, this can overflow a 32 bit tmp.<br>
+<br>
+ We therefore sacrifice a bit of accuracy in src_scale to get<br>
+ correctness.<br>
+<br>
+base/gxblend.c<br>
+base/gxblend1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-28 14:13:27 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ca52028b90a09d056190548c41ae0b9a9fbadb4e">ca52028b90a09d056190548c41ae0b9a9fbadb4e</a>
+<blockquote>
+<p>
+ Remove outdated FIXME's.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-28 12:50:36 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bd59dc145252282d8f586c36082e63a0eba95c15">bd59dc145252282d8f586c36082e63a0eba95c15</a>
+<blockquote>
+<p>
+ Bug 701446: Avoid divide by zero in shading.<br>
+<br>
+ The previous commit for this bug was enough to solve the problem<br>
+ for ppmraw, but not, it seems, for other devices. This addresses<br>
+ the division by zero more directly.<br>
+<br>
+base/gxshade6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 20:13:02 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9a32a379933f4ba27ff1ad5734ec8c24c42eb513">9a32a379933f4ba27ff1ad5734ec8c24c42eb513</a>
+<blockquote>
+<p>
+ Fix deep color transparency saturation blending.<br>
+<br>
+ Problem seen with:<br>
+<br>
+ tests_private/pdf/PDF_1.7_FTS/fts_25_2513.pdf.psdcmyk16.300.1<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 17:45:57 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=68af4dbc7ca2d6bfdbe938b840799cb8883c973e">68af4dbc7ca2d6bfdbe938b840799cb8883c973e</a>
+<blockquote>
+<p>
+ Bug 701446: Avoid division by zero in gx_shade_trapezoid<br>
+<br>
+ Remove some incorrect clipping code.<br>
+<br>
+base/gxshade6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 15:54:36 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4be058791ae19131f19a8303364be53619abc280">4be058791ae19131f19a8303364be53619abc280</a>
+<blockquote>
+<p>
+ Exit early from gx_shade_trapezoid in more cases.<br>
+<br>
+ A zero height trap isn't plotted, so we can bail out early in<br>
+ that case.<br>
+<br>
+base/gxshade6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 17:02:03 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9423e84178071f16b83d18412b22b0b479b1938b">9423e84178071f16b83d18412b22b0b479b1938b</a>
+<blockquote>
+<p>
+ Fix deep colour transparency &quot;uncompositing&quot;.<br>
+<br>
+ Uncompositing a group uses a scale factor that is greater in range<br>
+ than we'd like; we need to resort to 64bit to do this to avoid<br>
+ losing accuracy.<br>
+<br>
+ This solves problems seen in:<br>
+<br>
+ tests_private/comparefiles/Bug689918.pdf.psdcmyk16.300.1<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 14:26:41 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=131768114453972469296658b795406b79630538">131768114453972469296658b795406b79630538</a>
+<blockquote>
+<p>
+ Handle relative FONTPATH values<br>
+<br>
+ Prior to 9.21 (specifically: 8abd22010eb4db0fb1b10e430d5f5d83e015ef70), relative<br>
+ paths for FONTPATH worked, but did so due to a logic fault with how we search<br>
+ for &quot;lib&quot; files.<br>
+<br>
+ When attempting to open file names specified on the command line, we used a<br>
+ flag set in the command line handling (starting_arg_file) to know whether the<br>
+ lib file searching logic should try to open the file name directly (as well as<br>
+ trying the file combined with each path in the search path).<br>
+<br>
+ In versions prior to commit 8abd22010eb4 that flag (starting_arg_file) could<br>
+ remain set to true, even after the command line file(s) had been opened. This<br>
+ represented a (minor) security risk. Commit 8abd22010eb4 ensured the flag was<br>
+ properly (re)set, and that caused relative paths for FONTPATH stopped working.<br>
+<br>
+ Rather than reintroduce the security risk, update the code that checks whether<br>
+ the font files exist so it explicitly tries the file name directly, rather than<br>
+ assuming .libfile (or findlibfile, in this case) does that automatically.<br>
+<br>
+ Also remove an extraneous (but benign) dup of the font name.<br>
+<br>
+Resource/Init/gs_fonts.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 15:27:05 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=98310063bdbe8c67bcfe84e2c648cfa286a05738">98310063bdbe8c67bcfe84e2c648cfa286a05738</a>
+<blockquote>
+<p>
+ pdfwrite - fix corner case with Color Conversion<br>
+<br>
+ Bug #701456 &quot;Ghostscript creates broken PDF file after color conversion&quot;<br>
+<br>
+ The test file is, essentially weird. The image on page 3 is not a single<br>
+ image, its a series of images, all of which are in a /Indexed /DeviceRGB<br>
+ colour space.<br>
+<br>
+ In addition, these images are drawn on *top* of another set of images<br>
+ (thereby completely obscuring them). These images are also drawn in<br>
+ /Indexed /DeviceRGB. However, these images are in fact monochrome, the<br>
+ Indexed space consists of 2 colours. This means that (highly unusually)<br>
+ we have a DeviceRGB image with 1 Bit Per Component.<br>
+<br>
+ This caused problems for the pdfwrite compression filter chooser because<br>
+ it chose (and configured) a compression scheme suitable for 1 BPC data<br>
+ and then actually output 8 BPC data. This led to the compression filter<br>
+ writing too little data.<br>
+<br>
+ Fix this here by setting the BPC to 8 if we are doing colour conversion,<br>
+ and have the colour conversion setup code use the original value in the<br>
+ image enumerator (the conversion code *does* need to know the input is<br>
+ 1 BPC).<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-27 11:36:35 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aee3b922087674ddd7c64444988018fafc3da127">aee3b922087674ddd7c64444988018fafc3da127</a>
+<blockquote>
+<p>
+ PDF interpreter - more /Mask strangeness in Acrobat<br>
+<br>
+ Bug #701468 &quot; More weirdness with images containing invalid /Mask values&quot;<br>
+<br>
+ In order to render this file as per Acrobat, we need to ignore the /Mask<br>
+ array. However, in order to render bug 689717 correctly we need to fix<br>
+ the /Mask array.<br>
+<br>
+ Both cases are 1 BitsPerComponent DeviceGray images, the only difference<br>
+ is the actual /Mask values. Bug 689717 has [255 255] while 701468 has<br>
+ [243 255]. We can differentiate based on whether we have DeviceGray<br>
+ 1 BPC image, where the Mask values are not the same. In the case they<br>
+ are different we use the existing technique of calculating the maximum<br>
+ value and using that (for both, so there is no range). Where there is a<br>
+ range (ie not a single colour) this is clearly unusable in a 2-colour<br>
+ image, so ignore the /Mask altogether.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 15:28:33 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ad22dcaa078fd16f2ac395f65b6ad87ba24c8903">ad22dcaa078fd16f2ac395f65b6ad87ba24c8903</a>
+<blockquote>
+<p>
+ Fix deep colour knockout logic.<br>
+<br>
+ Problem seen with:<br>
+<br>
+ tests_private/pdf/PDF_1.7_FTS/fts_25_2507.pdf.psdcmyk16.72.0<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 14:34:46 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4cda7bfc8cc8c5c4dcd36167191012aa379100ac">4cda7bfc8cc8c5c4dcd36167191012aa379100ac</a>
+<blockquote>
+<p>
+ Squash a couple of warnings.<br>
+<br>
+base/gdevmem.c<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 14:01:39 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7b5166b5c65703abb02c15a31c9f8341f54d1470">7b5166b5c65703abb02c15a31c9f8341f54d1470</a>
+<blockquote>
+<p>
+ Fix SoftLight blending in deep color transparency.<br>
+<br>
+ As seen with:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -r72 -dMaxBitmap=80000000 -o out.psd<br>
+ tests_private/pdf/PDF_1.7_FTS/fts_09_0919.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-26 11:28:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5875be5edeb034787a11760c9330cac039f13044">5875be5edeb034787a11760c9330cac039f13044</a>
+<blockquote>
+<p>
+ Fix problems with pngalpha and deep color transparency filling.<br>
+<br>
+ The pngalpha device is created with a depth of 32, with 3 color<br>
+ components; this was confusing pdf14 into thinking that more<br>
+ than 8 bits per color were being used, and so deep color buffers<br>
+ were required.<br>
+<br>
+ To fix this we update the logic to be smarter; in cases where we<br>
+ don't have a clear determination based on bits alone, we look<br>
+ at the max_color and max_gray values. Because this code is now<br>
+ more complex than before, we pull it into a shared function.<br>
+<br>
+base/gdevdflt.c<br>
+base/gdevmem.c<br>
+base/gdevp14.c<br>
+base/gdevprn.c<br>
+base/gsptype1.c<br>
+base/gstrans.c<br>
+base/gxclthrd.c<br>
+base/gxdevcli.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-23 15:06:17 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6e7283fa5bcea9ffbe4bb9da440dd8fa4820e4d6">6e7283fa5bcea9ffbe4bb9da440dd8fa4820e4d6</a>
+<blockquote>
+<p>
+ Fix deep color transparency issue.<br>
+<br>
+ Fix overflow in art_pdf_composite_knockout_16, seen in:<br>
+<br>
+ tests_private/comparefiles/Bug690546.pdf.psdcmyk16.72.0<br>
+<br>
+base/gdevp14.c<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 18:24:49 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=628c9741323ea69b0be8e4008a81b1db3d644ab8">628c9741323ea69b0be8e4008a81b1db3d644ab8</a>
+<blockquote>
+<p>
+ Fix deep color transparent pattern problems.<br>
+<br>
+ Transparency buffers are held as native endian. Pattern cache<br>
+ tiles are held as big endian. When we make pattern cache tiles<br>
+ from transparency buffers we therefore need a conversion.<br>
+<br>
+base/gdevp14.c<br>
+base/gxblend.c<br>
+base/gxp1fill.c<br>
+base/gxpcolor.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-25 19:35:14 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=be4da9d67cbec784be740086681f96a63496ae48">be4da9d67cbec784be740086681f96a63496ae48</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Do not output LUTs with CUPS_DEBUG set<br>
+<br>
+ This change lets complete LUTs in the debug output only be listed when<br>
+ CUPS_DEBUG2 is set and not already with CUPS_DEBUG.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-25 19:08:52 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0e28c843e56d1be4638bf9d84a499794534ea0d9">0e28c843e56d1be4638bf9d84a499794534ea0d9</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Prefer the page size requested by user<br>
+<br>
+ Without special scaling/cropping options (&quot;fit-to-page&quot;, &quot;fill&quot;,<br>
+ &quot;crop-to-fitĪ…, ...) PDF and PostScript files printed with CUPS will be<br>
+ printed with the page sizes of the document's pages and not the size<br>
+ requested by the user via the &quot;PageSize&quot; or &quot;media&quot; option. This<br>
+ allows correct printing of jobs with differently sized pages on<br>
+ printers which have the appropriate sizes loaded without need of<br>
+ manual intervention. Therefore the CUPS output device is matching each<br>
+ input page against the sizes listed in the PPD to generate a correct<br>
+ page geometry for the printer for each page.<br>
+<br>
+ Problem is if there are several equally-sized page size entries in the<br>
+ PPD. Without further guiding always the first match is used, making<br>
+ access to special functions provided by the others (like<br>
+ full-bleed/borderless printing) inaccessible.<br>
+<br>
+ This commit adds the functionality of the user-requested page size<br>
+ (via &quot;PageSize&quot; or &quot;media&quot; option) being preferred under the matching<br>
+ page sizes, so that if for example a user selects a full-bleed version<br>
+ of the desired page size and sends a photo, the photo gets rendered<br>
+ and printed with the page geometry which the PPD reports for the<br>
+ full-bleed version.<br>
+<br>
+ Nothing changes if the size of the user-requested page size does not<br>
+ match the size of the input page at all.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-25 12:45:27 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a5ccd009fd632e058b4f0bc2849cfc293b39d1f2">a5ccd009fd632e058b4f0bc2849cfc293b39d1f2</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Small fix on size matching improvements<br>
+<br>
+ This is a fix for one little oversight on the changes to support matching<br>
+ the input page size against the imageable areas of the PPD's page sizes.<br>
+<br>
+ This completes the fix of bug 701438.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-24 23:11:10 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a0284b5ac8c59014eab90c5a5ec388cd1676b79d">a0284b5ac8c59014eab90c5a5ec388cd1676b79d</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Improved page size matching with PPD<br>
+<br>
+ Applied the following improvements for finding the correct page size<br>
+ of the PPD file for the input page:<br>
+<br>
+ - Do not try to match by page size name, the input files do not<br>
+ contain page size names.<br>
+<br>
+ - Do not only match the input page size against the actual media sizes<br>
+ reported by the PPD but also to the imageable areas. Media size match<br>
+ is preferred but if there is no media size match, we accept also<br>
+ a match of the imageable area. In case of a match of the imageable<br>
+ area we position the input page in the imageable area of the output<br>
+ page.<br>
+<br>
+ - More debug output.<br>
+<br>
+ - In case of a custom page size (no match with PPD sizes) the page<br>
+ size name in the CUPS Raster output is a correct &quot;Custom.XXXxYYY&quot;<br>
+ and not the default page size name.<br>
+<br>
+ This should fix bug #701438.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-23 18:09:32 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ee43ff891b51f0ccec3ba38d538d3e23441ed439">ee43ff891b51f0ccec3ba38d538d3e23441ed439</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Reduced page size comparison tolerances<br>
+<br>
+ Before each page gets rendered its size is compared to the page sizes<br>
+ of the PPD file to select the actual page size for the output. Reduced<br>
+ the tolerances from 7% for the long edge and 5% for the short edge to<br>
+ 1%, as before easily wrong sizes got picked (See also bug 701438).<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-23 10:11:05 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0311b61d5df67cd98e2c2d23ef3cec1cc4faa800">0311b61d5df67cd98e2c2d23ef3cec1cc4faa800</a>
+<blockquote>
+<p>
+ Windows Installer: cope with COMPILE_INITS=0<br>
+<br>
+ We default to COMPILE_INITS=1, and that was the only case that the installer<br>
+ handled - i.e. building the installer with COMPILE_INITS=0 would install an<br>
+ executable that wouldn't work without extra action (-I.. or similar).<br>
+<br>
+ This changes the installer compiler invocation, and the installer creation<br>
+ so it behaves as it does now with COMPILE_INITS=1, but with COMPILE_INITS=0 the<br>
+ installer will write the path to Resource/Init into the GS_LIB registry<br>
+ key.<br>
+<br>
+psi/nsisinst.nsi<br>
+psi/winint.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 23:30:34 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=137a0bda39f861600488b5a11c63914854c454c8">137a0bda39f861600488b5a11c63914854c454c8</a>
+<blockquote>
+<p>
+ &quot;cups&quot;/&quot;pwgraster&quot; output device: Produce more debug output<br>
+<br>
+ When building with CUPS_DEBUG now debug output for the process of<br>
+ matching the page geometry with the PPD file's page sizes is<br>
+ produced.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 08:58:01 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=09b53ebdc674f9f6e7a9c445e92617312dd93ab3">09b53ebdc674f9f6e7a9c445e92617312dd93ab3</a>
+<blockquote>
+<p>
+ Handle explicit '\' escaping in path matching<br>
+<br>
+ As well as having to cope with both '/' and '\' as directory separators on<br>
+ Windows, it turns out we also need to cope with the backslash separator being<br>
+ explicitly escaped (&quot;\\&quot;) - the explicit is added by the Postcript path<br>
+ templating code in gs_init.ps.<br>
+<br>
+ I don't want to change templating code because that would likely have<br>
+ implications in a lot of other places.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-22 10:51:28 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f1692a288f1a17930f0b71e540908398a17d5366">f1692a288f1a17930f0b71e540908398a17d5366</a>
+<blockquote>
+<p>
+ Better CMYK conversion for bmpcmp<br>
+<br>
+toolbin/bmpcmp.c<br>
+toolbin/bmpcmptab.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 17:49:32 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c8aaf3b7bc4232997d434170827fffd6887fc88f">c8aaf3b7bc4232997d434170827fffd6887fc88f</a>
+<blockquote>
+<p>
+ Update bmpcmp.c to read psdrgb rather than psdbgr.<br>
+<br>
+toolbin/bmpcmp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 15:33:27 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9ba1827e220cd49a6732c04fcf3e55a268014377">9ba1827e220cd49a6732c04fcf3e55a268014377</a>
+<blockquote>
+<p>
+ Fix commit ec0b35fed3de: &quot;Handle directory separators...&quot;<br>
+<br>
+ The logic in the above fix was wrong.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 14:28:20 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7d0206d2b118b26f6d87ba8f09d077eba417e4c9">7d0206d2b118b26f6d87ba8f09d077eba417e4c9</a>
+<blockquote>
+<p>
+ Bug 701451: Fix clist color_usage calculations for shadings.<br>
+<br>
+ Or rather, don't attempt to calculate them badly, and just<br>
+ use the safe &quot;all colors&quot; value.<br>
+<br>
+base/gxclrect.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 10:10:51 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=320ec9672b987a765324f89450de08b70aafbcd3">320ec9672b987a765324f89450de08b70aafbcd3</a>
+<blockquote>
+<p>
+ PDF interpreter - review .forceput security<br>
+<br>
+ Bug #701450 &quot;Safer Mode Bypass by .forceput Exposure in .pdfexectoken&quot;<br>
+<br>
+ By abusing the error handler it was possible to get the PDFDEBUG portion<br>
+ of .pdfexectoken, which uses .forceput left readable.<br>
+<br>
+ Add an executeonly appropriately to make sure that clause isn't readable<br>
+ no mstter what.<br>
+<br>
+ Review all the uses of .forceput searching for similar cases, add<br>
+ executeonly as required to secure those. All cases in the PostScript<br>
+ support files seem to be covered already.<br>
+<br>
+Resource/Init/pdf_base.ps<br>
+Resource/Init/pdf_draw.ps<br>
+Resource/Init/pdf_font.ps<br>
+Resource/Init/pdf_main.ps<br>
+Resource/Init/pdf_ops.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-21 10:56:02 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e5660f15f5fd4615254acec7ed403b4a7984cb09">e5660f15f5fd4615254acec7ed403b4a7984cb09</a>
+<blockquote>
+<p>
+ Handle directory separators in access control matching<br>
+<br>
+ On Windows, we end up dealing with a mishmash of &quot;/&quot; and &quot;\&quot; as directory<br>
+ separators, so a simple equality check isn't sufficient.<br>
+<br>
+ Since there is already (platform specific) function for checking whether a<br>
+ string (or part thereof) is a directory separation, use it.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 21:50:18 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=596e9baa1b24b0a9dac4d8bad1ea80cd23dcab79">596e9baa1b24b0a9dac4d8bad1ea80cd23dcab79</a>
+<blockquote>
+<p>
+ Disable use of alternate tint transform ICC profile<br>
+<br>
+ A prior commit introduced the use of color management<br>
+ if the DeviceN or Separation device had an ICC profile<br>
+ associated with the colorants. While there is an argument<br>
+ for doing this, it is not the standard behavior seen in<br>
+ AR. Disabling for now and will likely turn this into a<br>
+ command line option.<br>
+<br>
+base/gxcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 18:48:49 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7547a2fc593e3a0bb8ea72f661389cd908c382f7">7547a2fc593e3a0bb8ea72f661389cd908c382f7</a>
+<blockquote>
+<p>
+ Fix crashes in RAW_DUMP debug code.<br>
+<br>
+ Dump the buffer before freeing the device, or the pointer will no<br>
+ longer be valid.<br>
+<br>
+ Also, don't access through ppatdev14 when we know it's NULL.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 18:47:09 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=421727ed068b3f41fdbd9657d759397610fe8821">421727ed068b3f41fdbd9657d759397610fe8821</a>
+<blockquote>
+<p>
+ Fix deep color transparency pattern copying problem.<br>
+<br>
+ The following test:<br>
+<br>
+ tests/pdf/pattrans_solid_nonrect.pdf.psdcmyk16.300.1..gs<br>
+<br>
+ among others, was showing problems, due to us treating the offset<br>
+ as bytes rather than shorts.<br>
+<br>
+base/gxp1fill.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 14:29:33 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f9052f1debff2168d5a2606fa35bcaaf6f6f2ec7">f9052f1debff2168d5a2606fa35bcaaf6f6f2ec7</a>
+<blockquote>
+<p>
+ Avoid signed overflow in deep transparency calculations.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 12:24:03 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=898c9e5f06bb44ec3fd262b47eeaa5028e18773f">898c9e5f06bb44ec3fd262b47eeaa5028e18773f</a>
+<blockquote>
+<p>
+ Fix overflow in deep color blending.<br>
+<br>
+ Multiplying a 16bit unsigned value with a 16 bit signed value<br>
+ in a 32bit int means we lose the sign bit. Sacrifice a bit of<br>
+ accuracy to avoid that.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-20 10:10:28 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=85c9d6de80ba57deeee289238aa1c0202f584c3c">85c9d6de80ba57deeee289238aa1c0202f584c3c</a>
+<blockquote>
+<p>
+ make .forceput inaccessible<br>
+<br>
+ Bug #701343, #701344, #701345<br>
+<br>
+ More defensive programming. We don't want people to access .forecput<br>
+ even though it is no longer sufficient to bypass SAFER. The exploit<br>
+ in #701343 didn't work anyway because of earlier work to stop the error<br>
+ handler being used, but nevertheless, prevent access to .forceput from<br>
+ .setuserparams2.<br>
+<br>
+Resource/Init/gs_lev2.ps<br>
+Resource/Init/gs_pdfwr.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-19 10:03:57 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3ba6d871c70398cfbd15b619127bf13ddea13282">3ba6d871c70398cfbd15b619127bf13ddea13282</a>
+<blockquote>
+<p>
+ Handle drag'n'drop file name/paths<br>
+<br>
+ Because we now run by default with the file access permission active,<br>
+ we need to do additional work for Windows drag and drop files, so they don't<br>
+ throw an invalidaccess error (since we implement drag and drop by sending<br>
+ characters to the gs console to do '(file) run').<br>
+<br>
+ The problem is, we cannot add the file to read list, send the characters to the<br>
+ console, and remove the file from the read list because, although SendMessage()<br>
+ blocks until the message is handles, WriteConsoleInput() does not block until<br>
+ the console buffers are consumed (i.e. it is asynchronous). So, there is no<br>
+ certainty when the final SendMessage() in WM_DROPFILES case is finished that<br>
+ Ghostcript will actually have run the file.<br>
+<br>
+ So, we create a list of dropped file names, add them to the permit read list,<br>
+ when the next WM_DROPFILES event happens, or a WM_DESTROY event, we drop<br>
+ file names from the permit read list before, if necessary, adding the current<br>
+ ones.<br>
+<br>
+psi/dwimg.c<br>
+psi/dwmain.c<br>
+psi/dwmainc.c<br>
+psi/dwtext.c<br>
+psi/dwtext.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-16 15:43:32 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d2e36e8ef01546aaee0cd0531fbc0fa932b23b99">d2e36e8ef01546aaee0cd0531fbc0fa932b23b99</a>
+<blockquote>
+<p>
+ Squash warnings in claptrap.<br>
+<br>
+ Thanks to William Bader for highlighting these.<br>
+<br>
+base/claptrap-planar.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-16 15:28:49 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e34d5606835fc587e222b80bf9cac1bc40c4790b">e34d5606835fc587e222b80bf9cac1bc40c4790b</a>
+<blockquote>
+<p>
+ Squash warning in gdevpsd.c<br>
+<br>
+ Thanks to William Bader for spotting this.<br>
+<br>
+devices/gdevpsd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-16 13:08:14 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f416b415e8e3a25446b66bf1a6253f86be0366de">f416b415e8e3a25446b66bf1a6253f86be0366de</a>
+<blockquote>
+<p>
+ Squash some compiler warnings.<br>
+<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+devices/gdevpdfimg.c<br>
+devices/vector/gdevpdfu.c<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 11:39:51 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9ead927968ff8104e1a81df1590fced74927639d">9ead927968ff8104e1a81df1590fced74927639d</a>
+<blockquote>
+<p>
+ Dates and versions for 9.28 RC 1<br>
+<br>
+base/gscdefs.h<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 11:35:56 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ae7dea2b9bd068f61b6aef312a7f4cbc9860cac3">ae7dea2b9bd068f61b6aef312a7f4cbc9860cac3</a>
+<blockquote>
+<p>
+ Revision date<br>
+<br>
+base/version.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 17:06:02 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2f8e2423c860e89b325675dc1311819179740c76">2f8e2423c860e89b325675dc1311819179740c76</a>
+<blockquote>
+<p>
+ Add -dNOSAFER for Windows installer cidfmap creation<br>
+<br>
+psi/nsisinst.nsi<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 14:36:55 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=226fb24dbe4f844b8c7531be3eccc2bfae1a103d">226fb24dbe4f844b8c7531be3eccc2bfae1a103d</a>
+<blockquote>
+<p>
+ ps2write - don't password encrypt PostScript output!<br>
+<br>
+ Noticed while testing the args commit; if we set -sOwnerPassword (to<br>
+ create a password-protected PDF file), but select (e)ps2write as the<br>
+ device, then the resulting PostScript file would have all the streams<br>
+ (in a PDF sense) encrypted with PDF password encryption.<br>
+<br>
+ Unsurprisingly, this result in a completely unusable PostScript file.<br>
+ Lets not permit that....<br>
+<br>
+devices/vector/gdevpdfp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-13 14:43:51 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fd14a8e3701a7f75d758a1e536bcafbddeb70289">fd14a8e3701a7f75d758a1e536bcafbddeb70289</a>
+<blockquote>
+<p>
+ Document the new SAFER/file access controls<br>
+<br>
+ The documentation for the old SAFER remains in place (noted as deprecated) until<br>
+ we actually remove it. Document accessing the old SAFER functionality<br>
+ (-dOLDSAFER).<br>
+<br>
+ Generally, tidy up the HTML/formatting of the parameter and operator lists<br>
+ in Use.htm and Language.htm - mainly making indenting even and consistent.<br>
+<br>
+ List .setpdfwrite as deprecated<br>
+<br>
+ Include setting the target of the first parameter of gsapi_new_instance() to<br>
+ NULL before calling it, and fix the examples in API.htm<br>
+<br>
+doc/API.htm<br>
+doc/Language.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/style.css<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-13 14:40:45 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=79a06b45e784e6839b2b2129cd2620ea606254e1">79a06b45e784e6839b2b2129cd2620ea606254e1</a>
+<blockquote>
+<p>
+ Enable new 'SAFER' protection by default.<br>
+<br>
+ We'll now run by default with file access controls enabled. SAFER (and<br>
+ .setsafe) now *only* enables file access controls. The old SAFER functionality<br>
+ is (temporarily) available by specifying &quot;-dSAFER -dOLDSAFER&quot; on the command<br>
+ line, or &quot;-dOLDSAFER&quot; before the call to .setsafe.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-13 08:28:06 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9883f2a931407503778bb94948b47480eff858b2">9883f2a931407503778bb94948b47480eff858b2</a>
+<blockquote>
+<p>
+ Add null file to the permit writing list<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-12 12:21:50 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7abf720f46dd9ff6018b7f29141ba0573016d59d">7abf720f46dd9ff6018b7f29141ba0573016d59d</a>
+<blockquote>
+<p>
+ Use enum values for shutting down the file access lists<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-09 14:43:17 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d86ecec686d77e69f7c4a10df9da8c4cd8336a03">d86ecec686d77e69f7c4a10df9da8c4cd8336a03</a>
+<blockquote>
+<p>
+ Tweak to better handle undefined transparency ops<br>
+<br>
+examples/transparency_example.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-08 10:46:39 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7ca1bb5794997e0dba059a5be6f85a9eaefc915d">7ca1bb5794997e0dba059a5be6f85a9eaefc915d</a>
+<blockquote>
+<p>
+ Fix gs_add_explicit_control_path()<br>
+<br>
+ it was always adding to the &quot;read&quot; list, rather than the list requested by the<br>
+ parameter.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-08 10:33:18 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=34dac4d2a1b195536fcb9d796168cd1360c0e500">34dac4d2a1b195536fcb9d796168cd1360c0e500</a>
+<blockquote>
+<p>
+ Don't bind and undefine .copytree<br>
+<br>
+ .copytree is a Postscript proc that calls itself recursively, hence we cannot<br>
+ bind it nor undefine it.<br>
+<br>
+Resource/Init/gs_setpd.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-06 09:32:32 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4d53f6ee868205c76950027e76a27f0278513a39">4d53f6ee868205c76950027e76a27f0278513a39</a>
+<blockquote>
+<p>
+ Tweak the interaction of file permissions and -I<br>
+<br>
+ The new file permissions code differentiates between 'path', 'path/' and<br>
+ 'path/*', whilst the old -I code did not.<br>
+<br>
+ This slightly modifies how the -I stuff drives the file permissions stuff so it<br>
+ works (more) like the previous -I behaviour.<br>
+<br>
+ The remaining difference is that the new code always treats '*' as a wildcard,<br>
+ where the old code would permit '*' as a 'real' character in a path.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-15 09:52:04 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=00af0eb11b82c4dfddbe91bcb70caed2e61a1cc8">00af0eb11b82c4dfddbe91bcb70caed2e61a1cc8</a>
+<blockquote>
+<p>
+ pdfwrite/ps2write/pdfimage - record args used<br>
+<br>
+ Following on from commit 813d7e96c8733f85d59a62732171cf7cedfc087d this<br>
+ adds functionality to the pdfwrite and pdfimage families of devices to<br>
+ actually write the args that were used to generate the output file into<br>
+ the final output file, as comments.<br>
+<br>
+ Output files are somewhat larger with this commit, but only very small<br>
+ files are in any way significantly larger. We do have a number of such<br>
+ files in our test suite which exhibit larger output ( &gt; 5%increase).<br>
+<br>
+devices/gdevpdfimg.c<br>
+devices/vector/gdevpdf.c<br>
+devices/vector/gdevpdfu.c<br>
+devices/vector/gdevpdfx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-12 16:30:46 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=813d7e96c8733f85d59a62732171cf7cedfc087d">813d7e96c8733f85d59a62732171cf7cedfc087d</a>
+<blockquote>
+<p>
+ Capture args to feed to pdfwrite.<br>
+<br>
+ To facilitate debugging, we want a way to pickle the gs invocation<br>
+ used into device output (for devices that want it).<br>
+<br>
+ We therefore amend the argument processing logic to pass arguments<br>
+ to gs_lib_ctx, where they will are 'sanitized' and stored in a list.<br>
+ This list can then be accessed by a device.<br>
+<br>
+ We are careful to sanitize the args so as not to reveal paths or<br>
+ secret passwords/code etc. Essentially we never store any filenames<br>
+ or string values stored (except for certain whitelisted -s options).<br>
+<br>
+ It is likely that we'll want to expand the whitelisted values in<br>
+ future.<br>
+<br>
+base/gsargs.c<br>
+base/gsargs.h<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+pcl/pl/plmain.c<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-14 16:47:36 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8ba95fb06387572160fee5e4c1e51d972401566e">8ba95fb06387572160fee5e4c1e51d972401566e</a>
+<blockquote>
+<p>
+ Fix gs_lib_ctx memory calls to use the correct memory pointer.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-14 08:03:45 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ddddd71785d058b036775566d36d6848c9817f80">ddddd71785d058b036775566d36d6848c9817f80</a>
+<blockquote>
+<p>
+ Fix -F____ and -f____ to actually run the file ____.<br>
+<br>
+ Commit 7ecbfda9 broke -F completely since it requires the file to run to<br>
+ immediately follow the switch, and -f____ use to run the file, but since<br>
+ gs_add_control_path returns 0 as long as there was no error, the code<br>
+ never called argproc. Also, argproc already does the add_control_path<br>
+ and remove_control_path, so simplify -f and -F code.<br>
+<br>
+ Also gs_add_outputfile_control_path was ignoring the return code when<br>
+ adding the full pipe string as a path, so fix it.<br>
+<br>
+ Note that plmain ignores the return code from gs_remove_control_path,<br>
+ but that should be OK.<br>
+<br>
+base/gslibctx.c<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-12 13:53:29 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3eb2b1337260a17274588d377032e1f9953062fd">3eb2b1337260a17274588d377032e1f9953062fd</a>
+<blockquote>
+<p>
+ Squash double -&gt; int warning message with explicit cast.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-13 11:54:36 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8b5af0e2db28be36d96de97eb1a145d5716ffea3">8b5af0e2db28be36d96de97eb1a145d5716ffea3</a>
+<blockquote>
+<p>
+ Tweak lcms to optimise the pipeline before consulting plugins.<br>
+<br>
+ This allows us to recognise identity transforms before selecting<br>
+ one of our optimised lookup functions. Firstly, however optimised<br>
+ our code is, we aren't going to beat the identity code. Secondly,<br>
+ lcms doesn't calculate the tables for identity transforms, so<br>
+ our code can fall in a heap here.<br>
+<br>
+lcms2mt/src/cmsxform.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-13 16:05:37 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=15d95340389f0f46bd214803ec19685c0a738a0e">15d95340389f0f46bd214803ec19685c0a738a0e</a>
+<blockquote>
+<p>
+ Deprecate .setpdfwrite<br>
+<br>
+ The .setpdfwrite operator nowadays does nothing more than increase the<br>
+ VM threshold, which is relatively pointless so we're going to remove it.<br>
+<br>
+ In this commit; add a warning message to the .setpdfwrite operator so<br>
+ that anyone using it will be warned. Remove usage from the various<br>
+ shell scripts we provide.<br>
+<br>
+Resource/Init/gs_pdfwr.ps<br>
+lib/dvipdf<br>
+lib/ps2pdfwr<br>
+lib/ps2pdfxx.bat<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-12 16:06:21 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8cc13d54850af14a07e72f73cca20e96ed01fd03">8cc13d54850af14a07e72f73cca20e96ed01fd03</a>
+<blockquote>
+<p>
+ PDF interpreter - ignore visibility of annotations for devices which support them<br>
+<br>
+ No bug for this, arose from a Stack Overflow question, but its a FAQ<br>
+ as well.<br>
+<br>
+ It used to be the case that the PDF interpreter would (and should)<br>
+ render files containing annotations with the Print and NoView flags<br>
+ differently, depending on whether the destination was to be rendered<br>
+ or sent to a high level device. This is controlled with the -dPrinted<br>
+ flag to determine whether annotations should be treated as for a Print<br>
+ device or a View device.<br>
+<br>
+ This doesn't make a lot of sense for pdfwrite though. We really want to<br>
+ keep the Annotation 'as is' and let the viewer or printer of the output<br>
+ PDF file deal with it.<br>
+<br>
+ In the past we've moved the annotation handling for pdfwrite and,<br>
+ technically, for any device which directly supports annotations from<br>
+ 'drawannot' to 'preserveannot'. Now that we've done that, it makes some<br>
+ sense to have the 'preserveannot' code no longer check the annotation's<br>
+ visibility, but simply preserve it as you would expect. NOTE we do check<br>
+ the visibility state of annotations that we don't know how to handle.<br>
+ These will not be preserved as annotations, but will be drawn into the<br>
+ page contents, so we don't want to render any which should be invisible.<br>
+ Such annotations are still affected by -dPritned.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-09 15:57:54 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=368bc91bf0bba66f31204e1ee57da7c9b70b32bb">368bc91bf0bba66f31204e1ee57da7c9b70b32bb</a>
+<blockquote>
+<p>
+ pdfwrite - fix a minor error<br>
+<br>
+ I don't think this causes any actual problems, but the correct return<br>
+ should be 0, not an error, when we can't find a Pattern resource.<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-09 15:56:45 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9a871de445eaed295748a3b489e138e87b9e0b65">9a871de445eaed295748a3b489e138e87b9e0b65</a>
+<blockquote>
+<p>
+ Transparency compositor - forward unhandled special_ops to target device<br>
+<br>
+ Noticed while doing earlier work. The pdf14 device only passed on a few<br>
+ specific gxdso_ special_op types to the target device, the remainder<br>
+ were sent to the default handler. This seems wrong and caused problems<br>
+ for my new gxdso at the time. Instead of it going through the pdf14<br>
+ device and ending up at pdfwrite (or the default handler for other<br>
+ devices) it was always going to the default handler and never making<br>
+ it to pdfwrite when rendering transparency.<br>
+<br>
+ The pdf14 device should instead handle any gxdso_ special_ops that vary<br>
+ depending on rendering. For instance the JPEG passthrough should *not*<br>
+ be passed to the target device, the pdf14 device needs to have the<br>
+ uncompressed image data to render it to the compositor buffer.<br>
+<br>
+ This commit adds handlers for such gxdso_ special ops, and passes all<br>
+ the remaining unhandled ones to the target device for processing.<br>
+<br>
+ For some reason this causes diffs in halftones, I have no idea why. but<br>
+ they don't seem like problems.<br>
+<br>
+base/gdevp14.c<br>
+base/gxdevsop.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-09 17:14:42 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1ca2c331684ca2912c431771d1aac8bc5cb42e76">1ca2c331684ca2912c431771d1aac8bc5cb42e76</a>
+<blockquote>
+<p>
+ Fix line endings (file had some '\r' line endings).<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-08 09:07:09 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e9e253e1dbc87d6ef772936130076e1ba3b81867">e9e253e1dbc87d6ef772936130076e1ba3b81867</a>
+<blockquote>
+<p>
+ pdfwrite - don't permit fallback font substitution with PDF/A<br>
+<br>
+ Bug #701373 &quot;PDFA fails to validate by Preflight&quot;<br>
+<br>
+ The inptu is a PDF file which is missing two fonts, Helvetica and<br>
+ Calibri. For both fonts we use /Helvetica as a substitute. For the<br>
+ missing Helvetica font this is correct, but for the missing Calibri font<br>
+ this leads to problem when creating PDF/A otuput files.<br>
+<br>
+ Firstly, we now have two different fonts, with differing /Widths which<br>
+ are potentially attempting to reference the same glyphs from a single<br>
+ font. Secondly, no matter what we do, the /Widths from the Calibri font<br>
+ are not going to match the actual glyph metrics from Helvetica.<br>
+<br>
+ Since there is no possible way to deal with the second problem, because<br>
+ either the metrics won't match the /Widths, or the text will be misplaced<br>
+ if we use Widths that are not those from Calibri, there is no point in<br>
+ trying to tackle the first problem.<br>
+<br>
+ So here we introduce a new special_op 'EventInfo' which passes a single<br>
+ name to the device. The name is the name of the event which occurred. For<br>
+ now this can only be 'SubstitutedFont'. The only device which handles<br>
+ this event is pdfwrite, all other devices simply ignore it. The pdfwrite<br>
+ device checks to see if it is creating a PDF/A otuptu file, and if it is<br>
+ then it emits a warnign and aborts the production of PDF/A.<br>
+<br>
+Resource/Init/pdf_font.ps<br>
+base/gdevdflt.c<br>
+base/gdevp14.c<br>
+base/gxdevsop.h<br>
+devices/vector/gdevpdfi.c<br>
+psi/zdevice.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-14 16:52:28 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=009d44b855dcda9d0d9ecf5ca20944504648eebe">009d44b855dcda9d0d9ecf5ca20944504648eebe</a>
+<blockquote>
+<p>
+ CompatibleOverprint Mode<br>
+<br>
+ Ray did the interpreter work on this and Michael did the graphics<br>
+ library portion.<br>
+<br>
+ For the interpreter:<br>
+ When OP is set, change to CompatibleOverprint mode, but don't push a<br>
+ transparency group or change opacityalpha when the current blendmode<br>
+ is Normal or Compatible. This was determined based on the note on page<br>
+ 568 of the PDF 1.7 spec (section 7.6.3 in the area titled &quot;Compatibility<br>
+ with Opaque Printing&quot;). It states:<br>
+<br>
+ Note: It is not necessary to create such an implicit transparency<br>
+ group if the current blend mode is Normal; simply substituting<br>
+ the CompatibleOverprint blend mode while painting the object<br>
+ produces equivalent results. There are some additional cases in<br>
+ which the implicit transparency group can be optimized out.<br>
+<br>
+ After painting, if the group was pushed, pop the group, and restore the<br>
+ opacityalpha and shapealpha,then restore the blendmode (if it was<br>
+ CompatibleOverprint).<br>
+<br>
+ NB, we don't attempt to optimize any other groups hinted at in<br>
+ Adobe's comment.<br>
+<br>
+ In addition, if we are going to an output device that handles transparency<br>
+ compositor actions do not do any of the above stuff.<br>
+<br>
+ For the graphics library:<br>
+ When doing blending in non-isolated groups with compatible overprint<br>
+ the non-drawn colors must be corrected during the fill rectangles to<br>
+ ensure that the proper amount is maintained with the changing group<br>
+ alpha values. This is poorly documented in the specification.<br>
+ In addition, the spec is poorly written in terms of how the blend<br>
+ computation is performed for overprint compatible.<br>
+<br>
+ The spec claims the following:<br>
+<br>
+ If the overprint mode is 1 (nonzero overprint mode) and the<br>
+ current color space and group color space are both DeviceCMYK,<br>
+ then only process color components with nonzero values replace<br>
+ the corresponding component values of the backdrop. All other<br>
+ component values leave the existing backdrop value unchanged.<br>
+ That is, the value of the blend function B(Cb,Cs) is the source<br>
+ component cs for any process (DeviceCMYK) color component whose<br>
+ (subtractive) color value is nonzero; otherwise it is the<br>
+ backdrop component cb. For spot color components, the value is<br>
+ always cb.<br>
+<br>
+ The equation for compositing is<br>
+<br>
+ ar*Cr = (1-as)*Cb + as*[(1-ab)*Cs+ab*B(Cb,Cs)]<br>
+<br>
+ Now if I simply set B(cb,cs) to cb for the case when the<br>
+ DevieCMYK value (with opm true) is zero I get<br>
+<br>
+ ar*Cr = (1-as)*Cb + as*[(1-ab)*Cs+ab*Cb]<br>
+<br>
+ But what I am seeing with AR is<br>
+ ar*Cr = (1-as)*Cb + as*[(1-ab)*Cb+ab*Cb] = (1-as)*Cb + as*Cb = Cb<br>
+ which is what I think we want.<br>
+<br>
+ The description in the spec is confusing as it says<br>
+ &quot;then only process color components with nonzero values replace<br>
+ the corresponding component values of the backdrop. All other<br>
+ component values leave the existing backdrop value unchanged&quot;<br>
+<br>
+ which makes sense for overprinting,<br>
+<br>
+ vs.<br>
+<br>
+ &quot;That is, the value of the blend function B(Cb,Cs) is the source<br>
+ component cs for any process (DeviceCMYK) color component whose<br>
+ (subtractive) color value is nonzero; otherwise it is the<br>
+ backdrop component cb.&quot;<br>
+<br>
+ Which is NOT the same thing as leaving the backdrop unchanged<br>
+ with the compositing equation<br>
+ ar*Cr = (1-as)*Cb + as*[(1-ab)*Cs+ab*B(Cb,Cs)]<br>
+<br>
+ For this to work, we need to carry out the operation during<br>
+ the mixing of the source with the blend result. Essentially<br>
+ replacing that mixing with the color we have here.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+Resource/Init/pdf_main.ps<br>
+Resource/Init/pdf_ops.ps<br>
+base/gdevp14.c<br>
+base/gdevp14.h<br>
+base/gstrans.h<br>
+base/gxblend.c<br>
+base/gxclpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-07 10:24:49 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d8f05309d5e54b6e75c2b78af9c0bcf5f62b493c">d8f05309d5e54b6e75c2b78af9c0bcf5f62b493c</a>
+<blockquote>
+<p>
+ Bug 701308: Fix clip transpose logic that resulted in garbled output.<br>
+<br>
+ This seems like it should have showed up earlier, but when the clip<br>
+ rectangle list was transposed, the _t1 and _s1 clip_fill_rectangle_<br>
+ functions were confused about the coordinates being sent to the target<br>
+ device fill_rectangle.<br>
+<br>
+ Also during debug, I found that if the clip list consisted of more than<br>
+ a single rectangle, clip_get_clipping_box was only using the first rect,<br>
+ rather than accumulating the outer_box for the entire list.<br>
+<br>
+base/gxclip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-06 12:44:49 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ff856d0c44ce7d3f4d204f4a405857a6a6672a80">ff856d0c44ce7d3f4d204f4a405857a6a6672a80</a>
+<blockquote>
+<p>
+ pdfwrite - handle nested Patterns inside a transparency Group<br>
+<br>
+ Bug #701181 &quot;Incorrect output after ghostscript processing of a PDF file&quot;<br>
+<br>
+ The PDF file is constructed in a somewhat sub-optimal fashion. Each<br>
+ background square 'grid' is a Form, each Form draws the content by<br>
+ filling the area with a solid colour, and then drawing white lines<br>
+ across it. The white lines (actually rectangles) are drawn using a<br>
+ Pattern.<br>
+<br>
+ So far so good, however the Pattern simply executes a Form, that Form<br>
+ then fills another rectangle, with another Pattern, its this final<br>
+ pattern which does the drawing.<br>
+<br>
+ This is two levels of indirection more than required.<br>
+<br>
+ Normally this isn't a problem because we don't attempt to preserve<br>
+ Forms from PDF files (and this is one example of why we don't). But....<br>
+ If the file involves transparency Groups, then we must use a Form<br>
+ XObject for the Group.<br>
+<br>
+ In this case the CTM of the first pattern is the CTM of the 'enclosing<br>
+ context', ie the Form, but the CTM of the second pattern is also the<br>
+ CTM of the 'enclosing context', but now that means the first pattern,<br>
+ not the Group.<br>
+<br>
+ To cater for this we track the number of patterns defined since the last<br>
+ Form definition. If its 0 (ie this is the first pattern since a Form<br>
+ definition) then we just use the CTM. If its greatre than 0, however,<br>
+ then we 'undo' the scaling applied by pdfwrite, in order to get back to<br>
+ the CTM of the enclosing pattern.<br>
+<br>
+ Its possible that more extreme examples (patterns inside patterns<br>
+ inside groups inside patterns inside groups) might still not be entirely<br>
+ correct, but we have no examples of this (Patterns inside patterns are<br>
+ relatively rare). If we find any we can revisit this.<br>
+<br>
+devices/vector/gdevpdfb.h<br>
+devices/vector/gdevpdfi.c<br>
+devices/vector/gdevpdft.c<br>
+devices/vector/gdevpdfv.c<br>
+devices/vector/gdevpdfx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-05 17:50:04 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f69b63a3dc3bb7671df956587fe2520f8badab88">f69b63a3dc3bb7671df956587fe2520f8badab88</a>
+<blockquote>
+<p>
+ PDF interpreter - cope with strangely constructed Pages trees<br>
+<br>
+ Bug #700953 &quot;Error: /execstackoverflow in --.systemvar--&quot;<br>
+<br>
+ The pre-interpretation scan of the Pages tree looking for loops in the<br>
+ tree structure uses recursion; if a Pages tree is badly constructed it<br>
+ is possible to recurse enough times to cause an overflow of the exec<br>
+ stack.<br>
+<br>
+ We can cope with this by aborting the scan and continuing to interpret<br>
+ and render the PDF file, because the regular processing of PDF file<br>
+ doesn't use recursion.<br>
+<br>
+ Of course, this does mean that we lose the check for loops in the Pages<br>
+ tree (at least, loops beyond the point where we overflow the exec stack)<br>
+ but both conditions are rare, so I think its worth doing.<br>
+<br>
+ We do still raise a warning.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-05 10:05:58 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fd915a81c605a52f58855bd233c19aaa373b2f69">fd915a81c605a52f58855bd233c19aaa373b2f69</a>
+<blockquote>
+<p>
+ pdfwrite - improve CIDFont generation<br>
+<br>
+ Bug 701010 &quot;Low Printer VM and gswinc32.exe crashing on postscript file with Korean text&quot;<br>
+<br>
+ The problem in this case is that the PostScript uses a CIDFont with two<br>
+ descendant fonts. PDF only permits a single descendant font in a CIDFont<br>
+ so pdfwrite can't simply copy the font 'as is'.<br>
+<br>
+ Instead we create a type 0 font (CIDFont) for each descendant and switch<br>
+ between them as required.<br>
+<br>
+ The problem here is that the code for retrieving an existing Type 0<br>
+ CIDFont for a given descendant in the PostScript assumed that the name<br>
+ of the CIDFont would be of the form /FontName-CMapName, and the font<br>
+ we have here does not match that.<br>
+<br>
+ In fact, I'm not at all sure that this is *ever* the case, certainly<br>
+ none of our test files seem to exercise this (bearing in mind that its<br>
+ the Type 0 CIDFont generated by pdfwrite that we are checking against<br>
+ and I can see no code that created a name of that form).<br>
+<br>
+ So what was happening was that every time the PostScript CIDFont<br>
+ switched descendants, we generated a new Yype 0 font, along with all the<br>
+ attendant structures, such as a ToUnicode CMap (256kB on its own). In<br>
+ fact the first line of text in the file switches descendants 26 times,<br>
+ leading to us creating something like 21 MB of extra font information.<br>
+<br>
+ We now extend the check so that if the name is not FontName-CMapName we<br>
+ check the FontName and the CMap Name (which we do also store) separately<br>
+ and if they match we reuse the existing Type 0 font.<br>
+<br>
+ The supplied test file now runs to completion, all 217 pages, with a<br>
+ peak memory usage of ~22.8MB whereas it previously exhausted memory,<br>
+ using ~2GB, at page 111. In addition the resulting PDF file is around<br>
+ 95% smaller and the performance is noticeably improved on this file.<br>
+<br>
+devices/vector/gdevpdtt.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-02 15:18:26 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5b85ddd19a8420a1bd2d5529325be35d78e94234">5b85ddd19a8420a1bd2d5529325be35d78e94234</a>
+<blockquote>
+<p>
+ Bug 701394: protect use of .forceput with executeonly<br>
+<br>
+Resource/Init/gs_type1.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-31 13:34:06 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3ed82a40fd4b49728c79955319b6d67d1e092006">3ed82a40fd4b49728c79955319b6d67d1e092006</a>
+<blockquote>
+<p>
+ Add a way to record the selected cmap<br>
+<br>
+ (for the pdfi branch)<br>
+<br>
+base/fapi_ft.c<br>
+base/gxfapi.h<br>
+pcl/pl/plfapi.c<br>
+psi/zfapi.c<br>
+xps/xpsfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-08-01 08:55:31 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1eb609f130c397144702097f4d987f3b956770f9">1eb609f130c397144702097f4d987f3b956770f9</a>
+<blockquote>
+<p>
+ Add 'post' table name lookup to TTF in graphics lib<br>
+<br>
+ Make Mac Roman glyph ordering available to 'clients'<br>
+<br>
+ (in support of the pdfi branch)<br>
+<br>
+base/gstype42.c<br>
+base/gxfont42.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-31 15:04:37 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=788958decad94b7b3f7a478cfb57724323041bf5">788958decad94b7b3f7a478cfb57724323041bf5</a>
+<blockquote>
+<p>
+ Fix Separation and DeviceN Alternate colour space generation<br>
+<br>
+ Bug #701369 &quot;PB with Pantone color in pdfwrite&quot;<br>
+<br>
+ When converting to a specified colour space, if we encounter a DeviceN<br>
+ or Separation space, we leave the spot inks in place but change the<br>
+ alternate space to the defined colour conversion space, and generate a<br>
+ new tint transform which approximates the original colours.<br>
+<br>
+ However there was a logical error in the code, which only became<br>
+ apparent if TransferFunctionInfo was set to something other than 'Apply'<br>
+<br>
+ Normally this doesn't happen, but commit<br>
+ 2e68cc460dbe349f68b81082ff7344db48eb4820 changed the behvaiour when<br>
+ we are doing colour conversion to prevent us trying to apply a transfer<br>
+ function to a SMask, which we can't do.<br>
+<br>
+ This then exposed the fact that we were not copying the concretized<br>
+ samples to the client_colour structure, but we were reading them *back*<br>
+ from the client_colour structure to set the low and high values in the<br>
+ generated tint transform function.<br>
+<br>
+ The solution is to copy the components from the concretized colour<br>
+ outside the if clause testing the TransferFunctionInfo.<br>
+<br>
+ This fix continues to work properly with the file from bug #700052<br>
+<br>
+devices/vector/gdevpdfg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-24 12:36:35 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4367024d102c6363ba7536227790564466ec9ddc">4367024d102c6363ba7536227790564466ec9ddc</a>
+<blockquote>
+<p>
+ Fix debug PDF14_OPCODE_NAMES -- PDF14_BEGIN_TRANS_PAGE_GROUP was missing.<br>
+<br>
+base/gstrans.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-23 14:48:32 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9a8e9c6f7bd45531a1b01eb0d697a6dc48cde2b0">9a8e9c6f7bd45531a1b01eb0d697a6dc48cde2b0</a>
+<blockquote>
+<p>
+ Add arm option to clusterpush.pl<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-22 12:18:52 -0600
+</strong>
+<br>Henry Stiles &lt;henry.stiles@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4de965abeddf859b91937314bc7e86de25acb729">4de965abeddf859b91937314bc7e86de25acb729</a>
+<blockquote>
+<p>
+ Bug #701339, fixes total pattern length of 0.<br>
+<br>
+ Fallback to the default path code if the total pattern length is 0.<br>
+ This can happen because PCL XL represents pattern length elements as<br>
+ integers not floats.<br>
+<br>
+devices/vector/gdevpx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-22 19:33:44 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a628e509caf40ddec3d016dd9ff6379f12be7cc1">a628e509caf40ddec3d016dd9ff6379f12be7cc1</a>
+<blockquote>
+<p>
+ Ensure pdf14_put_image linebuf is long enough to avoid overrun.<br>
+<br>
+ The assumption is that we can write in 32byte lumps, so we may<br>
+ overrun the actual amount we need by 28 bytes. Allow for this.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-21 16:26:28 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4d8b6c57ef7272d41fb389a4dc9546f078ba3b2d">4d8b6c57ef7272d41fb389a4dc9546f078ba3b2d</a>
+<blockquote>
+<p>
+ Rework CAL cflags.<br>
+<br>
+ Cope with building for machines that have SSE4.2, but not AVX2,<br>
+ that crash on SSE4.2 code compiled with the -mavx2 flag.<br>
+<br>
+Makefile.in<br>
+base/cal.mak<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-22 13:07:59 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=909a87a15b5f8fede1f6bfeac2005327a7ca1601">909a87a15b5f8fede1f6bfeac2005327a7ca1601</a>
+<blockquote>
+<p>
+ Permit extra widths on space glyphs (PDF Tw value) even for xyshow<br>
+<br>
+ For the benefit of the pdfi interpreter. With the PDF in PostScript<br>
+ current interpreter, we apply Widths using a cshow procedure. The pdfi<br>
+ interpreter instead uses the x_widths and y_widths arrays, intended for<br>
+ use with the PostScript xyshow operator instead.<br>
+<br>
+ However, the existing code doesn't add the extra width to space glyphs<br>
+ if we have TEXT_REPLACE_WIDTHS set (ie an xyshow).<br>
+<br>
+ Here we move the code for the additional width out of the 'else'<br>
+ clause in show_move() so that we always have the value available. We<br>
+ then apply the dx and/or dy values in both cases.<br>
+<br>
+ We also need to relax the 'invalid' checking which is performed at a<br>
+ higher level in the code (gx_device_text_begin) because this combination<br>
+ is explicitly barred there and returns an error.<br>
+<br>
+base/gstext.h<br>
+base/gxchar.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-20 11:34:46 -0700
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=239d9035a011c212b015951bb2d75114ba11bee0">239d9035a011c212b015951bb2d75114ba11bee0</a>
+<blockquote>
+<p>
+ Add cal operation to clusterpush.pl<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-20 19:34:00 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0d4dcb839b679a01f38aac2156c2bb87a819b0d4">0d4dcb839b679a01f38aac2156c2bb87a819b0d4</a>
+<blockquote>
+<p>
+ Squash warnings in CAL build.<br>
+<br>
+base/gxblend.c<br>
+base/gximono.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-18 15:47:54 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e5faf407dcb7c9679537313cebd55a747098f6f8">e5faf407dcb7c9679537313cebd55a747098f6f8</a>
+<blockquote>
+<p>
+ Bug 701296: Fix Interpolation in Indexed spaces with UseFastColor<br>
+<br>
+ The get_color_handler logic was being called with pcs = Indexed, and<br>
+ so doing pcs = pcs-&gt;base_space. Then it was checking that pcs == the<br>
+ concrete space, seeing that it was, and deciding it could then use<br>
+ the device colors direct. The problem is that pcs-&gt;base_space is a<br>
+ greyscale space, so when running to (say) an rgb output, we have the<br>
+ wrong color data.<br>
+<br>
+ We now check for the number of components being as we expect, and<br>
+ for the space being one of our 'default' ones before choosing to<br>
+ take the 'fast' route.<br>
+<br>
+base/gsicc_manage.c<br>
+base/gsicc_manage.h<br>
+base/gxiscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-17 10:25:45 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c0e588f679fca92d92045049fd60846b57da899c">c0e588f679fca92d92045049fd60846b57da899c</a>
+<blockquote>
+<p>
+ Fix crash when RAW_PATTERN_DUMP is enabled<br>
+<br>
+ RAW_PATTERN_DUMP is used to help debug pattern issues.<br>
+ Crash introduced when changes were made to file i/o.<br>
+ Easy to overlook since this is rarely enabled.<br>
+<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2018-07-26 14:35:48 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c7499c426c0307880e9a34a577492d99a976c15b">c7499c426c0307880e9a34a577492d99a976c15b</a>
+<blockquote>
+<p>
+ Introduce CAL based transparency accelerations.<br>
+<br>
+ Authored by Michael Vrhel.<br>
+<br>
+base/cal.mak<br>
+base/gdevp14.c<br>
+base/gdevp14.h<br>
+base/gstrans.c<br>
+base/gxblend.c<br>
+base/gxblend.h<br>
+base/gxblend1.c<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2018-07-03 11:36:07 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2533344c1bad749e81c3cef91e770ba4ea5a1a1d">2533344c1bad749e81c3cef91e770ba4ea5a1a1d</a>
+<blockquote>
+<p>
+ Introduce CAL based SSE4.2 and AVX2 optimisations.<br>
+<br>
+ Authored by Michael Vrhel.<br>
+<br>
+base/cal.mak<br>
+base/gsicc_lcms2mt.c<br>
+base/gxicolor.c<br>
+base/lib.mak<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-17 07:14:21 -0700
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2682485aefb808e5dca7191b980aa83880821dcc">2682485aefb808e5dca7191b980aa83880821dcc</a>
+<blockquote>
+<p>
+ Update configure for CAL to spot AVX2 as well.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-16 12:04:04 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=58d1db5850d470856f8c83af9a573b9c5c18e519">58d1db5850d470856f8c83af9a573b9c5c18e519</a>
+<blockquote>
+<p>
+ Move cal_context into gs_lib_ctx core.<br>
+<br>
+ This avoids us having to repeatedly init/fin the CAL lib.<br>
+<br>
+base/gdevdrop.c<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+base/gxicolor.c<br>
+base/gxidata.c<br>
+base/gximage.h<br>
+base/gximono.c<br>
+base/lib.mak<br>
+base/siscale_cal.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-17 10:19:47 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=47cd6503f34921c840df7c96faa9d957603521e7">47cd6503f34921c840df7c96faa9d957603521e7</a>
+<blockquote>
+<p>
+ Bug 701323: Skip oversize TIFF checks in BigTIFF mode.<br>
+<br>
+ If we have -dUseBigTIFF, then we don't need to check that<br>
+ we don't exceed 4Gig.<br>
+<br>
+ This appears to work, but I don't have any code that will<br>
+ actually load and show me a &gt;4Gig TIFF!<br>
+<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-15 18:43:04 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=efce71ac4d500231296d1c84f62077666e0966a1">efce71ac4d500231296d1c84f62077666e0966a1</a>
+<blockquote>
+<p>
+ Fix SEGV seen in saved-pages-test run.<br>
+<br>
+ The following job:<br>
+<br>
+ membin/gs -Ilib -sOutputFile=out.%04d.psd --saved-pages-test<br>
+ -dMaxBitmap=10000 -sDEVICE=psdrgb -r300 -Z: -sDEFAULTPAPERSIZE=letter<br>
+ -dNOPAUSE -dBATCH -K2000000 -dClusterJob -dJOBSERVER<br>
+ /home/regression/cluster/tests_private/comparefiles/Bug691425.pdf<br>
+<br>
+ SEGVs due to a buffer overrun.<br>
+<br>
+ We are attempting to copy a list of up to GX_DEVICE_MAX_SEPARATIONS<br>
+ spot colors for the page into a list that's only GX_SOFT_MAX_SPOTS<br>
+ long.<br>
+<br>
+ We just extend the storage here to cope.<br>
+<br>
+base/gxclist.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-15 11:50:27 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=105891fadfa649a7b0e3196cc6b0a9865fbf3cac">105891fadfa649a7b0e3196cc6b0a9865fbf3cac</a>
+<blockquote>
+<p>
+ Fix SEGV seen in -dUseCIEColor testing.<br>
+<br>
+ The following test fails with a SEGV in overnight testing:<br>
+<br>
+ tests_private/ps/ps3cet/30-07.PS.psdcmyk.300.1<br>
+<br>
+ I can reproduce the problem with this call:<br>
+<br>
+ membin/gs -Ilib -sOutputFile=out.%d.psd -dUseCIEColor -dMaxBitmap=10000<br>
+ -sDEVICE=psdcmyk -r300 -Z: -sDEFAULTPAPERSIZE=letter -dNOPAUSE -dBATCH<br>
+ -K2000000 -dClusterJob -dJOBSERVER -dCETMODE %rom%Resource/Init/gs_cet.ps<br>
+ tests_private/ps/ps3cet/30-07.PS<br>
+<br>
+ (with a hacked version of Memento so that blocks aren't all put into<br>
+ their own chunk).<br>
+<br>
+ The problem is that when a shading is built it contains a set of<br>
+ params, one of which is a reference to the cie_joint_caches<br>
+ structure. This structure is held in a chunk of memory allocated<br>
+ from pgs-&gt;memory. This entire chunk of memory goes away when an<br>
+ l2restore happens. The built shading, however, is referenced by<br>
+ a PS object that can (and does) outlive this.<br>
+<br>
+ When a gc happens, it follows the pointer as part of the enumeration<br>
+ and crashes due to it having been freed already.<br>
+<br>
+ The fix implemented here, is to add a new graphics lib entrypoint<br>
+ that returns a reference to a copy of the current caches, allocated<br>
+ in a given memory space; we use that to get a reference to the<br>
+ caches in the same memory space (and hence with the same lifespan<br>
+ as) the shading.<br>
+<br>
+base/gscie.c<br>
+base/gscie.h<br>
+psi/zshade.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-12 16:53:58 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7e9df44328a8a6796a83331a4ab5f9b31091a02c">7e9df44328a8a6796a83331a4ab5f9b31091a02c</a>
+<blockquote>
+<p>
+ Fix SEGV with psdcmykog device and files with &gt; 7 spots.<br>
+<br>
+ Example invocation:<br>
+<br>
+ membin/gs -Ilib -sOutputFile=out.%d.psd -dMaxBitmap=10000<br>
+ -sDEVICE=psdcmykog -r600 -Z: -sDEFAULTPAPERSIZE=letter<br>
+ -dNOPAUSE -dBATCH -K2000000 -dClusterJob -dJOBSERVER<br>
+ ./tests_private/comparefiles/Bug693541.pdf<br>
+<br>
+ The PDF14 buffers are set up to have dev-&gt;color_info.num_components<br>
+ planes. When these buffers are written into, components 0 to num_spots-1<br>
+ inclusive are written. If num_spots &gt; num_components, we overwrite<br>
+ data.<br>
+<br>
+ Devices such as psdcmyk expand num_components to accomodate the<br>
+ number of spots found on the page. Devices such as psdcmykog<br>
+ do not; they stick with the number of spots they know about to<br>
+ start with (i.e. 2).<br>
+<br>
+ Accordingly, if we run a file through with (say) 11 spots on the<br>
+ page, with a psdcmykog device, the pdf14 device is setup with<br>
+ num_comps = 7 (6+alpha), but the number of spots is taken as<br>
+ the number of spots on the page (11), and thus we have memory<br>
+ overwrites.<br>
+<br>
+ The fix attempted here is to set the number of spots to be<br>
+ num_comps - number_of_standard_comps.<br>
+<br>
+base/gdevp14.c<br>
+base/gdevp14.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-03 20:24:24 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6b0aab1de02cfc44515ff05f70be066bcac7f504">6b0aab1de02cfc44515ff05f70be066bcac7f504</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks in transfer_raster_row.<br>
+<br>
+ Prevent several memory leaks in transfer_raster_row by releasing graphic state.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15010 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.0670<br>
+<br>
+pcl/pcl/rtraster.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-10 14:19:23 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3bce47c5094c4e200d2200ebd1b081a4dd943215">3bce47c5094c4e200d2200ebd1b081a4dd943215</a>
+<blockquote>
+<p>
+ Fix CAL halftoning crash due to unaligned data buffer.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-09 14:00:36 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0c6f6eb9bd630d594aae0ef7b58aa75253bf52ed">0c6f6eb9bd630d594aae0ef7b58aa75253bf52ed</a>
+<blockquote>
+<p>
+ Reference count image colorspaces in XPS.<br>
+<br>
+ This avoids leaks.<br>
+<br>
+xps/xpsanalyze.c<br>
+xps/xpscolor.c<br>
+xps/xpsglyphs.c<br>
+xps/xpsgradient.c<br>
+xps/xpsimage.c<br>
+xps/xpsjpeg.c<br>
+xps/xpsjxr.c<br>
+xps/xpspath.c<br>
+xps/xpspng.c<br>
+xps/xpstiff.c<br>
+xps/xpstop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-08 19:40:28 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ab4cea734dca75cde0ad5d39ad2964c9343e8c91">ab4cea734dca75cde0ad5d39ad2964c9343e8c91</a>
+<blockquote>
+<p>
+ XPS: Avoid leaking scanline buffer on jpeg decompression.<br>
+<br>
+xps/xpsjpeg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-08 11:33:55 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5c1311ed4dbfb159c9b2304c26b9311834a72bd4">5c1311ed4dbfb159c9b2304c26b9311834a72bd4</a>
+<blockquote>
+<p>
+ Remove a couple of macros<br>
+<br>
+base/gxchar.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-08 19:20:18 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a116672f813da107719df28057b624ce434e163c">a116672f813da107719df28057b624ce434e163c</a>
+<blockquote>
+<p>
+ Fix leak of buffer from scaler.<br>
+<br>
+ This was being hidden by gc, but shows up in xps.<br>
+<br>
+base/siscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-08 17:30:01 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=23f28069c8b342cc03de65d8b90029a4b3548010">23f28069c8b342cc03de65d8b90029a4b3548010</a>
+<blockquote>
+<p>
+ Really fix CAL makeflags for NEON and SSE.<br>
+<br>
+Makefile.in<br>
+base/cal.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-08 17:29:40 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c0d136b659b6e54017f57877068206bee62e1fa1">c0d136b659b6e54017f57877068206bee62e1fa1</a>
+<blockquote>
+<p>
+ Fix typo in PRI definitions.<br>
+<br>
+base/stdint_.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-08 16:49:17 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f0c043ead481dd780c916ddd088baf7abe2a2665">f0c043ead481dd780c916ddd088baf7abe2a2665</a>
+<blockquote>
+<p>
+ pdfwrite - fix a memory leak<br>
+<br>
+ pcs is a local variable and when it goes out of scope if it still holds<br>
+ a reference to the colour space, it will leak.<br>
+<br>
+devices/vector/gdevpdfb.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-08 16:38:09 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a77d1aef180a2dce12cefc039f7fc3dffd69af98">a77d1aef180a2dce12cefc039f7fc3dffd69af98</a>
+<blockquote>
+<p>
+ Fix CAL NEON detection.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-08 15:46:55 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c454bf4c1e6eb6d64508234dbdd6f29ceea184c3">c454bf4c1e6eb6d64508234dbdd6f29ceea184c3</a>
+<blockquote>
+<p>
+ Bug 701284: Fix more path leakages, this time in pdf14.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-08 14:58:36 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0ca58b97aa19d25ede275cc6447dc32815205263">0ca58b97aa19d25ede275cc6447dc32815205263</a>
+<blockquote>
+<p>
+ Bug 701284: Fix clipping path memory leaks<br>
+<br>
+base/gxclrast.c<br>
+base/gxcpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-06 18:34:47 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9d410dc41277401d48f4dd94dd50391c4a4c79b0">9d410dc41277401d48f4dd94dd50391c4a4c79b0</a>
+<blockquote>
+<p>
+ Fix CAL builds to pass appropriate compiler flags<br>
+<br>
+Makefile.in<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-05 19:36:34 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c734f19d7780cac16b89ced9924ad18bf1c1b380">c734f19d7780cac16b89ced9924ad18bf1c1b380</a>
+<blockquote>
+<p>
+ Fix memory leak in pdf14_tile_pattern_fill in non-GC languages.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-05 19:35:58 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d181151975f0ee13162cc03865c0cc5f58931823">d181151975f0ee13162cc03865c0cc5f58931823</a>
+<blockquote>
+<p>
+ Fix memory leaks seen in XPS; pattern cache and start_part.<br>
+<br>
+xps/xpstop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-05 19:35:28 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f19453e0f1ced6eb0273f4eabc4e618553c49925">f19453e0f1ced6eb0273f4eabc4e618553c49925</a>
+<blockquote>
+<p>
+ xps_free_font wasn't freeing font-&gt;data causing leaks.<br>
+<br>
+xps/xpsfont.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-05 19:34:56 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e05305f8d8e6222250f18daf9b437b7faee8ebee">e05305f8d8e6222250f18daf9b437b7faee8ebee</a>
+<blockquote>
+<p>
+ Destructors should cope with NULL.<br>
+<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-04 18:52:08 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dd2bd7b4ca1886a4f3c58afbdacbb93831c57e1b">dd2bd7b4ca1886a4f3c58afbdacbb93831c57e1b</a>
+<blockquote>
+<p>
+ Bug 701284: Fix leak of pdf14device in xps.<br>
+<br>
+ The pdf14device is created and then &quot;retained&quot;. This is required<br>
+ for gs, because postscript can call &quot;currentdevice&quot; and get a<br>
+ non reference counted pointer to a device. It is cleared up<br>
+ correctly because of gc.<br>
+<br>
+ Other languages have no gc, and so leak. The fix is to enable<br>
+ those languages to get the pdf14device &quot;unretained&quot;. We add an<br>
+ graphics lib call to allow this to happen.<br>
+<br>
+ Transparent Patterns also create pdf14devices, which are again<br>
+ retained, despite not needing to be. In gs this causes no problems<br>
+ as they are cleared by the restore, but in other languages they<br>
+ leak. We make them unretained here, with no ill effects.<br>
+<br>
+base/gstrans.c<br>
+base/gstrans.h<br>
+base/gxpcmap.c<br>
+psi/zpcolor.c<br>
+psi/ztrans.c<br>
+xps/xpspage.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-04 08:47:15 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=47a4fab32690cd2f0aba92f37fc7f03b4069460a">47a4fab32690cd2f0aba92f37fc7f03b4069460a</a>
+<blockquote>
+<p>
+ Bug 701288: Handle SEAC ligature glyph metrics correctly.<br>
+<br>
+ As originally intended, a Type 1 SEAC charstring would be used for an accented<br>
+ glyph (like an a-caron, or u-umlaut) where the advance with of the SEAC glyph<br>
+ is the same as that of the 'base' glyph ('a' or 'u').<br>
+<br>
+ It this case, it is not uncommon for the SEAC to skip using an (H)SBW op code<br>
+ and rely on the one from the base glyph.<br>
+<br>
+ But out of spec fonts also use SEAC glyphs ligature glyphs (like 'oe' or 'fi'),<br>
+ and in those cases the overall advance width is greater than that of the 'base'<br>
+ glyph.<br>
+<br>
+ In this case, we have to allow for the SEAC glyph having included an (H)SBW and<br>
+ if it has, retain those values, rather than those from the base glyph.<br>
+<br>
+freetype/src/psaux/psintrp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-02 17:15:12 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=491a1637f11c84ad47d83d35eba510ac6d0c47f0">491a1637f11c84ad47d83d35eba510ac6d0c47f0</a>
+<blockquote>
+<p>
+ Move to size_t in allocations.<br>
+<br>
+base/gsalloc.c<br>
+base/gsalloc.h<br>
+base/gsmalloc.c<br>
+base/gsmalloc.h<br>
+base/gsmchunk.c<br>
+base/gsmdebug.h<br>
+base/gsmemory.c<br>
+base/gsmemory.h<br>
+base/gsmemret.c<br>
+base/gsnogc.c<br>
+base/gsstype.h<br>
+base/gxalloc.h<br>
+base/gxobj.h<br>
+base/mkromfs.c<br>
+psi/ilocate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-03 18:16:25 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=25fbeb3e1f4ba5ca7ecafd7a24b7be4079113e7c">25fbeb3e1f4ba5ca7ecafd7a24b7be4079113e7c</a>
+<blockquote>
+<p>
+ Squash warning in compile time assert.<br>
+<br>
+psi/iapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-03 18:01:01 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7dfee126567be1859f4ca1637c256b4179a571b8">7dfee126567be1859f4ca1637c256b4179a571b8</a>
+<blockquote>
+<p>
+ Fix missing const with fs_file_open_printer.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-03 18:00:28 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=378fd9840e957c3a160665483cc537d6f6e860bf">378fd9840e957c3a160665483cc537d6f6e860bf</a>
+<blockquote>
+<p>
+ Squash some build warnings with debug prints.<br>
+<br>
+base/gsicc_cache.c<br>
+base/gsicc_profilecache.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-03 15:39:15 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e3dd119d53361d09fa30ca13cce4a97869ba0f8d">e3dd119d53361d09fa30ca13cce4a97869ba0f8d</a>
+<blockquote>
+<p>
+ Add printf format specifier macros for size_t.<br>
+<br>
+ Sadly, it is not enough to have definitions that match<br>
+ the sizes; gcc will give a warning if the types don't match.<br>
+<br>
+base/stdint_.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-03 15:23:46 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=761a8b513a28a9c4f4f1e83150556e7407f0d74a">761a8b513a28a9c4f4f1e83150556e7407f0d74a</a>
+<blockquote>
+<p>
+ Add size_t definitions to genarch.<br>
+<br>
+arch/windows-arm-msvc.h<br>
+arch/windows-x64-msvc.h<br>
+arch/windows-x86-msvc.h<br>
+base/genarch.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-27 16:48:06 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d306e93d487a6539804c6343986bcbca2ecc37a8">d306e93d487a6539804c6343986bcbca2ecc37a8</a>
+<blockquote>
+<p>
+ Rework ROP transparency<br>
+<br>
+ Rework ROP behaviour with transparency based upon the results<br>
+ from roptest.pxl seen on an HP printer.<br>
+<br>
+ The old style ROP transparency code used to treat white pixels<br>
+ as special. The new style code does everything in boolean logic<br>
+ by modifying the ROP that is used when S or T pixels are set to<br>
+ be transparent.<br>
+<br>
+ This enables us to rip out several cases from the ROP<br>
+ processing loops, as we never need to check for transparent<br>
+ pixel values anymore.<br>
+<br>
+base/gdevdrop.c<br>
+base/gdevmpla.c<br>
+base/gdevmr1.c<br>
+base/gdevmr2n.c<br>
+base/gdevmr8n.c<br>
+base/gdevmrop.h<br>
+base/gdevplnx.c<br>
+base/gsroprun.c<br>
+base/gsroprun24.h<br>
+base/gsroprun8.h<br>
+base/gsropt.h<br>
+base/gxdcolor.c<br>
+base/gxipixel.c<br>
+devices/vector/gdevpdfi.c<br>
+devices/vector/gdevpx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-26 18:51:31 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=054f4df9b5f8bb09c252841f0c3256b9adc60f0a">054f4df9b5f8bb09c252841f0c3256b9adc60f0a</a>
+<blockquote>
+<p>
+ Add another couple of SSE ROP cases.<br>
+<br>
+base/gsroprun.c<br>
+base/gsroprun8.h<br>
+base/gsropt.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2018-01-11 17:57:29 +0000
+</strong>
+<br>Robin Watts &lt;robin.watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=82e2843149b32e61cfde7861ac67a51014538f4f">82e2843149b32e61cfde7861ac67a51014538f4f</a>
+<blockquote>
+<p>
+ ROP optimisation: Fold 24bpp ROPs down to 8 bit where possible.<br>
+<br>
+ This increases line length.<br>
+<br>
+base/gsroprun.c<br>
+base/gsroprun8.h<br>
+base/gsropt.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-02 17:29:54 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=470897e484fb0bfaa8553e0ccd5b9db91eda008b">470897e484fb0bfaa8553e0ccd5b9db91eda008b</a>
+<blockquote>
+<p>
+ Avoid warning due to casting int to double.<br>
+<br>
+ Use size_t properly, and no call to abs is required.<br>
+<br>
+devices/vector/gdevpdfe.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-02 17:14:33 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6c986cd9f93008992344d2cd5be224af13e1c980">6c986cd9f93008992344d2cd5be224af13e1c980</a>
+<blockquote>
+<p>
+ Squish an annoying implicit cast warning.<br>
+<br>
+ Do it explicitly.<br>
+<br>
+base/gsicc_cache.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-02 17:13:48 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=45e765e59a45b46dcb05e8c729689a7c0574a48c">45e765e59a45b46dcb05e8c729689a7c0574a48c</a>
+<blockquote>
+<p>
+ Fix some warnings caused by the gs FS api commit.<br>
+<br>
+base/gp.h<br>
+base/gp_dvx.c<br>
+base/gp_msprn.c<br>
+base/gp_mswin.c<br>
+base/gp_os2.c<br>
+base/gp_os2.h<br>
+base/gp_os9.c<br>
+base/gp_unix.c<br>
+base/gp_winfs2.c<br>
+base/gslibctx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-01 21:31:03 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f209fb3a0f50cd0a9974d8627a4ac7f358f60c8a">f209fb3a0f50cd0a9974d8627a4ac7f358f60c8a</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent SEGV in check_pattern_rendering.<br>
+<br>
+ Prevent SEGV by checking for check_pattern_rendering being called with NULL pattern.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=16764 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.0825<br>
+<br>
+pcl/pcl/pcpatrn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-01 21:08:30 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e6c50c878d622974e7bb2438327e5363b9419875">e6c50c878d622974e7bb2438327e5363b9419875</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent SEGV due to double freeing.<br>
+<br>
+ On error pl_dict_put now consumes the new value so these extra calls<br>
+ to free memory are no longer needed.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=1987 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.0825<br>
+<br>
+pcl/pcl/pcsymbol.c<br>
+pcl/pl/pllfont.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-02 15:36:07 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5ef3a531d00715c2b8bcfd38401515d4f60bfec5">5ef3a531d00715c2b8bcfd38401515d4f60bfec5</a>
+<blockquote>
+<p>
+ Rejig order of operations from commit 47b1b7f971a76<br>
+<br>
+ I'd forgotten that setcolorspace would blow away the current color, so we need<br>
+ to get two sets of current color values, before setting the fill and stroke<br>
+ color spaces, and then setting the file and stroke colors.<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-24 13:23:34 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=93fc44b3426cd771ee0a9358da805cd2ac93a649">93fc44b3426cd771ee0a9358da805cd2ac93a649</a>
+<blockquote>
+<p>
+ Fix gsapi exposure through the DLL.<br>
+<br>
+ Lots of functions that should have been exposed, weren't.<br>
+<br>
+psi/dpmain.c<br>
+psi/dwdll.c<br>
+psi/dwdll.h<br>
+psi/gsdll32.def<br>
+psi/gsdll32metro.def<br>
+psi/gsdll64.def<br>
+psi/gsdll64metro.def<br>
+psi/gsdllARM32metro.def<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-19 18:43:33 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e6966d10ec319a25ad91e4aa53a783edede7b62b">e6966d10ec319a25ad91e4aa53a783edede7b62b</a>
+<blockquote>
+<p>
+ Add gsapi call to introduce new 'Filing Systems' to gs.<br>
+<br>
+ Still to do - Example?<br>
+<br>
+base/gdevpipe.c<br>
+base/gp.h<br>
+base/gp_mshdl.c<br>
+base/gp_msprn.c<br>
+base/gp_os2pr.c<br>
+base/gpmisc.c<br>
+base/gsdevice.c<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+base/stdpre.h<br>
+doc/API.htm<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-02 11:12:04 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e585a31732e966f1508b64f04cacbaf8ede65c68">e585a31732e966f1508b64f04cacbaf8ede65c68</a>
+<blockquote>
+<p>
+ Fix an out-of-date comment about devices in gstates<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-02 11:06:03 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=47b1b7f971a760ff311bf3c3d8a02e2a2d53ac7d">47b1b7f971a760ff311bf3c3d8a02e2a2d53ac7d</a>
+<blockquote>
+<p>
+ PDF interp: use initgraphics for initial color(space)<br>
+<br>
+ Previously, the PDF interpreter explicitly set the initial color and color space<br>
+ for each page ('0 g 0 G') despite initgraphics being called, and also setting<br>
+ the color(space)s correctly.<br>
+<br>
+ Unfortunately, removing that completely causes problems with pdfwrite's<br>
+ transparency handling, so we reuse the already installed values in place<br>
+ of explicitly setting absolute values.<br>
+<br>
+ This should allow for preview-latex's (slightly hacky) method of custom coloring<br>
+ 'special' PDFs for previewing.<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-25 10:43:30 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=94cc50cf64e0899c5d415e6ac1e6ea725fc13502">94cc50cf64e0899c5d415e6ac1e6ea725fc13502</a>
+<blockquote>
+<p>
+ Fix DELAYBIND<br>
+<br>
+ We now undefine a *lot* of non-standard/internal operators (and other things) as<br>
+ we go, and often we rely on bind to ensure that the names are replaced with the<br>
+ operator objects rather than names.<br>
+<br>
+ This falls over when DELAYBIND is in force, and the call to .bindnow happens<br>
+ *after* the undefining occurs.<br>
+<br>
+ To solve this, all the undefining happens through a procedure: .addtoundeflist.<br>
+<br>
+ Under normal operation, that simply undefines as we go, and things work the same<br>
+ as always.<br>
+<br>
+ Under DELAYBIND .addtoundeflist accumulates a list of names to undefine, and the<br>
+ dictionaries from where they should be removed, and on the .bindnow call, then<br>
+ .applyundeflist is called which rattles through the lists removing the names<br>
+ from the dictionaries.<br>
+<br>
+Resource/Init/gs_btokn.ps<br>
+Resource/Init/gs_cet.ps<br>
+Resource/Init/gs_cidfn.ps<br>
+Resource/Init/gs_dps2.ps<br>
+Resource/Init/gs_epsf.ps<br>
+Resource/Init/gs_fapi.ps<br>
+Resource/Init/gs_fonts.ps<br>
+Resource/Init/gs_img.ps<br>
+Resource/Init/gs_init.ps<br>
+Resource/Init/gs_lev2.ps<br>
+Resource/Init/gs_ll3.ps<br>
+Resource/Init/gs_res.ps<br>
+Resource/Init/gs_resmp.ps<br>
+Resource/Init/gs_setpd.ps<br>
+Resource/Init/gs_ttf.ps<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-02 10:36:18 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=871b8d8d5a26205a7a3c05ea9abf060a272fd6fb">871b8d8d5a26205a7a3c05ea9abf060a272fd6fb</a>
+<blockquote>
+<p>
+ Tweak path access control logic<br>
+<br>
+ Correctly handle the difference between permitted paths of the forms:<br>
+ 'path', 'path/' and 'path/*'.<br>
+<br>
+ The previous code effectively treated 'path/' and 'path/*' the same.<br>
+<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-20 12:24:04 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1b83ee86dc775a9d7972d94041e226893983b264">1b83ee86dc775a9d7972d94041e226893983b264</a>
+<blockquote>
+<p>
+ File access control: handle non-null terminated paths<br>
+<br>
+ Add an access control checking API call that can take a non-null terminated<br>
+ string (i.e. takes a string and length).<br>
+<br>
+ The reason being the strings returned from gp_enumerate_files* are not null<br>
+ terminated, and we need to filter them by permissions.<br>
+<br>
+base/gp.h<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-07-01 15:27:05 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=56158b2c2d8fb9bd5e5bbb9be645fb88231c4898">56158b2c2d8fb9bd5e5bbb9be645fb88231c4898</a>
+<blockquote>
+<p>
+ Fix buffer overrun in mswinpr2 device<br>
+<br>
+ Bug #701281 &quot;ACTIONABLE_HEAP_CORRUPTION when try print with -sOutputFile&quot;<br>
+<br>
+ The mswinprs2 device uses the very old 16-bit GetProfileStringW() API<br>
+ call to get the 'Devices' in order to look for a specified printer.<br>
+<br>
+ The code however assumes that the buffer length passed is in bytes, and<br>
+ in fact it should be in wchar_. This means that a sufficiently large<br>
+ Devices section could overrun the buffer, as it thinks there are more<br>
+ wchar_t available than there are.<br>
+<br>
+ in addition, if the section is very large we could run out of space in<br>
+ the string altogether, and then would be unable to find the designated<br>
+ printer.<br>
+<br>
+ This commit alters the code so that the length passed to GetProfileStringW<br>
+ is in wchar_t and also examines the returned length. If the returned<br>
+ length indicates possible truncation of the return, then we free the<br>
+ buffer, increase its size by 4Kb and try again. Repeatedly until we<br>
+ either exhaust memory or get a large enough buffer.<br>
+<br>
+devices/gdevwpr2.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-18 21:21:10 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=90ae60d1669ebf01228d05cdb58c248a2f971d07">90ae60d1669ebf01228d05cdb58c248a2f971d07</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks in pcl_define_symbol_set.<br>
+<br>
+ Cleanup symbol set for all error returns.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15206 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.0460<br>
+<br>
+pcl/pcl/pcsymbol.c<br>
+pcl/pl/pldict.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-25 15:28:48 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=12ffa0f40b6849d97c1e4dc49287bca56f513f7f">12ffa0f40b6849d97c1e4dc49287bca56f513f7f</a>
+<blockquote>
+<p>
+ pdfwrite - fix an error path<br>
+<br>
+ This turned up while working on the PDF interpreter in C. Previously we<br>
+ had no examples which exercised this error pathway, because it was only<br>
+ used by PCL and none of our PCL examples threw an error here.<br>
+<br>
+ If we've started accumulating a CharProc, then we have started a pdf<br>
+ substream. If we get an error, then we need to terminate that substream<br>
+ before returning (the caller can't know that the substream was begun).<br>
+<br>
+devices/vector/gdevpdtt.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-11 19:04:21 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f59b4dc4f512839fd73718de535da99c6085da3">4f59b4dc4f512839fd73718de535da99c6085da3</a>
+<blockquote>
+<p>
+ First steps for using SSE for ROPs.<br>
+<br>
+base/gsroprun.c<br>
+base/gsroprun8.h<br>
+base/gsropt.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2018-04-19 12:45:14 +0100
+</strong>
+<br>Robin Watts &lt;robin.watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=140a9359f3cc6739c7caf0796430bc3112cb3cd5">140a9359f3cc6739c7caf0796430bc3112cb3cd5</a>
+<blockquote>
+<p>
+ Initial import of CAL.<br>
+<br>
+Makefile.in<br>
+base/cal.mak<br>
+base/gdevdrop.c<br>
+base/gs.mak<br>
+base/gxicolor.c<br>
+base/gxidata.c<br>
+base/gximage.h<br>
+base/gximono.c<br>
+base/gxiscale.c<br>
+base/lib.mak<br>
+base/siscale_cal.c<br>
+base/sisparam.h<br>
+base/unix-gcc.mak<br>
+base/winlib.mak<br>
+configure.ac<br>
+psi/msvc.mak<br>
+windows/ghostscript.vcproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-24 16:35:31 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dd75f619d0ae98e21e30ad89d2e7d2cd4277cc2e">dd75f619d0ae98e21e30ad89d2e7d2cd4277cc2e</a>
+<blockquote>
+<p>
+ Preparatory work for the PDF interpreter in C<br>
+<br>
+ Currently the pdfwrite device assumes that a font with FontType 3<br>
+ (ft_user_defined) *will* require an exit to the interpreter. The<br>
+ CharProc capture is set up so that this happens in a complicated dance.<br>
+<br>
+ When we have the PDF interpreted in C we do not need to exit to the<br>
+ interpreter, and so we need to capture the CharProc in the same way we<br>
+ do for PCL 'user defined' fonts (eg the HPGL stick font and PCL bitmap<br>
+ fonts).<br>
+<br>
+ Obviously to be able to do this we need to be able to differentiate<br>
+ between a PostScript type 3 font (or a type 3 font built by the PostScript<br>
+ PDF interpreter) and a type 3 font built by the C PDF interpreter. So<br>
+ the first thing we do is add a new ft_PDF_user_defined font tyep.<br>
+<br>
+ Then update the graphics library so that it treats the PDF type 3 font<br>
+ in exactly the same way as it does a PostScript type 3 font.<br>
+<br>
+ In the pdfwrite device, in general we want to treat a PDF type 3 font<br>
+ as being the same as a PS type 3.<br>
+<br>
+ Finally, in pdf_text_process() the bulk of the real work. If we have a<br>
+ ft_PDF_user_defined font, then set 'early_accumulator' which means we<br>
+ push the accumulator early, because we won't need to exit to the<br>
+ interpreter. This means that in the 'early_accumulator' branch we need<br>
+ to account for the possibility that the text operation won't be a<br>
+ 'TEXT_FROM_CHARS' (it always is for PCL, which is why this didn't need<br>
+ to be handled before). There was also some bad error handling in here,<br>
+ we do a gs_gsave() which is undone by a gs_grestore() in comp[ete_charproc()<br>
+ but if we had an error before that we would not undo the gs_gsave whhich<br>
+ could lead to ridiculous levels of nested gsaves.<br>
+<br>
+base/gstext.c<br>
+base/gxchar.c<br>
+base/gxftype.h<br>
+base/gxpaint.c<br>
+devices/vector/gdevpdtc.c<br>
+devices/vector/gdevpdtd.c<br>
+devices/vector/gdevpdte.c<br>
+devices/vector/gdevpdtf.c<br>
+devices/vector/gdevpdti.c<br>
+devices/vector/gdevpdts.c<br>
+devices/vector/gdevpdtt.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-22 10:49:31 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9055511a9ca3600ee8680ea2b35b2f31f708bd40">9055511a9ca3600ee8680ea2b35b2f31f708bd40</a>
+<blockquote>
+<p>
+ Improve -dFILTERIMAGE<br>
+<br>
+ Previously if we were supplied too much image data, we could read off<br>
+ the end of the supplied data and consume input that should have been<br>
+ interpreted.<br>
+<br>
+ This limits the consumption of data so that we don't read more than we<br>
+ expected.<br>
+<br>
+ NB! We still don't support type 3 images, as that requires us to process<br>
+ 2 images at once.<br>
+<br>
+base/gdevoflt.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-19 19:11:43 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f3f5aeb40be1562f05864705b0a04fbccae6fec">4f3f5aeb40be1562f05864705b0a04fbccae6fec</a>
+<blockquote>
+<p>
+ Remove unused gsapi functions.<br>
+<br>
+ gsapi_get_device_memory and gsapi_set_device aren't used, so<br>
+ do away with them.<br>
+<br>
+psi/dwdll.h<br>
+psi/dwnodll.c<br>
+psi/gsdll2.def<br>
+psi/gsdll32.def<br>
+psi/gsdll32metro.def<br>
+psi/gsdll64.def<br>
+psi/gsdll64metro.def<br>
+psi/gsdllARM32metro.def<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-19 18:43:09 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c1500bb8ed62224e8b372fca76ed8e411cc447d1">c1500bb8ed62224e8b372fca76ed8e411cc447d1</a>
+<blockquote>
+<p>
+ More gp_file vs FILE fixes.<br>
+<br>
+base/gp_vms.c<br>
+contrib/pcl3/src/pcl3opts.c<br>
+contrib/pscolor/test.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-20 19:22:24 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ae73b49631e657b5ed5c3bf7936febf64a3f8b3c">ae73b49631e657b5ed5c3bf7936febf64a3f8b3c</a>
+<blockquote>
+<p>
+ Fix Indexed 'install' procedure<br>
+<br>
+ The Install procedure for Indexed spaces was calling the 'install'<br>
+ procedure for its base space. This is incorrect. Colour spaces are<br>
+ supposed to be set from the lowest (most 'base') to the highest. So the<br>
+ Indexed space's base space should already be set, and installed. Trying<br>
+ to set it again is a bad thing and can cause Seg Faults.<br>
+<br>
+ However, the PCL interpreter relies on the Indexed space doing this,<br>
+ contrary to the expected behaviour it does not set the base space before<br>
+ setting the Indexed space, and relies on the Indexed space to 'install'<br>
+ the base space.<br>
+<br>
+ Setting the base space caused unexpected (and inexplicable) differences<br>
+ in halftoned output. I 'suspect' that this is because it sets the three<br>
+ initial components of pgs-&gt;color[0].ccolor, whereas the previous code<br>
+ only resulted in setting the initial value.<br>
+<br>
+ So instead, call the base space's 'install' procedure directly, this<br>
+ doesn't set the colour values (which gs_setcolorspace does) and results<br>
+ in no differences.<br>
+<br>
+ For me this resolves the crashes that were being seen in the 32-bit<br>
+ builds of Ghostscript and shows no differences.<br>
+<br>
+base/gscolor2.c<br>
+pcl/pcl/pcindxed.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-19 15:14:46 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=108dd018b746d33ad06a7ee863fae56cbeb1fd80">108dd018b746d33ad06a7ee863fae56cbeb1fd80</a>
+<blockquote>
+<p>
+ &quot;Fix&quot; contrib and test uses of gp_fopen.<br>
+<br>
+ Here we fix a lot of contrib devices that had been broken by the<br>
+ changes to gp_file. I believe they all should work OK now.<br>
+<br>
+ One of the routines was calling lib_fopen in an unsupported way; this<br>
+ can't easily be fixed, so we just call gp_fopen instead now.<br>
+<br>
+ We also &quot;fix&quot; some test code that was calling gp_fopen and then doing<br>
+ things that we can't easily do with a gp_file *. This code has reverted<br>
+ to using FILE *'s and fopen - this might cause issues on compilation as<br>
+ this code is untested, but it's better than compiling to give code that<br>
+ crashes.<br>
+<br>
+base/gp_vms.c<br>
+contrib/japanese/dviprlib.c<br>
+contrib/japanese/dviprlib.h<br>
+contrib/japanese/gdevdmpr.c<br>
+contrib/pscolor/test.c<br>
+devices/vector/gdevtxtw.c<br>
+psi/gserver.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-19 12:51:38 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2c6484de7376ce4e24d87f1eb4c6f76360c9b928">2c6484de7376ce4e24d87f1eb4c6f76360c9b928</a>
+<blockquote>
+<p>
+ Fix debug code to call gp_fopen correctly.<br>
+<br>
+ These were missed during the conversion to gp_file.<br>
+<br>
+base/gdevp14.c<br>
+base/gsicc_create.c<br>
+base/gsicc_lcms2.c<br>
+base/gsicc_lcms2mt.c<br>
+base/gsicc_manage.c<br>
+base/gsicc_manage.h<br>
+base/gsroprun.c<br>
+base/gxblend.c<br>
+base/gxblend.h<br>
+base/gxblend1.c<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-19 09:42:10 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b38aad870c573f7cafe99a95c3b931c1dc6cd132">b38aad870c573f7cafe99a95c3b931c1dc6cd132</a>
+<blockquote>
+<p>
+ Remove some debug code<br>
+<br>
+Resource/Init/gs_init.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-18 10:54:47 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d4d7d6948e41c2573b47645191dbb7e3877f0597">d4d7d6948e41c2573b47645191dbb7e3877f0597</a>
+<blockquote>
+<p>
+ Fix up some coverity issues, and other warnings<br>
+<br>
+ CIDs: 341120, 341119, 341118, 341117, 341116, 341115, 341114, 341113, 341112,<br>
+ 341111, 341110, 341109, 341108, 341107, 341106, 341105, 341104, 341103, 341102,<br>
+ 341101.<br>
+<br>
+ Mostly examples of gp_fseek and sscanf ignoring return values.<br>
+<br>
+base/gp_unifs.c<br>
+base/mkromfs.c<br>
+contrib/pcl3/eprn/pagecount.c<br>
+contrib/pcl3/src/gdevpcl3.c<br>
+contrib/pcl3/src/pclgen.c<br>
+contrib/pcl3/src/pclgen.h<br>
+devices/gdevdfax.c<br>
+devices/gdevpsd.c<br>
+devices/vector/gdevpdf.c<br>
+devices/vector/gdevxps.c<br>
+pcl/pl/pjparse.c<br>
+pcl/pl/plmain.c<br>
+psi/imainarg.c<br>
+psi/iutil.c<br>
+xps/xpszip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-14 09:10:45 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=29da5d218dac7e0975c03a81982fdc33b5eba20d">29da5d218dac7e0975c03a81982fdc33b5eba20d</a>
+<blockquote>
+<p>
+ Make sure font Decoding is in the correct VM mode<br>
+<br>
+Resource/Init/gs_fntem.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-14 09:10:04 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=35b8b94e3ac3cced1b415c92b091c6959240755e">35b8b94e3ac3cced1b415c92b091c6959240755e</a>
+<blockquote>
+<p>
+ Remove stray exec and some pointless immediate evaluations<br>
+<br>
+Resource/Init/gs_fapi.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-14 09:16:53 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=adc94490502a360c3bdf8843888f784d57066c0e">adc94490502a360c3bdf8843888f784d57066c0e</a>
+<blockquote>
+<p>
+ PDF interpreter - improve repair of broken PDF files<br>
+<br>
+ If a file had a startxref token which was not followed by any further<br>
+ actual tokens (eg nothing but % comment lines) then the repair code<br>
+ failed to account for this, and ended up trying to pop non-existent<br>
+ objects from the stack.<br>
+<br>
+ This is because the code did not test the result of the 'token' operator<br>
+ to ensure that a token had been read, it assumed one would be. In this<br>
+ commit we check the result and, if its 'false' (no token read) we don't<br>
+ attempt to pop the non-existent token from the stack, but instead follow<br>
+ the existing error path and resort to scanning the PDF file for the<br>
+ trailer dictionary.<br>
+<br>
+ In addition to fixing the customer reported file, this also fixes the<br>
+ existing test suite file<br>
+<br>
+ tests_private/pdf/sumatra/repairing_leaks_object.pdf<br>
+<br>
+Resource/Init/pdf_rbld.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-12 15:35:11 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8522db03fde6b1b514beed9d66faa839f24ebdc4">8522db03fde6b1b514beed9d66faa839f24ebdc4</a>
+<blockquote>
+<p>
+ Make .pdfexectoken not an operator<br>
+<br>
+ In a previously round of security fixes, I made .pdfexectoken an operator. That<br>
+ turns out to cause problems because we (normally) attempt to recover from errors<br>
+ in PDF files, so we don't want .pdfexectoken to cleanup the stacks in the event<br>
+ of an error.<br>
+<br>
+ In addition, the original problem this solved is solved in a more robust way<br>
+ (executeonly on the transient procedures).<br>
+<br>
+Resource/Init/pdf_base.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-11 20:29:53 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=094b9caade51b718a20b8d326fff9e0f93166cd4">094b9caade51b718a20b8d326fff9e0f93166cd4</a>
+<blockquote>
+<p>
+ Bug 698777: jbig2dec: Update information in README.<br>
+<br>
+jbig2dec/README<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-10 17:22:04 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=20a6ddad3cd42796c913ab94583fc0f0e5870281">20a6ddad3cd42796c913ab94583fc0f0e5870281</a>
+<blockquote>
+<p>
+ Fix gpdl SAFER operation.<br>
+<br>
+ -sOutputFile=foo was having the pass set as &quot;=foo&quot; due to<br>
+ me forgetting to increment the pointer. This resulted in<br>
+ many thousands of errors in the weekly SAFER test.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-10 16:24:41 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ee8ab38bab473ff1457e7f966b2733f0c829bcb1">ee8ab38bab473ff1457e7f966b2733f0c829bcb1</a>
+<blockquote>
+<p>
+ PDF interpreter - don't execute newpath when ending text blocks<br>
+<br>
+ Bug 701178 - &quot;PDF missing two bounding boxes on process&quot;<br>
+<br>
+ The missing rectangles are defind in the content stream between a<br>
+ number of BT/ET text blocks, and only finally stroked after all the<br>
+ text has been emitted.<br>
+<br>
+ Because we execute a newpath when ending a text block (to avoid dangling<br>
+ path elements from text), and prior path elements are lost.<br>
+<br>
+ This commit only executes a newpath when the text rendering mode is one<br>
+ of the 'clip' modes, as that is handled differently, and we need the<br>
+ newpath.<br>
+<br>
+ Its a pretty poor way to output the paths, and I suspect that it would<br>
+ likely run into trouble with the text clipping modes, but since those<br>
+ aren't used here its hard to tell.<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-07 13:58:25 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8eaa0856399c9b621db17e96c8f7be1e0241ab8b">8eaa0856399c9b621db17e96c8f7be1e0241ab8b</a>
+<blockquote>
+<p>
+ Fix AES-256 decryption when using owner key<br>
+<br>
+ The code for computing the decryption key for AES-256 encrypted PDF<br>
+ files was incorrect. When computing the validation check we correctly<br>
+ used the owner key if it was supplied, but for computing the actual<br>
+ decryption key we always treated the supplied password as the user<br>
+ password.<br>
+<br>
+psi/zpdf_r6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-05 09:55:46 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b31fb3c0cd7ab223d870fa1e0fb231d911b19984">b31fb3c0cd7ab223d870fa1e0fb231d911b19984</a>
+<blockquote>
+<p>
+ Modify the new gp_file API so that gp_fread etc match fread<br>
+<br>
+ The new gp_fread() and gp_fwrite() have a parameter list which (more or<br>
+ less) matches the list for the C run-time functions fread() and fwrite()<br>
+<br>
+ However, the return values do not match the returned values from the<br>
+ C runtime functions. This is because, internally, the gp_file structure<br>
+ has function pointers which only take 3 parameters instead of 4. This<br>
+ is handled by multiplying the size of the record by the number of records<br>
+ to be read/written, and then reading that many bytes.<br>
+<br>
+ Since the underlying functions are (at this time) the C runtime functions<br>
+ this means that th returned value becomes the number of bytes read<br>
+ (or written) instead of the number of *records* read/written.<br>
+<br>
+ This commit modifies that internal API so that the gp_file member<br>
+ functions take 4 parameters (thus matching both gp_fread and fread)<br>
+ and pass them to the underlying functions. The return value is then<br>
+ the number of records, as expected.<br>
+<br>
+ Should we ever encounter an implementation which doesn't match the<br>
+ C runtime fread() we could implement it by multiplying the size by the<br>
+ count (as was done prior to this commit) and then, assuming the return<br>
+ value was the number of bytes read, dividing the return value by the<br>
+ size, in order to retrieve the number of records read.<br>
+<br>
+base/gp.h<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-07 12:11:57 +0100
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ee8864ae09ff0017e5503bde1f5b52538759babc">ee8864ae09ff0017e5503bde1f5b52538759babc</a>
+<blockquote>
+<p>
+ Ensure that separation CMYK source colors managed<br>
+<br>
+ This is the separation version of the DeviceN commit<br>
+<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=0b9c45fa86f7736e7fec170a135efa83636283ba<br>
+<br>
+base/gdevp14.c<br>
+base/gscsepr.c<br>
+base/gsequivc.c<br>
+base/gxcmap.c<br>
+base/gxcmap.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-01 11:09:05 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d5e123d42718370c144a62ba10a7b715cc88b81a">d5e123d42718370c144a62ba10a7b715cc88b81a</a>
+<blockquote>
+<p>
+ Graphics library - match gsaves with grestores<br>
+<br>
+ Auditing as part of the pdfi work, when the graphics library executes<br>
+ a gs_gsave() it should match it with a gs_grestore(), even in the case<br>
+ of an error.<br>
+<br>
+ In addition, if gs_setcolorspace failed in image_PaintProc() it would<br>
+ leak the pattern enumerator. Because this is only called from PCL<br>
+ the memory is not garbage collected.<br>
+<br>
+base/gsptype1.c<br>
+base/gxchar.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-03 18:28:18 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c9a832653a91ddcdd1220fe9fbbc58839eade4aa">c9a832653a91ddcdd1220fe9fbbc58839eade4aa</a>
+<blockquote>
+<p>
+ Fix leak in gs_lib_ctx_fin.<br>
+<br>
+ When freeing gs_lib_ctx, don't remove the mem-&gt;gs_lib_ctx pointers<br>
+ until after we have finished using them. This avoids a leak.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-06-03 14:19:54 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7b052ff372bbd325676d2e1a57dfd71c33c9f677">7b052ff372bbd325676d2e1a57dfd71c33c9f677</a>
+<blockquote>
+<p>
+ Update gpdl with new file access permissions.<br>
+<br>
+ This basically involves duplicating the changes from Chris'<br>
+ gs commit. Part of this promotes a couple of static functions<br>
+ to being global ones so both implementations can call them.<br>
+<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+pcl/pl/plmain.c<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-29 15:56:20 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=650c49424529fca922519ee9cdf2086eee5cfb70">650c49424529fca922519ee9cdf2086eee5cfb70</a>
+<blockquote>
+<p>
+ Fix broken DEBUG build. Add standalone gs_log_error to mkromfs.c<br>
+<br>
+ This function is invoked for DEBUG builds by gs_note_error. We define<br>
+ an equivalent local version so we don't have to include gsmisc.obj<br>
+ (as for other utility functions such as outprintf).<br>
+<br>
+base/mkromfs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-29 13:20:39 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f5c0159d993418a8900a84e5fd946e83bdaeec73">f5c0159d993418a8900a84e5fd946e83bdaeec73</a>
+<blockquote>
+<p>
+ Fix dfaxhigh/low device with new gp_file API.<br>
+<br>
+ Arose in the &quot;all devices&quot; cluster test<br>
+<br>
+devices/gdevdfax.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-07 11:30:15 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7ecbfda92b4c8dbf6f6c2bf8fc82020a29219eff">7ecbfda92b4c8dbf6f6c2bf8fc82020a29219eff</a>
+<blockquote>
+<p>
+ Add use of new file access permissions to PS interp<br>
+<br>
+ (this is a squash of several commits from filesec branch)<br>
+<br>
+ Use errno to indicate invalidfileaccess<br>
+<br>
+ Integrate fontconfig with file access controls<br>
+<br>
+ fontconfig API has a call to retrieve all the directories about which fontconfig<br>
+ knows, so we can get those, and add them to the paths from which we're permitted<br>
+ to read.<br>
+<br>
+ Add (most of) the Postscript &quot;managed&quot; paths....<br>
+<br>
+ ...to the access controls.<br>
+<br>
+ GenericResourceDir, ICCProfilesDir (reading) and temporary file directories for<br>
+ read/write/control.<br>
+<br>
+ Add paths/files from C to the file access controls<br>
+<br>
+ The -I paths, environment variables and build time paths.<br>
+<br>
+ The command line specified output file, permit writing.<br>
+<br>
+ Lastly, the command line specified input file is added to the readable list,<br>
+ interpreted, and then removed from the list.<br>
+<br>
+ Add the FONTPATH path list to permit read access control list.<br>
+<br>
+ I opted to do this in Postscript because the list is (normally) a colon<br>
+ separated list of paths, which we split into an array of paths (in Postscript) -<br>
+ it seems sensible to do this only once, both for storage and permissions.<br>
+<br>
+ Add a non-standard string 'reverse search&quot; operator<br>
+<br>
+ The search operator searches for the first occurrence of a character code in a<br>
+ string (i.e. searches forwards from the start of the string), 'rsearch' finds<br>
+ the last instance of a character code (i.e. search backwards from the end of<br>
+ the string).<br>
+<br>
+ Fix gp_open_scratch_file_rm for access permissions<br>
+<br>
+ i.e. the same as gp_open_scratch_file<br>
+<br>
+ Handle clist file 'rewind' failures<br>
+<br>
+ 'Rewinding' clist files may involved closing and recreating the temporary files,<br>
+ which conceivably can fail, but the clist procs rewind method was a void<br>
+ function, so couldn't return an error.<br>
+<br>
+ It now can, and does return an error, and we handle the error.<br>
+<br>
+ Add file permissions support for piped output.<br>
+<br>
+ Paths from Fontmap to PermitReading list<br>
+<br>
+ cidfmap paths, add to PermitReading list<br>
+<br>
+ Add command line options for path access control addition<br>
+<br>
+ --permit-file-read<br>
+ --permit-file-write<br>
+ --permit-file-control<br>
+ --permit-file-all<br>
+<br>
+ They all take a separated list of paths (the usual platform specific ':' or ';'<br>
+ separator), and to the respective access control lists - the final 'all' option<br>
+ adds the paths to all the control lists.<br>
+<br>
+ Add file access control to the 'gp_stat' method.<br>
+<br>
+ This is complicated by the need to add the memory allocator context to the<br>
+ gp_stat parameters. To facilitate this, I've added a gs_memory_t pointer to the<br>
+ gx_io_device structure, which is set during the io device initialisation at<br>
+ startup.<br>
+<br>
+ mkromfs: Add dummy gp_stat_impl for Windows - saves quite a bit of pointless<br>
+ build upheaval<br>
+<br>
+ Add file access protection to file enumeration.<br>
+<br>
+ The low level implementation of Postscript's filenameforall (*_enumerate_files)<br>
+ needs to also honour file access protection.<br>
+<br>
+ This is has been complicated by requiring a gs_memory_t to be available where<br>
+ it wasn't previously (in order to access the gs_lib_ctx and the file permissions<br>
+ lists therein).<br>
+<br>
+ Temp<br>
+<br>
+Resource/Init/gs_cidfm.ps<br>
+Resource/Init/gs_fonts.ps<br>
+Resource/Init/gs_init.ps<br>
+base/gdevpipe.c<br>
+base/gp.h<br>
+base/gp_dosfe.c<br>
+base/gp_mshdl.c<br>
+base/gp_msprn.c<br>
+base/gp_mswin.c<br>
+base/gp_ntfs.c<br>
+base/gp_os2fs.c<br>
+base/gp_os2pr.c<br>
+base/gp_unifs.c<br>
+base/gp_unix.c<br>
+base/gp_vms.c<br>
+base/gpmisc.c<br>
+base/gsiodev.c<br>
+base/gsiodevs.c<br>
+base/gsiodisk.c<br>
+base/gsioram.c<br>
+base/gsiorom.c<br>
+base/gxclfile.c<br>
+base/gxclio.h<br>
+base/gxclist.c<br>
+base/gxclmem.c<br>
+base/gxclread.c<br>
+base/gxiodev.h<br>
+base/gxp1fill.c<br>
+base/lib.mak<br>
+base/mkromfs.c<br>
+base/stat_.h<br>
+pcl/pl/pjparse.c<br>
+pcl/pl/pllfont.c<br>
+psi/imain.c<br>
+psi/imainarg.c<br>
+psi/zdevcal.c<br>
+psi/zfile.c<br>
+psi/ziodev.c<br>
+psi/ziodev2.c<br>
+psi/ziodevsc.c<br>
+psi/zstring.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-07 18:03: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=9de16a6637b73e35f79d2d622de403b24e6502f2">9de16a6637b73e35f79d2d622de403b24e6502f2</a>
+<blockquote>
+<p>
+ Move FILE * operations behind new gp_file * API.<br>
+<br>
+ (squash of commits from filesec branch)<br>
+<br>
+ Most of this commit is donkeywork conversions of calls from<br>
+ FILE * -&gt; gp_file *, fwrite -&gt; gp_fwrite etc. Pretty much every<br>
+ device is touched, along with the clist and parsing code.<br>
+<br>
+ The more interesting changes are within gp.h (where the actual<br>
+ new API is defined), gpmisc.c (where the basic implementations<br>
+ live), and the platform specific levels (gp_mswin.c, gp_unifs.c<br>
+ etc where the platform specific implementations have been<br>
+ tweaked/renamed).<br>
+<br>
+ File opening path validation<br>
+<br>
+ All file opening routines now call a central routine for<br>
+ path validation.<br>
+<br>
+ This then consults new entries in gs_lib_ctx to see if validation<br>
+ is enabled or not. If so, it validates the paths by seeing if<br>
+ they match.<br>
+<br>
+ Simple C level functions for adding/removing/clearing paths, exposed<br>
+ through the gsapi level.<br>
+<br>
+ Add 2 postscript operators for path control.<br>
+<br>
+ &lt;name&gt; &lt;string&gt; .addcontrolpath -<br>
+<br>
+ Add the given &lt;string&gt; (path) to the list of paths for<br>
+ controlset &lt;name&gt;, where &lt;name&gt; can be:<br>
+ /PermitFileReading<br>
+ /PermitFileWriting<br>
+ /PermitFileControl<br>
+ (Anything else -&gt; rangecheck)<br>
+<br>
+ - .activatepathcontrol -<br>
+<br>
+ Enable path control. At this point PS cannot make any<br>
+ more changes, and all file access is checked.<br>
+<br>
+base/gdebug.h<br>
+base/gdevdevn.c<br>
+base/gdevp14.c<br>
+base/gdevpccm.c<br>
+base/gdevpccm.h<br>
+base/gdevpipe.c<br>
+base/gdevprn.c<br>
+base/gdevprn.h<br>
+base/gdevvec.c<br>
+base/gdevvec.h<br>
+base/gp.h<br>
+base/gp_dosfs.c<br>
+base/gp_dvx.c<br>
+base/gp_mshdl.c<br>
+base/gp_msprn.c<br>
+base/gp_mswin.c<br>
+base/gp_ntfs.c<br>
+base/gp_os2.c<br>
+base/gp_os2fs.c<br>
+base/gp_os2pr.c<br>
+base/gp_os9.c<br>
+base/gp_unifs.c<br>
+base/gp_unix.c<br>
+base/gp_vms.c<br>
+base/gp_win32.c<br>
+base/gp_winfs.c<br>
+base/gp_winfs2.c<br>
+base/gpmisc.c<br>
+base/gpmisc.h<br>
+base/gsargs.c<br>
+base/gsargs.h<br>
+base/gsdevice.c<br>
+base/gsicc_create.c<br>
+base/gsicc_lcms2.c<br>
+base/gsicc_lcms2mt.c<br>
+base/gsicc_manage.c<br>
+base/gsinit.c<br>
+base/gsiodev.c<br>
+base/gsiodevs.c<br>
+base/gsiodisk.c<br>
+base/gsioram.c<br>
+base/gsiorom.c<br>
+base/gslib.h<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+base/gsmemory.h<br>
+base/gsmisc.c<br>
+base/gsroprun.c<br>
+base/gstiffio.c<br>
+base/gstiffio.h<br>
+base/gxblend.c<br>
+base/gxblend1.c<br>
+base/gxclfile.c<br>
+base/gxdevice.h<br>
+base/gxiodev.h<br>
+base/gxpcmap.c<br>
+base/lib.mak<br>
+base/msvctail.mak<br>
+base/sfxcommon.c<br>
+base/sfxfd.c<br>
+base/sfxstdio.c<br>
+base/stdpre.h<br>
+base/stream.h<br>
+base/tiff.mak<br>
+base/winlib.mak<br>
+contrib/contrib.mak<br>
+contrib/eplaser/gdevescv.c<br>
+contrib/gdevbjc_.c<br>
+contrib/gdevbjc_.h<br>
+contrib/gdevbjca.c<br>
+contrib/gdevcd8.c<br>
+contrib/gdevdj9.c<br>
+contrib/gdevgdi.c<br>
+contrib/gdevhl12.c<br>
+contrib/gdevln03.c<br>
+contrib/gdevlx32.c<br>
+contrib/gdevlx7.c<br>
+contrib/gdevmd2k.c<br>
+contrib/gdevop4w.c<br>
+contrib/gdevxes.c<br>
+contrib/japanese/dviprlib.c<br>
+contrib/japanese/gdev10v.c<br>
+contrib/japanese/gdevalps.c<br>
+contrib/japanese/gdevdmpr.c<br>
+contrib/japanese/gdevespg.c<br>
+contrib/japanese/gdevfmlbp.c<br>
+contrib/japanese/gdevfmpr.c<br>
+contrib/japanese/gdevj100.c<br>
+contrib/japanese/gdevlbp3.c<br>
+contrib/japanese/gdevmjc.c<br>
+contrib/japanese/gdevml6.c<br>
+contrib/japanese/gdevnpdl.c<br>
+contrib/japanese/gdevp201.c<br>
+contrib/japanese/gdevrpdl.c<br>
+contrib/lips4/gdevl4r.c<br>
+contrib/lips4/gdevl4v.c<br>
+contrib/lips4/gdevlprn.c<br>
+contrib/lips4/gdevlprn.h<br>
+contrib/opvp/gdevopvp.c<br>
+contrib/pcl3/eprn/eprnparm.c<br>
+contrib/pcl3/eprn/gdeveprn.c<br>
+contrib/pcl3/eprn/pagecount.c<br>
+contrib/pcl3/eprn/pagecount.h<br>
+contrib/pcl3/src/gdevpcl3.c<br>
+contrib/pcl3/src/pcl3opts.c<br>
+contrib/pcl3/src/pclgen.c<br>
+contrib/pcl3/src/pclgen.h<br>
+contrib/pcl3/src/pclscan.c<br>
+cups/gdevcups.c<br>
+devices/contrib.mak<br>
+devices/devs.mak<br>
+devices/gdev3852.c<br>
+devices/gdev4081.c<br>
+devices/gdev4693.c<br>
+devices/gdev8510.c<br>
+devices/gdevatx.c<br>
+devices/gdevbit.c<br>
+devices/gdevbj10.c<br>
+devices/gdevbmp.c<br>
+devices/gdevbmp.h<br>
+devices/gdevbmpc.c<br>
+devices/gdevccr.c<br>
+devices/gdevcdj.c<br>
+devices/gdevcfax.c<br>
+devices/gdevchameleon.c<br>
+devices/gdevcif.c<br>
+devices/gdevclj.c<br>
+devices/gdevcljc.c<br>
+devices/gdevcmykog.c<br>
+devices/gdevcslw.c<br>
+devices/gdevdfax.c<br>
+devices/gdevdjet.c<br>
+devices/gdevdjtc.c<br>
+devices/gdevdljm.c<br>
+devices/gdevdljm.h<br>
+devices/gdevdm24.c<br>
+devices/gdevepsc.c<br>
+devices/gdevepsn.c<br>
+devices/gdevescp.c<br>
+devices/gdevfax.c<br>
+devices/gdevfax.h<br>
+devices/gdevfpng.c<br>
+devices/gdevgprf.c<br>
+devices/gdevhl7x.c<br>
+devices/gdevicov.c<br>
+devices/gdevifno.c<br>
+devices/gdevijs.c<br>
+devices/gdevimgn.c<br>
+devices/gdevjbig2.c<br>
+devices/gdevjpeg.c<br>
+devices/gdevjpx.c<br>
+devices/gdevl31s.c<br>
+devices/gdevlbp8.c<br>
+devices/gdevlj56.c<br>
+devices/gdevlp8k.c<br>
+devices/gdevlxm.c<br>
+devices/gdevmgr.c<br>
+devices/gdevmiff.c<br>
+devices/gdevn533.c<br>
+devices/gdevo182.c<br>
+devices/gdevokii.c<br>
+devices/gdevpbm.c<br>
+devices/gdevpcx.c<br>
+devices/gdevpdfimg.c<br>
+devices/gdevperm.c<br>
+devices/gdevphex.c<br>
+devices/gdevpjet.c<br>
+devices/gdevplan.c<br>
+devices/gdevplib.c<br>
+devices/gdevpng.c<br>
+devices/gdevpsd.c<br>
+devices/gdevpsd.h<br>
+devices/gdevpsim.c<br>
+devices/gdevpxut.c<br>
+devices/gdevpxut.h<br>
+devices/gdevrinkj.c<br>
+devices/gdevsj48.c<br>
+devices/gdevstc.c<br>
+devices/gdevtfax.c<br>
+devices/gdevtfax.h<br>
+devices/gdevtfnx.c<br>
+devices/gdevtifs.c<br>
+devices/gdevtifs.h<br>
+devices/gdevtknk.c<br>
+devices/gdevtsep.c<br>
+devices/gdevupd.c<br>
+devices/gdevwpr2.c<br>
+devices/gdevxcf.c<br>
+devices/rinkj/rinkj-byte-stream.c<br>
+devices/rinkj/rinkj-byte-stream.h<br>
+devices/vector/gdevpdf.c<br>
+devices/vector/gdevpdfo.c<br>
+devices/vector/gdevpdfp.c<br>
+devices/vector/gdevpdfu.c<br>
+devices/vector/gdevpdfx.h<br>
+devices/vector/gdevpsu.c<br>
+devices/vector/gdevpsu.h<br>
+devices/vector/gdevpx.c<br>
+devices/vector/gdevtxtw.c<br>
+devices/vector/gdevxps.c<br>
+pcl/pl/pjparse.c<br>
+pcl/pl/pl.mak<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+pcl/pl/plparams.c<br>
+pcl/pl/pltop.h<br>
+psi/files.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+psi/imain.c<br>
+psi/imain.h<br>
+psi/imainarg.c<br>
+psi/imainarg.h<br>
+psi/iminst.h<br>
+psi/int.mak<br>
+psi/psapi.c<br>
+psi/zfile.c<br>
+windows/ghostscript.vcproj<br>
+xps/ghostxps.h<br>
+xps/xpsjxr.c<br>
+xps/xpstop.c<br>
+xps/xpszip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-28 16:08:26 +0100
+</strong>
+<br>Chris Lidell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=808021913baf763e07cc9eabc3716bfa507380ff">808021913baf763e07cc9eabc3716bfa507380ff</a>
+<blockquote>
+<p>
+ Bug 701083(2): Write the new key/value to DecodeParms<br>
+<br>
+ There was a lengthy block of code that handled PDFs with buggy DCTDecode<br>
+ dictionaries with a missing, or incorrect Height entry. Since we now have a<br>
+ second key/value needing added to the DecodeParms and in two places, I've<br>
+ split that into a more general procedure, so we can add multiple new keys in<br>
+ one step.<br>
+<br>
+ This is used to add/patch the Height key, and add the new ErrsAsEOD key<br>
+ (telling the CCITT fax decode filter to treat an error as a EOD).<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-27 19:00:06 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1a344ed8506e46e77a0c58aed57de69ce8f54a20">1a344ed8506e46e77a0c58aed57de69ce8f54a20</a>
+<blockquote>
+<p>
+ Bug 701083: Add key to treat errors as end of data when decoding images.<br>
+<br>
+ This specifically only applies to the CCITT decode filter at the<br>
+ moment, but the key will be in place for all image decoders to look<br>
+ at if required.<br>
+<br>
+ A following commit will cause the PDF interpreter to set this key<br>
+ in the DecodeParms.<br>
+<br>
+base/scfd.c<br>
+base/scfparam.c<br>
+base/scfx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-27 15:33:27 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c1739dcc6a8ceda1a5091c1b7dc8bb4870c6c76b">c1739dcc6a8ceda1a5091c1b7dc8bb4870c6c76b</a>
+<blockquote>
+<p>
+ Fix a couple more compiler warnings.<br>
+<br>
+psi/imain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-24 14:32:59 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e2e83fb18feeae8786c16c0c309f9c1efdea2614">e2e83fb18feeae8786c16c0c309f9c1efdea2614</a>
+<blockquote>
+<p>
+ Bug 700956: don't free text enumerator in error condition<br>
+<br>
+ Some errors mean the graphics library will decrement the reference count,<br>
+ potentially freeing, the text enumerator. So, on return to the interpreter<br>
+ don't try to free it.<br>
+<br>
+ In these cases we can safely rely on the garbager to clean up the memory if the<br>
+ graphics library didn't.<br>
+<br>
+psi/zchar.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-24 09:50:49 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f8b9b5d02f2ba59256c92f6015eda02cb5d16c9e">f8b9b5d02f2ba59256c92f6015eda02cb5d16c9e</a>
+<blockquote>
+<p>
+ Fix a trivial (probably benign) compiler warning<br>
+<br>
+psi/imain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-23 11:09:50 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c1844f1adbd7e1b215dde46d6211a84af5cea8a4">c1844f1adbd7e1b215dde46d6211a84af5cea8a4</a>
+<blockquote>
+<p>
+ Fix FONTPATH font file enumeration<br>
+<br>
+ As part of improving security, we had replaced the reference using the name<br>
+ .scanfontheaders to find the array of headers for file types to scan with<br>
+ the immediatetly evaluated //.scanfontheaders in gs_fonts.ps<br>
+<br>
+ That doesn't work correctly because the array is redefined multiple times<br>
+ as we add support for various font types during initialisation.<br>
+<br>
+ Fix it by replacing the immediate evaluation with explicitly using the name key<br>
+ /.scanfontheaders to pull the array from systemdict.<br>
+<br>
+Resource/Init/gs_cff.ps<br>
+Resource/Init/gs_fonts.ps<br>
+Resource/Init/gs_ttf.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-23 11:18:06 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e42161d209e220aa84615b0af7efc7507f0f5397">e42161d209e220aa84615b0af7efc7507f0f5397</a>
+<blockquote>
+<p>
+ Fix crash when the default font can't be found.<br>
+<br>
+ Making .loadfontloop into an operator messes up the error condition recovery<br>
+ when we've had to fall back to the default font, and even that is not<br>
+ available (i.e. when GenericResourceDir is set to somewhere that isn't actually<br>
+ a viable resource directory).<br>
+<br>
+Resource/Init/gs_fonts.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-22 19:07:07 -0600
+</strong>
+<br>Henry Stiles &lt;henry.stiles@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c2d78d6fd563bb3137991ce9f74ec2379e0de9aa">c2d78d6fd563bb3137991ce9f74ec2379e0de9aa</a>
+<blockquote>
+<p>
+ Remove unnecessary but harmless conditional from the last commit.<br>
+<br>
+pcl/pcl/pctop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-22 13:36:31 -0600
+</strong>
+<br>Henry Stiles &lt;henry.stiles@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=690adf6efb53e61e965e6f37cd78b060b2fdb233">690adf6efb53e61e965e6f37cd78b060b2fdb233</a>
+<blockquote>
+<p>
+ Fix bug 701045 - infinite loop in pcl parser.<br>
+<br>
+ The recent work to remove the specialized PL cursor code and replace<br>
+ it with streams removed end of data detection PCL depended on. End of<br>
+ data is now detected by the PCL parser by requiring a minimum number<br>
+ of bytes on the next call to the parser. If the required number of<br>
+ bytes are not provided the parser signals end of data by advancing the<br>
+ read pointer to the end of the buffer.<br>
+<br>
+ The change precipitated some reorganization in how RTL is initialized,<br>
+ as well.<br>
+<br>
+pcl/pcl/pcl.mak<br>
+pcl/pcl/pcmacros.c<br>
+pcl/pcl/pcparse.c<br>
+pcl/pcl/pcparse.h<br>
+pcl/pcl/pcsfont.c<br>
+pcl/pcl/pctop.c<br>
+pcl/pxl/pxpthr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-28 17:21:02 -0600
+</strong>
+<br>Henry Stiles &lt;henry.stiles@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1058e51507f4dfb483c104dd83e77375e62181b4">1058e51507f4dfb483c104dd83e77375e62181b4</a>
+<blockquote>
+<p>
+ Fix bug #700844, crash with very long font path.<br>
+<br>
+ A long font path, specified by setting the environment variable<br>
+ PCLFONTSOURCE, resulted in buffer overflows in both PJL and PCL. Also,<br>
+ simplify the logic to load fonts in PCL because it is not<br>
+ necessary to parse a path list, a single path has been already been<br>
+ parsed in PJL.<br>
+<br>
+ Related coverity id's addressed with this change are: 102193, 102206,<br>
+ 102208, and 102210.<br>
+<br>
+pcl/pl/pjparse.c<br>
+pcl/pl/pllfont.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-11 11:18:23 -0600
+</strong>
+<br>Henry Stiles &lt;henry.stiles@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7a5637d2248501998ca9bb16bc51c93dd15a2d0d">7a5637d2248501998ca9bb16bc51c93dd15a2d0d</a>
+<blockquote>
+<p>
+ Remove unnecessary include file left from a test.<br>
+<br>
+pcl/pl/plfont.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-22 18:04:52 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3a9bb467fa9ff18ca398081c32edddc6732ce75e">3a9bb467fa9ff18ca398081c32edddc6732ce75e</a>
+<blockquote>
+<p>
+ Add gpdl to default products for clusterpush.pl<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-22 17:58:25 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=979f09479916c799d5df30df85c6caa30f86bffc">979f09479916c799d5df30df85c6caa30f86bffc</a>
+<blockquote>
+<p>
+ Add nopdfwrite to clusterpush.pl<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-21 07:39:49 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dd4be3eb2b28ff67dc3ee6e636bf7024bf9d1003">dd4be3eb2b28ff67dc3ee6e636bf7024bf9d1003</a>
+<blockquote>
+<p>
+ Add check for gs_error_handled for pattern handling<br>
+<br>
+ Some clients (specifically gpdfi) can now return gs_error_handled if<br>
+ they already took care of everything in the PaintProc call. In this<br>
+ case, just do all the cleanup as for any other error, but it's not<br>
+ really an error, so return error code 0.<br>
+<br>
+ This wll be needed for pdfi when merged in, should have no affect on current<br>
+ code.<br>
+<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-20 12:32:13 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2b925a84a9cbbeabba391d50f08b7064688298c2">2b925a84a9cbbeabba391d50f08b7064688298c2</a>
+<blockquote>
+<p>
+ Add gsapi_set_param to iapi.h as well.<br>
+<br>
+ This keeps the gs and gpdl implementations of gsapi in sync.<br>
+<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-20 13:07:13 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8aa6f8ce98e19ddc1a30b924169abf091748c1a9">8aa6f8ce98e19ddc1a30b924169abf091748c1a9</a>
+<blockquote>
+<p>
+ Fix warnings in pjparse.c<br>
+<br>
+pcl/pl/pjparse.c<br>
+pcl/pl/pl.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-17 18:51:13 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b932ec31114e4e7a7ace0089cb87ddb70dc7732f">b932ec31114e4e7a7ace0089cb87ddb70dc7732f</a>
+<blockquote>
+<p>
+ Add gsapi_set_param to gpdl gsapi.<br>
+<br>
+ This takes an enumerated type and values, to allow programmatic<br>
+ setting equivalent to -d and -s on the command line.<br>
+<br>
+ These should only be called between jobs, and then with care.<br>
+<br>
+ Values are set in the device parameters and then passed to each<br>
+ language implementation in turn.<br>
+<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+pcl/pl/pltop.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-16 19:59:58 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dc9c23ed944f653e384fd12fbaf6328e8bab8a33">dc9c23ed944f653e384fd12fbaf6328e8bab8a33</a>
+<blockquote>
+<p>
+ PJL GSSET and GSSETSTRING<br>
+<br>
+ Add GSSET and GSSETSTRING PCL commands for setting device<br>
+ parameters/language parameters from PJL.<br>
+<br>
+pcl/pl/pjparse.c<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-18 13:52:25 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=85c99aa093d4e26b9f40c0a4eb686a7f5b2b2d64">85c99aa093d4e26b9f40c0a4eb686a7f5b2b2d64</a>
+<blockquote>
+<p>
+ pdfwrite - fix ColorConversionStrategy<br>
+<br>
+ No bug number, this arose from a question asked on Stack Overflow.<br>
+<br>
+ At some point I removed the enumerated value ccs_UseDeviceDependentColor<br>
+ but I failed to remove the name &quot;UseDeviceDependentColor&quot; from the<br>
+ list of strategy names. This meant that setting ColorConversionStrategy<br>
+ to anything except LeaveColorUnchanged was 'out by 1' in the enumerated<br>
+ data type.<br>
+<br>
+ This led (for example) to Gray being treated as RGB for the purposes<br>
+ of the output colour space.<br>
+<br>
+devices/vector/gdevpsdf.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-08 08:19:55 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=95f7befcec1b30fd5014c8ad616485d32901ce33">95f7befcec1b30fd5014c8ad616485d32901ce33</a>
+<blockquote>
+<p>
+ Make sure transparency page group is isolated<br>
+<br>
+ Per the spec, the page group should be treated as an isolated<br>
+ group. This allows the page group to specify a blending color space.<br>
+ This resulted in over 90 pages of bmpcmp diffs. I went over all<br>
+ of them. They are progressions. Most are very minor color differences<br>
+ as we end up doing the blending and drawings in different color spaces<br>
+ compared to prior to the commit<br>
+<br>
+base/gstrans.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-17 14:37:30 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ebe7cd2b5a7a000c5ebf0bfa061f872faaf098e3">ebe7cd2b5a7a000c5ebf0bfa061f872faaf098e3</a>
+<blockquote>
+<p>
+ Handle trans group knockouts properly if page group is isolated<br>
+<br>
+ Page groups by definition have to be isolated. A fix for this to<br>
+ ensure that the proper group color space is used for the page group<br>
+ revealed a problem when the source PDF actually indicated the page<br>
+ group was isolated. This led to an incorrect selection of subsequent<br>
+ backdrops for any knockout groups contained.<br>
+<br>
+base/gdevp14.c<br>
+base/gdevp14.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-17 11:20:45 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ee8a1c574198351d3ec1b181428d3d0159b4f80a">ee8a1c574198351d3ec1b181428d3d0159b4f80a</a>
+<blockquote>
+<p>
+ PDF interpreter - ignore errors in some faulty FreeText annotations<br>
+<br>
+ Bug #701058 &quot;Can not convert pdf to tiff&quot;<br>
+<br>
+ The PDF file has a FreeText annotation with no appearance stream and<br>
+ faults in the Annotation dictionary.<br>
+<br>
+ Firstly (not perhaps strictly a fault) the /Contents key has a string<br>
+ value with nothing in it. This isn't exactly an error, but it makes the<br>
+ annotation pointless.<br>
+<br>
+ More seriously the /DA key contains:<br>
+<br>
+ (//Helvetica 12 Tf 0 g)<br>
+<br>
+ The double // on the font name means we end up with an empty name<br>
+ on the stack, which causes errors.<br>
+<br>
+ In this commit:<br>
+<br>
+ Execute the DA processing in a stopped context, so that if it fails we<br>
+ don't throw an error.<br>
+<br>
+ Surround the DA processing with a mark so that we can clear the stack if<br>
+ it leaves anything behind.<br>
+<br>
+ Surround all of that with a 'gstate...setgstate' or 'gstate...pop'. If<br>
+ we get an error this allows us to restore the graphics state to the<br>
+ point before we did the DA processing. If we didn't get an error then<br>
+ we can just discard the saved gstate.<br>
+<br>
+ Finally, check the length of the Contents string. If its 0, don't even<br>
+ try to draw it. If its more than 0, but less than 4, then don't attempt<br>
+ to check for UTF16 (2 byte BOM + 2 bytes for character means a minimum<br>
+ of 4 bytes).<br>
+<br>
+ This results in slightly different output from pdfwrite with one file,<br>
+ tests_private/pdf/sumatra/1331_-_prints_garbled.pdf, which results in<br>
+ very small (single pixel) differences at 72 dpi.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-17 09:15:48 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2b4f54e13d9a5346e1c4c0a3a577d27065e67313">2b4f54e13d9a5346e1c4c0a3a577d27065e67313</a>
+<blockquote>
+<p>
+ Remove the redundant -E and -A command line params<br>
+<br>
+ The functionality for both are now (and have been for a *long* time!) accessed<br>
+ via -Z# and -Z@ respectively.<br>
+<br>
+ This solves a clash for -E with the other language implementations.<br>
+<br>
+doc/Use.htm<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-11 09:24:38 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=29fc52982904f7b24349f7fe369f614b3081ce90">29fc52982904f7b24349f7fe369f614b3081ce90</a>
+<blockquote>
+<p>
+ DeviceN - handle out of memory errors<br>
+<br>
+ When altering the DeviceN colour space handling in the PostScript<br>
+ interpreter to use C strings instead of name indices, I neglected to<br>
+ consider the possibility of a failure to allocate memory for the string.<br>
+<br>
+ This commit just catches the fault and returns a VM error to the<br>
+ interpreter.<br>
+<br>
+psi/zcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-10 14:49:29 +0100
+</strong>
+<br>i3v &lt;i3v@mail.ru&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=55d04ff91a70a2cba1a1c15407c94f936c5f91f4">55d04ff91a70a2cba1a1c15407c94f936c5f91f4</a>
+<blockquote>
+<p>
+ Documentation - fix various typos in VectorDevices.htm<br>
+<br>
+ Bug #701021 &quot;Typos in VectorDevices.htm&quot;<br>
+<br>
+ Fixes supplied by 'i3v'.<br>
+<br>
+doc/VectorDevices.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-10 09:32:26 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3db10c55b3ef621770bf6e93dfc1605e766adef2">3db10c55b3ef621770bf6e93dfc1605e766adef2</a>
+<blockquote>
+<p>
+ Improve test for PS resources in romfs<br>
+<br>
+ Previously, although we always built a romfs, building gs with COMPILE_INITS=0<br>
+ meant we included a romfs which was devoid of content, and an attempt to find<br>
+ the status of the device would return 'gs_error_unregistered'. We used this<br>
+ to determine whether to automatically add '%rom%Resource/Init' to the default<br>
+ search path.<br>
+<br>
+ In the gpdl case (for the sake of PCL and XPS), we always have a usable romfs<br>
+ (even with COMPILE_INITS=0) for the ICC profiles, so the above test gave a<br>
+ false positive: gs would add the romfs to the search path, despite there being<br>
+ no usable Postscript resources in it.<br>
+<br>
+ So, revise the test to explicitly check for Resource/Init/gs_init.ps on the<br>
+ romfs. If the romfs is, indeed, empty, it will still return<br>
+ 'gs_error_unregistered', but in the gpdl case, it will return<br>
+ 'gs_error_undefinedfilename', and we correctly skip adding the romfs path to<br>
+ the search paths for Postscript resources<br>
+<br>
+psi/imain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-08 13:23:26 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d2809b15153eedbbe1bfb43fc259bf674e353f42">d2809b15153eedbbe1bfb43fc259bf674e353f42</a>
+<blockquote>
+<p>
+ Add an (interim) --enable-gpdl configure option<br>
+<br>
+ This adds gpdl to the default target list for make.<br>
+<br>
+ Mainly to get the .so build usable without having edit the makefiles.<br>
+<br>
+ This will be deprecated when gpdl is always in the default target list.<br>
+<br>
+Makefile.in<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-09 09:49:56 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d0d7b8d3866aecafac3601ebd9b4b5d83f4fbe91">d0d7b8d3866aecafac3601ebd9b4b5d83f4fbe91</a>
+<blockquote>
+<p>
+ Fix some compiler warnings<br>
+<br>
+ and remove some #if directives accidentally included in a commit<br>
+<br>
+base/gscdevn.c<br>
+devices/vector/gdevpdfc.c<br>
+psi/zcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-08 14:28:41 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=86a81b823950c712ac03e0139449045a81672d01">86a81b823950c712ac03e0139449045a81672d01</a>
+<blockquote>
+<p>
+ pdfwrite - extend DeviceN attributes dictionary generation<br>
+<br>
+ Now that we cater for the /Process dictionary in a DeviceN attributes<br>
+ dictionary (and the Subtype) we need to emit those from pdfwrite too.<br>
+<br>
+devices/vector/gdevpdfc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-08 14:27:23 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2019db2e552653bd0c27377d500de1041c9fd0bc">2019db2e552653bd0c27377d500de1041c9fd0bc</a>
+<blockquote>
+<p>
+ PostScript colour space handling<br>
+<br>
+ We were not catering for a /Subtype in a DeviceN attributes dictionary<br>
+ having a value which is a string type not a name type. I can't quite<br>
+ see how we are ending up with a string type here, since the PDF file<br>
+ has it as a name, but it does. Dealing with both resolves many errors.<br>
+<br>
+ The second change is more far-reaching; when processing an attributes<br>
+ dictionary for a DeviceN colour space we may need to create colour<br>
+ spaces for the Process dictionary /ColorSpace and for any of the entries<br>
+ in the Colorants dictionary. We were doing that by calling<br>
+ zsetcolorspace() which mostly works well, however there is one<br>
+ optimisation which can cause a problem; if the target space is the same<br>
+ as the current *interpreter* colour space, then zsetcolorspace()<br>
+ simply returns.<br>
+<br>
+ The problem is that if we are halfway through processing a DeviceN<br>
+ space then we haven't set the interpreter space to the new colour space<br>
+ array yet which can mean that we incorrectly detect one of the target<br>
+ spaces as being the same as the current space. This leads to us trying<br>
+ to use the current space in the graphics state (the DeviceN space) as<br>
+ the target space, with unfortunate consequences.<br>
+<br>
+ So create a new version of zsetcolorspace which doesn't do that<br>
+ optimisation and use that when processing the various target spaces in<br>
+ the DeviceN attributes dictionary.<br>
+<br>
+psi/zcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-07 12:52:25 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0d75869134c69963406500b536fb1bb1c97c8621">0d75869134c69963406500b536fb1bb1c97c8621</a>
+<blockquote>
+<p>
+ Separation - change ink name to be a C string instead of name index<br>
+<br>
+ As indicated in previous commits, change the stored ink name in the<br>
+ colour space structure params.separation from a numeric value<br>
+ (gs_separation_name) into a C string.<br>
+<br>
+ We never have to pass these back to the interpreter, so we allocate the<br>
+ storage using the non-GC allocater.<br>
+<br>
+base/gscdevn.c<br>
+base/gscsepr.c<br>
+base/gscspace.h<br>
+base/gsequivc.c<br>
+base/gsicc_cache.c<br>
+base/gxcmap.c<br>
+devices/vector/gdevpdfc.c<br>
+devices/vector/gdevpdfg.c<br>
+psi/zcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-06 16:51:26 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=97253bf54a701d5e433378df953e066d009afde0">97253bf54a701d5e433378df953e066d009afde0</a>
+<blockquote>
+<p>
+ DeviceN - change ink names to be C strings instead of name indices<br>
+<br>
+ As indicated in previous commits, change the stored ink names in the<br>
+ colour space structure params.device_n from numeric values<br>
+ (gs_separation_name) into C strings.<br>
+<br>
+ We never have to pass these back to the interpreter, so we allocate the<br>
+ storage using the non-GC allocater, which simplifies things for the<br>
+ array which used to store the indices and now stores the pointers to the<br>
+ C strings.<br>
+<br>
+base/gscdevn.c<br>
+base/gscspace.h<br>
+base/gsequivc.c<br>
+base/gsicc_cache.c<br>
+base/gsicc_manage.c<br>
+base/gxcmap.c<br>
+devices/vector/gdevpdfc.c<br>
+devices/vector/gdevpdfg.c<br>
+psi/zcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-07 19:54:57 +0100
+</strong>
+<br>Shailesh Mistry &lt;shailesh.mistry@hotmail.co.uk&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=880a700f691f444c483053f48b3c0b0f3a920883">880a700f691f444c483053f48b3c0b0f3a920883</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent SEGV caused by double freeing.<br>
+<br>
+ Prevent running finalize for devices with a custom finalize.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=1767 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.0270<br>
+<br>
+base/gdevdflt.c<br>
+base/gspaint.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-02 08:00:46 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=284ba1a6491088ab8ea9985f5df882c43bd3ca12">284ba1a6491088ab8ea9985f5df882c43bd3ca12</a>
+<blockquote>
+<p>
+ Use deviceN attributes process color color space<br>
+<br>
+ If the DeviceN color space includes an attributes entry and<br>
+ it has a process color space, and the color space is of the proper<br>
+ type use that as the source color for the process components. If<br>
+ instead the alternate tint transform color space is the correct type<br>
+ use that as a hint. If neither work then set to the defined default_cmyk<br>
+ source color space. If all fail due to issues with ICC profiles then<br>
+ the CMYK source process colorants will pass through to the output device.<br>
+<br>
+base/gdevp14.c<br>
+base/gscdevn.c<br>
+base/gsequivc.c<br>
+base/gsicc.c<br>
+base/gxcmap.c<br>
+base/gxcmap.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-06 13:46:42 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=754b4eb77d24ff0273b530aa748bbf925b715d9c">754b4eb77d24ff0273b530aa748bbf925b715d9c</a>
+<blockquote>
+<p>
+ Ensure correct memory allocation of Colorant strings<br>
+<br>
+ I'm not happy with using ref_to_string() as it doesn't seem to behave<br>
+ entirely as I would expect, so modify the code to explicitly allocate<br>
+ the memory used to store the Colorant name.<br>
+<br>
+ Also fix a compiler warning.<br>
+<br>
+psi/zcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-06 09:10:22 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=76022c9c27a0f4031553cf3a5eb2c009b26b19be">76022c9c27a0f4031553cf3a5eb2c009b26b19be</a>
+<blockquote>
+<p>
+ DeviceN - store C strings for Colorant names, not name indices<br>
+<br>
+ For DeviceN spaces with an attributes dictionary containing a<br>
+ Colorants dictionary we were storing the Colorant names as a name index<br>
+ (index into the interpreter name table). Additionally we store a<br>
+ procedure callback to recover the C string from the name index.<br>
+<br>
+ This is problematic for several reasons; firstly it requires all the<br>
+ interpreters to either have a name table or some close equivalent so<br>
+ that a C string can be recovered from a numeric value.<br>
+<br>
+ Secondly the lifetime of the string is divorced from the lifetime of the<br>
+ C structure using it. Because there's no easy way for the interpreter to<br>
+ know when the graphics library has freed the colour space structure<br>
+ the interpreter is forced to retain the relationship between the name<br>
+ index and the C string until the job is completed.<br>
+<br>
+ Both of these will be problems for the new PDF interpreter, so this is<br>
+ step 1 in altering this. After this we will still need to change the<br>
+ storage of the DeviceN and Separation ink names, which are handled the<br>
+ same way.<br>
+<br>
+base/gscdevn.c<br>
+base/gscdevn.h<br>
+base/gxcdevn.h<br>
+devices/vector/gdevpdfc.c<br>
+devices/vector/gdevpdfg.c<br>
+psi/zcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-03 17:35:49 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8b407511d2fad0108a76c6b46dc54a1770ea3ade">8b407511d2fad0108a76c6b46dc54a1770ea3ade</a>
+<blockquote>
+<p>
+ fix commit c2d50885614481ebf542578e69ce4bcbbfea6532<br>
+<br>
+ don't retest code, and fix some compiler warnings<br>
+<br>
+base/gscdevn.h<br>
+psi/zcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-03 13:27:22 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c2d50885614481ebf542578e69ce4bcbbfea6532">c2d50885614481ebf542578e69ce4bcbbfea6532</a>
+<blockquote>
+<p>
+ DeviceN - handle attributes Subtype and cleaning up<br>
+<br>
+ Previously we were ignoring the /Subtype in the attributes dictionary<br>
+ of a DeviceN colour space (if attributes were present). We may need to<br>
+ be able to tell the difference (now that we handle /Process) because<br>
+ the values associated with the process components must be stored in<br>
+ their natural form (eg subtractive for CMYK, additive for RGB) when<br>
+ the Subtype is NChannel.<br>
+<br>
+ The remainder of the commit tidies up naming; previously we had a<br>
+ structure called gs_devicen_attributes, which was used to store the<br>
+ Colorants entry form an attributes dictionary. Since we now handle<br>
+ other aspects of the attributes dictionary as well, this was misleading<br>
+ so the structure has been renamed throughout as gs_devicen_colorant<br>
+ (since each structure defines only one colorant, the plural name was<br>
+ also misleading). Apparently pdfwrite is the only client for this<br>
+ currently anyway.<br>
+<br>
+ Finally, moved the 'devn_process_space' from the general graphics<br>
+ state colour space structure into the DeviceN params structure, as its<br>
+ only relevant to DeviceN (and indeed only a DeviceN with an attributes<br>
+ dictionary which contains a /Process entry)<br>
+<br>
+base/gscdevn.c<br>
+base/gscdevn.h<br>
+base/gscspace.c<br>
+base/gscspace.h<br>
+base/gxcdevn.h<br>
+devices/vector/gdevpdfc.c<br>
+devices/vector/gdevpdfg.c<br>
+psi/zcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-02 16:40:18 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=22d88ad48409a130007976ae26536cc9d99c16d9">22d88ad48409a130007976ae26536cc9d99c16d9</a>
+<blockquote>
+<p>
+ Fix an oversight in DeviceN attributes processing<br>
+<br>
+ If we have no Colorants entry we still want to check for a Process<br>
+ entry, but to do so we need to signal to setcolorspace_cont(), the<br>
+ routine which calls this one, that we do want to keep processing the<br>
+ colour space.<br>
+<br>
+psi/zcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-02 13:12:28 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7c70031f8be95585bcf439d12e552d386e4e2125">7c70031f8be95585bcf439d12e552d386e4e2125</a>
+<blockquote>
+<p>
+ Capture the /Components from a DeviceN /Process dictionary<br>
+<br>
+ Following on from commit 5e84879db91fdc8569a85a394def391695152720 and<br>
+ Michael's commit c6ac30d231946062b41c56df375b240583e75b35 this adds<br>
+ code to check for the existence of a /Process dictionary in the<br>
+ attributes dictionary (if present) of a DeviceN colour space.<br>
+<br>
+ Also fixed/added a few comments to the existing code and did some<br>
+ tidying up of error return handling.<br>
+<br>
+psi/zcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-01 10:06:41 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c6ac30d231946062b41c56df375b240583e75b35">c6ac30d231946062b41c56df375b240583e75b35</a>
+<blockquote>
+<p>
+ Add holder for process color names in DeviceN color space parameters<br>
+<br>
+ As part of the work to use the DeviceN attributes process dictionary<br>
+ we need to have a place to store the colorant names. They will<br>
+ be stored as an array of C strings in the pcs-&gt;params.device_n structure.<br>
+ This commit adds them to the structure and frees them during the color<br>
+ space finalization.<br>
+<br>
+base/gscdevn.c<br>
+base/gscspace.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-01 17:49:03 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5e84879db91fdc8569a85a394def391695152720">5e84879db91fdc8569a85a394def391695152720</a>
+<blockquote>
+<p>
+ Process DeviceN attributes dictionary, /Process dictionary, /ColorSpace<br>
+<br>
+ PostScript PDF interpreter changes; retrieve the Process dictionary<br>
+ from the DeviceN attributes dictionary (if present). Extract the<br>
+ ColorSpace, resolve the ColorSpace (turns any references into actual<br>
+ objects), and store the result back in the Process dictionary. Finally<br>
+ store the Process dictionary in the attributes dictionary which we<br>
+ pass to setcolorspace.<br>
+<br>
+ PostScript interpreter, C changes; add a new 'stage' for DeviceN<br>
+ colour space handling. In stage 3, check for the existence of an<br>
+ attributes dictionary, then a /Process dictionary, and a /ColorSpace<br>
+ entry. Retrieve the entry. Set up a new continuation procedure<br>
+ 'devicenprocess_cont'. The continuation procedure calls zsetcolorspace()<br>
+ to set the /ColorSpace as the current space. On returning, retrieve<br>
+ the current color space, attach it to the DeviceN graphics state colour<br>
+ space and finish.<br>
+<br>
+ Still to do; process /Components, add the equivalent code to pdfi,<br>
+ check pdfwrite to see if we can handle this. Tidy up comments.<br>
+ Committing now so Michael can carry on with the CMS work.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+psi/zcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-05-01 13:17:25 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6742ad7d26dc7bb8cc33aef9f96f86d892d4a424">6742ad7d26dc7bb8cc33aef9f96f86d892d4a424</a>
+<blockquote>
+<p>
+ Valgrind: image_render_interpolate_landscape_icc.<br>
+<br>
+ Don't color convert the unprocessed margins of the buffer.<br>
+ These areas are never inited, so a warning is given. No<br>
+ harm is done as they are never actually rendered, but it's<br>
+ faster and cleaner to skip them too.<br>
+<br>
+base/gxiscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-30 15:13:25 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=04db6ace1fb97dcef79d9bdbb01a1c8a63c55d88">04db6ace1fb97dcef79d9bdbb01a1c8a63c55d88</a>
+<blockquote>
+<p>
+ Add a devn_process_space to color gs_color_space_s<br>
+<br>
+ This is in preparation for having the process color<br>
+ space as defined in the DeviceN (NChannel) Process<br>
+ dictionary.<br>
+<br>
+base/gscspace.c<br>
+base/gscspace.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-30 11:49:07 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e1f9edfcafc3f73f43b85afacb8d788f7e573cf6">e1f9edfcafc3f73f43b85afacb8d788f7e573cf6</a>
+<blockquote>
+<p>
+ Add methods to detect pure process colors in Sep and DeviceN color spaces<br>
+<br>
+ When the colors in the separation or Devicen color space consist all of<br>
+ one particular process color model, we would like to consider the use<br>
+ of the alternate tint transform color space as an indication of the intent<br>
+ for these color spaces (assuming the attributes information was not there).<br>
+ For example, if we had a DeviceN color space<br>
+ of [Cyan Magenta] and the alternate tint transform color space was a<br>
+ CMYK ICC color space, that would be a hint that we should treat the color<br>
+ as being in that space. This commit provides us with the information as<br>
+ to the colorants all being in one particular process space which is<br>
+ a requirement.<br>
+<br>
+base/gscdevn.c<br>
+base/gscsepr.c<br>
+base/gscspace.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-30 15:26:11 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b380b655b64a37a77b98dab881ff0aad0c62586e">b380b655b64a37a77b98dab881ff0aad0c62586e</a>
+<blockquote>
+<p>
+ Nobble pdfwrite genrated /ID entries in cluster tests.<br>
+<br>
+ Avoid having the /ID values depend on the output filename<br>
+ in cluster testing. This should allow us to compare the<br>
+ results of pdfwriting between gs and gpdl. It also removes<br>
+ one more thing to get right when trying to manually reproduce<br>
+ cluster results.<br>
+<br>
+devices/vector/gdevpdf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-30 10:40:20 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fd5758e4d55c510fa4ad0047c10b13cf928cfb74">fd5758e4d55c510fa4ad0047c10b13cf928cfb74</a>
+<blockquote>
+<p>
+ Make pdfwrite fileID calculations consistent on cluster.<br>
+<br>
+ Nobble the timing calculations under CLUSTER builds, so<br>
+ we get consistent results.<br>
+<br>
+ Also, move to using realtime, rather than usertime (as the goal<br>
+ is to have something different each time).<br>
+<br>
+devices/gdevpdfimg.c<br>
+devices/vector/gdevpdf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-29 17:58:42 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=35c40cdaa2f79432f01733d3f69f95947db5d60b">35c40cdaa2f79432f01733d3f69f95947db5d60b</a>
+<blockquote>
+<p>
+ Change implementation of gsicc_support_named_color<br>
+<br>
+ gsicc_support_named_color now will have available all the names<br>
+ in the DeviceN color space. If there are no spot names<br>
+ in the list, it will return false ensuring that the process colors<br>
+ will be color managed.<br>
+<br>
+base/gscdevn.c<br>
+base/gscsepr.c<br>
+base/gsicc_cache.c<br>
+base/gsicc_cache.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-29 18:39:23 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8026e11e50306a51dc3bb6f2bdc57f34986acd62">8026e11e50306a51dc3bb6f2bdc57f34986acd62</a>
+<blockquote>
+<p>
+ Fix undefined behaviour in rops.<br>
+<br>
+ We were indexing off the end of a static table. Annyoingly,<br>
+ valgrind has failed to pick this up for years.<br>
+<br>
+base/gsroprun.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-29 11:14:06 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0bafbd9c1273fab0dc79fd20db0ffc4443683f96">0bafbd9c1273fab0dc79fd20db0ffc4443683f96</a>
+<blockquote>
+<p>
+ PDF interpreter - Decode ToUnicode entries of the form /Identity-H/V<br>
+<br>
+ Bug #701003 &quot;Text searchability broken due to omission of /ToUnicode /Identity-H&quot;<br>
+<br>
+ The PDF references from 1.2 too 2.0 all state that the value associated<br>
+ with a ToUnicode key in a FontDescriptor must be a stream object. However<br>
+ this file (and one case seen previously, bug 687351) have FontDescriptor<br>
+ dictionaries where the value associated with a /ToUnicode key is a<br>
+ name object, in both cases /Identity-H.<br>
+<br>
+ Although this is clearly not legal, Acrobat not only tolerates it, it<br>
+ actually uses it for search/copy/paste (see bug 701003 for details).<br>
+ Without the key Acrobat is unable to successfully search the output file.<br>
+<br>
+ We can't simply preserve the name object as a ToUnicode value; when<br>
+ handling ToUnicode we actually decode the CMap and build a<br>
+ GlyphNames2Unicode map (an internal representation of the G2U data<br>
+ produced by the Microsoft PostScript printer driver). When writing the<br>
+ output file we use that information to get a Unicode value for each<br>
+ character we write, and build a new ToUnicode CMap using that.<br>
+<br>
+ This commit tackles the problem by pre-scanning for a name object and<br>
+ then checking to see if its Identity-H or Identity-V (although we have<br>
+ not seen an Identity-V, there seems no reason why it wouldn't be<br>
+ equally valid). If we find either of these then we construct a<br>
+ GlyphNames2Unicode table for all possible values (0 - 65535) and store<br>
+ that with the font as normal. When we write the output file we only<br>
+ write the required entries for the subset font, so we write a now<br>
+ completely legal ToUnicode CMap, and Acrobat is equally happy with that<br>
+ as the original name.<br>
+<br>
+ If the ToUnicode value isn't a name object, or isn't one of the<br>
+ identities then we proceed as before. This means we will print a<br>
+ warning for non conforming ToUnicode entries and ignore them.<br>
+<br>
+Resource/Init/pdf_font.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-28 19:59:12 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0b9c45fa86f7736e7fec170a135efa83636283ba">0b9c45fa86f7736e7fec170a135efa83636283ba</a>
+<blockquote>
+<p>
+ Have CMYK colors in DeviceN color spaces color managed when going to CMYK devices<br>
+<br>
+ The current code was only doing color management of DeviceN CMYK when going to<br>
+ the separation device (e.g. tiffsep and psdcmyk). It should also be doing this<br>
+ for pure CMYK devices like tiff32nc etc. With RGB devices we will be going through<br>
+ the alternate tint transform. The would only pertain to DeviceN color spaces composed<br>
+ of only process colors (e.g. [Cyan Magenta]). If a spot color was included we would<br>
+ be going through the alternate tint transform for a device like tiff32nc.<br>
+<br>
+ So with this commit if you have a command line like<br>
+<br>
+ -sDEVICE=tiff32nc -sDefaultCMYKProfile=src_cmyk.icc -o output.tif -f input.pdf<br>
+<br>
+ it will treat the CMYK values in the DeviceN color space the same as a DeviceCMYK<br>
+ source color and make use of the src_cmyk.icc profile to handle those. As mentioned<br>
+ this worked with psdcmyk and tiffsep but not standard CMYK devices.<br>
+<br>
+base/gxcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-01 20:30:23 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=68511243fb4817e8170023d1d6922956325a139d">68511243fb4817e8170023d1d6922956325a139d</a>
+<blockquote>
+<p>
+ Move transfer functions to 16 bits.<br>
+<br>
+ This means that in 'deep' modes, we sample them in 257 places<br>
+ (0000,0100,....ff00,ffff) rather than 256 (00,01,...ff), and<br>
+ in 16 bits rather than 8. We also interpolate them on reading.<br>
+<br>
+ This in turn increases the size of the data put into the clist.<br>
+<br>
+base/gdevp14.c<br>
+base/gstparam.h<br>
+base/gstrans.c<br>
+base/gstrans.h<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-26 21:24:28 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e2507c443fcd1456ff65695901339fc96f4bbf73">e2507c443fcd1456ff65695901339fc96f4bbf73</a>
+<blockquote>
+<p>
+ Fix improper logic in named color support<br>
+<br>
+base/gscdevn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-26 16:47:29 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fb9f948ec79d18c2574a9a0bdaf9ab1aeee21e58">fb9f948ec79d18c2574a9a0bdaf9ab1aeee21e58</a>
+<blockquote>
+<p>
+ And one more fix to the named color blending.<br>
+<br>
+ Fixing issues introduced in previous commit.<br>
+<br>
+base/gsicc_cache.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-26 11:25:19 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e1a534e843743230019de57a36a04129347a505e">e1a534e843743230019de57a36a04129347a505e</a>
+<blockquote>
+<p>
+ Fix named color blending<br>
+<br>
+ Named color blending was not working the way intended. This was clearly visible<br>
+ when pushing a gradient through. This now does a reasonable result blending<br>
+ the first colorant with white and then subsequent colorants with the current<br>
+ colorant.<br>
+<br>
+base/gsicc_cache.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-26 14:40:22 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6fcd76043a6fe69ca2b8ecac498f9ca79829931f">6fcd76043a6fe69ca2b8ecac498f9ca79829931f</a>
+<blockquote>
+<p>
+ Bug 700973: CIDFont substitution: avoid multiply applying metrics<br>
+<br>
+ findCIDFont: we make various efforts to produce a synthetic font style<br>
+ (bold, light, italic etc) if the actual type face style is not available.<br>
+<br>
+ In these cases, we have to avoid reusing an existing CIDFont substitute because<br>
+ the CDevProc will have been 'hooked' to apply the width metrics drawn from the<br>
+ PDF file. We want to, if at all possible, use the CIDFont as originally loaded.<br>
+<br>
+Resource/Init/pdf_font.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-25 17:20:12 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cb1414723d95c6813e8e44a8c0529f0063998378">cb1414723d95c6813e8e44a8c0529f0063998378</a>
+<blockquote>
+<p>
+ pdfwrite - handle user-defined PCL fonts with character codes &gt; 256<br>
+<br>
+ Bug #700996 &quot;PCL Files Processing failure&quot;<br>
+<br>
+ The problem is that we cannot handle a character code in excess of 256<br>
+ in a PDF Font (we would have to create a CIDFont, which is too much<br>
+ work). This was causing us to fail to attach a PDF font to the current<br>
+ (user-defined PCL) font. When we later tried to retrieve the font<br>
+ that caused a seg fault.<br>
+<br>
+ If we simply return an error when there is no attached font then the<br>
+ fallback machinery will take us through generating an image instead.<br>
+<br>
+ This, however, caused the original file not to work properly, text was<br>
+ going missing. Forcing 'early accumulator' to be 0 so that we created a<br>
+ new font resolved the problem. Its better, however to remove that entire<br>
+ section of code, since it now has no purpose.<br>
+<br>
+ This commit results in a PDF file with the correct appearance. A number<br>
+ of out test suite files exhibit small differences, particularly at<br>
+ low (75 dpi) resolution, but nothing is actually incorrect.<br>
+<br>
+devices/vector/gdevpdti.c<br>
+devices/vector/gdevpdtt.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-24 12:27:16 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7b1d3a9fcc40d0dd2dc779830abe21da83183c11">7b1d3a9fcc40d0dd2dc779830abe21da83183c11</a>
+<blockquote>
+<p>
+ Fix two issues in replace color management.<br>
+<br>
+ Always do replacement for this demo implementation and<br>
+ use get_color_mapping_procs_subclass to get the device<br>
+ color mapping procs. The old method had an issue with<br>
+ overprint compositor and psdcmyk device.<br>
+<br>
+base/gsicc_replacecm.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-24 11:20:57 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=29d227c79fa8554e65eb1e081a81cbcb13b76b8a">29d227c79fa8554e65eb1e081a81cbcb13b76b8a</a>
+<blockquote>
+<p>
+ Avoid double free in replace color management code<br>
+<br>
+base/gsicc_replacecm.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-24 10:27:25 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2f947ad5c32968cb113cb3ba4958e239dcf730a5">2f947ad5c32968cb113cb3ba4958e239dcf730a5</a>
+<blockquote>
+<p>
+ Use space in calls to gs_strtok<br>
+<br>
+base/gsicc_manage.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-23 21:32:00 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8881a51d55df7df70f4e0083be8569e09213dfba">8881a51d55df7df70f4e0083be8569e09213dfba</a>
+<blockquote>
+<p>
+ Fix several warnings and issues from last commit.<br>
+<br>
+base/gscsepr.c<br>
+base/gsicc_cache.c<br>
+base/gxcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-24 10:48:07 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7f34ef8c946be47d5a5dcc412b3da608a0066c44">7f34ef8c946be47d5a5dcc412b3da608a0066c44</a>
+<blockquote>
+<p>
+ Fix typo in 16bit code in gxblend.c<br>
+<br>
+ src_shape needs to be 16bits, not a byte now.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-23 20:11:24 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fea343608ce813156ae8ffc2ea6d42fc5f198e64">fea343608ce813156ae8ffc2ea6d42fc5f198e64</a>
+<blockquote>
+<p>
+ Add support for named color when going to separation devicen_icc_cmyk<br>
+<br>
+ When going through named color processing with the target device either<br>
+ tiffsep or psdcmyk, cmap_devicen_direct and cmap_devicen_halftoned were<br>
+ doing an additional cmyk icc mapping. This mapping was needed to ensure<br>
+ that CMYK values matched DeviceN mapping values of CMYK+Spot where the Spot<br>
+ value was 0 percent. With the use of named color mapping, we want to avoid this<br>
+ icc mapping. Fixing this issue involved adding a boolean value to the DeviceN and Separation<br>
+ color space params to indicate if the spot colorant(s) are supported by the<br>
+ named color profile. This determination is made during the install of the<br>
+ device so that it need only be done once. To do that, we needed to add a<br>
+ method, gsicc_support_named_color, in gsicc_cache.c, which goes with<br>
+ gsicc_transform_named_color, to indicate if the spot colorant is defined in<br>
+ the data that we are using. Tested with tiff24, tiff32 and psdcmyk to ensure<br>
+ named color mapping is occurring and that no additional mapping occurs after<br>
+ that.<br>
+<br>
+base/gscdevn.c<br>
+base/gscsepr.c<br>
+base/gscspace.h<br>
+base/gsicc_cache.c<br>
+base/gsicc_cache.h<br>
+base/gxcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-02-19 16:38:26 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f0f2fa2a084758bcf99409ce19c2c1f93dc04d32">f0f2fa2a084758bcf99409ce19c2c1f93dc04d32</a>
+<blockquote>
+<p>
+ Deep color transparency<br>
+<br>
+ Previously, all transparency blending has been done using the<br>
+ pdf14 compisitor working in 8 bits. Here, we extend it to be<br>
+ capable of working in 16 bits.<br>
+<br>
+ When the compositor is created, it looks at the underlying device;<br>
+ if that device uses more than 8 bits per component (plus 8 bits<br>
+ for tags, if tags are in use), then we use 'deep' (i.e. 16 bit<br>
+ per component) pdf14 buffers.<br>
+<br>
+base/gdevdflt.c<br>
+base/gdevmem.c<br>
+base/gdevp14.c<br>
+base/gdevp14.h<br>
+base/gdevprn.c<br>
+base/gsptype1.c<br>
+base/gstrans.h<br>
+base/gxblend.c<br>
+base/gxblend.h<br>
+base/gxblend1.c<br>
+base/gxclrect.c<br>
+base/gxclthrd.c<br>
+base/gxcolor2.h<br>
+base/gxp1fill.c<br>
+base/gxpcolor.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-22 15:33:02 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ba8ff34e302ec3e65bd47b14796dcfaef157527f">ba8ff34e302ec3e65bd47b14796dcfaef157527f</a>
+<blockquote>
+<p>
+ Hack bmpcmp to accept 16bpc PSD files.<br>
+<br>
+ We ignore the bottom bytes of the pixel data.<br>
+<br>
+toolbin/bmpcmp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-19 08:16:57 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d8db95fb00af2fb543439242d3ac122aead88c94">d8db95fb00af2fb543439242d3ac122aead88c94</a>
+<blockquote>
+<p>
+ Fix some structure element name confusion in base/sjbig2_luratech.c<br>
+<br>
+ A previous commit slightly modified some of memory management for jbig2 global<br>
+ data. In mirroring those changes to the Luratech version of the code, a couple<br>
+ of places were left with the structure element names from the jbig2dec version.<br>
+<br>
+base/sjbig2_luratech.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-16 19:30:02 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b399f849ce1aa391da1abeb23fd32e376b56e522">b399f849ce1aa391da1abeb23fd32e376b56e522</a>
+<blockquote>
+<p>
+ Bug 700624: Fix &quot;full&quot; pattern fills with gaps between cells.<br>
+<br>
+ GS has an optimisation in it, whereby if an uncolored pattern fill<br>
+ is completely full (the mask is full of 1's), it doesn't bother to<br>
+ store the mask. When such a pattern is filled, the code knows just<br>
+ to fill the whole thing.<br>
+<br>
+ Sadly, this optimisation breaks down when the cells have an X or Y<br>
+ step that means there should be gaps between the instances. GS<br>
+ currently fills the whole thing, gaps and all.<br>
+<br>
+ To fix this, we either need to fix all the different fill routines<br>
+ to cope with this case, or (as I have done here), disable the<br>
+ optimisation in the case when the X and Y step is larger than the<br>
+ 'size' of the pattern cell.<br>
+<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-18 16:58:41 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d86210973df93ccca0befd56afba2132da925ebc">d86210973df93ccca0befd56afba2132da925ebc</a>
+<blockquote>
+<p>
+ Bug 700986: Remove the crazy md5 file copying nonsense<br>
+<br>
+ To preserve building as a standalone test exe, we avoided using Ghostscript<br>
+ includes in the md5 source and header files, but dynamically add them to<br>
+ copies of the files during the build. Since we no longer need/care for the<br>
+ stand alone exe, remove the build complication, and just include the header<br>
+ file normally.<br>
+<br>
+base/gsmd5.h<br>
+base/lib.mak<br>
+base/md5main.c<br>
+doc/Develop.htm<br>
+windows/ghostscript.vcproj<br>
+windows/ghostscript_rt.vcxproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-18 14:24:04 +0100
+</strong>
+<br>Alexander Grahn &lt;a.grahn@fzd.de&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a3be0c9d86981313d8724f6c29f2feaa07152976">a3be0c9d86981313d8724f6c29f2feaa07152976</a>
+<blockquote>
+<p>
+ Bug #700984 &quot;BMC pdfmark: BMC keyword missing from content stream (patch included)&quot;<br>
+<br>
+ Not sure how this has gone unnoticed for so long. The 'BMC' keyword was<br>
+ missing from the emission of the content of the pdfmark. The EMC and<br>
+ BDC pdfmarks seem to be OK.<br>
+<br>
+ Thanks to Alexander Grahn for identifying the problem and supplying a<br>
+ patch to resolve it.<br>
+<br>
+devices/vector/gdevpdfm.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-18 11:18:35 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a7cccaac16e6fc252496ab630f7423262e05756d">a7cccaac16e6fc252496ab630f7423262e05756d</a>
+<blockquote>
+<p>
+ Fix commit d89bae568d5015144e5d68fea8221543111e119e<br>
+<br>
+ Commit d89bae568d5015144e5d68fea8221543111e119e contained an oversight<br>
+ which unfortunately was missed due to the testing cluster being in a<br>
+ state of flux.<br>
+<br>
+ Its possible for fonts to have a Subtype of Type1C as well as the<br>
+ noted CIDFontType0C and CIDFontType1C, and we need to cater for that<br>
+ as well.<br>
+<br>
+ This mostly affected some of the Ghent Working Group test files, and<br>
+ not much else, so I've chosen just to push an addditional commit.<br>
+<br>
+Resource/Init/pdf_font.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-17 15:53:14 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d89bae568d5015144e5d68fea8221543111e119e">d89bae568d5015144e5d68fea8221543111e119e</a>
+<blockquote>
+<p>
+ PDF interpreter - change detection of CFF CIDFont types<br>
+<br>
+ Bug #700982 &quot;Error: unrecognized font file starts with &lt;01000D02&gt;&quot;<br>
+<br>
+ The code in pdf_font.ps to detect font types, and call an appropriate<br>
+ font loader works (in part) by reading the first 4 bytes from the font<br>
+ stream, and then using that as the key for a dictionary where the<br>
+ values are the font loading procedures.<br>
+<br>
+ Most font types have a 'magic number' or similar at the start of the<br>
+ font data, but CFF fonts do not. In fact the header of a CFF font is<br>
+ highly variable, the only thing we can rely on being the font version<br>
+ byte (0x01), the remaining 3 bytes are variable.<br>
+<br>
+ We've tackled this previously by simply adding more different varieties<br>
+ of string values, but this seems nonsensical. There are too many<br>
+ possible values for this to work reliably.<br>
+<br>
+ Ideally I'd recode this to use the CIDFont Subtype to select the<br>
+ correct font loader, but that would mean recoding all of this, which is<br>
+ more work than I want to tackle in this code. Instead I've chosen to<br>
+ only have one single 'tag' in the dictionary, and I've extended the code<br>
+ handling the case where we don't find a tag in the dictionary.<br>
+<br>
+ Previously this checked to see if the first two bytes of the string<br>
+ were &lt;8001&gt; and otherwise failed. I've modified this so that if the<br>
+ bytes are not &lt;8001&gt; then we check the dictionary /Subtype key. If its<br>
+ not present or isn't either CIDFontType0C or 1C then we still throw<br>
+ an error. Otherwise we discard the string we read, replace it with the<br>
+ one and only string we have stored in the font_tag_dict dictionary and<br>
+ proceed.<br>
+<br>
+ If there is ever a version 2 of the CFF specification this will fail,<br>
+ but we can add a check for the version number if that ever happens<br>
+ (seems highly unlikely).<br>
+<br>
+Resource/Init/pdf_font.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-16 09:20:44 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cf58dd08435d89e5f205127c518595c0d7441535">cf58dd08435d89e5f205127c518595c0d7441535</a>
+<blockquote>
+<p>
+ Documentation - describe the ink_cov device<br>
+<br>
+ Following up from a question on Stack Overflow, the ink_cov device isn't<br>
+ actually described anywhere. Add a description of the device and how its<br>
+ output differs from the inkcov device.<br>
+<br>
+ At the same time, add the inkcov device(s) to the table of contents in<br>
+ devices.htm and also add the bit and bbox devices which were not listed<br>
+ in the TOC.<br>
+<br>
+doc/Devices.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-15 08:25:08 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5fa1928af0eb110115d34eb4c43bb529dda6f697">5fa1928af0eb110115d34eb4c43bb529dda6f697</a>
+<blockquote>
+<p>
+ PDF interpreter - synthesise appearance for text Widget comb fields<br>
+<br>
+ Bug #700967 &quot;Warning Combed form fields are not yet implemented&quot;<br>
+<br>
+ Comb fields draw a string into a series of 'combs' or boxes, one<br>
+ character per box. As usual there are no guidelines in the specification<br>
+ as to how to draw the individual characters.<br>
+<br>
+ I've chosen to centre each character in the box it is draw in, because<br>
+ drawing it from the origin of the box tends to cause collisions with the<br>
+ vertical/horizontal lines delineating the box itself (in the one example<br>
+ file I have). This may cause slightly odd appearance if a field uses<br>
+ mixed upper/lower case, as the text will jump up and down vertically.<br>
+<br>
+ The example file supplied has a fault, one of the comb fields has a<br>
+ value (/V) string which is longer than the /MaxLen value for the field.<br>
+ This indicates to me a fault with the form filling application which<br>
+ should not permit this. Acrobat truncates the string, I've chosen to<br>
+ not render the string at all, and emit a warning on the back channel.<br>
+<br>
+ None of our test suite files show any differences at all; either we<br>
+ don't have an examples of this kind of field already, or they all have<br>
+ appearance streams.<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-12 09:53:44 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6d8e1957175ec98443a6bc0d8c3cda6bfdced801">6d8e1957175ec98443a6bc0d8c3cda6bfdced801</a>
+<blockquote>
+<p>
+ Bug 700968: Fix TTF Format 4 (segmented) cmap parsing<br>
+<br>
+ The format 4 parsing was incorrect, but in a manner only exposed by reading<br>
+ an out of spec cmap.<br>
+<br>
+ The spec implies that the character codes in the cmap segments should be non-<br>
+ overlapping, and the segments should be in order of lowest-to-highest codes.<br>
+<br>
+ We were imposing (*not* enforcing) that condition, but forcing the start code<br>
+ of the current segment to be greater than size of the range of codes we've<br>
+ already read. This, basically, has no effect on fonts that adhere correctly<br>
+ to the spec.<br>
+<br>
+ The fonts embedded in the files for Bug 700968 do not conform to the spec. For<br>
+ example, the 'Z_C00002.tmp' font has the first 92 segments in the cmap with<br>
+ start code and end code both set to 33. The above imposing of the no-overlap<br>
+ and order of segments meant that when we got past those first 92 segments, we<br>
+ were forcibly using character codes 92 and upwards.<br>
+<br>
+ Removing the code imposing those conditions causes these files to render<br>
+ correctly, and shows no regressions in our existing test suite.<br>
+<br>
+Resource/Init/gs_ttf.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-11 12:16:57 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=adc75668cc254ead4929748fdb5ca988353f91eb">adc75668cc254ead4929748fdb5ca988353f91eb</a>
+<blockquote>
+<p>
+ Change s_jbig2decode_release() to free the global context in some cases<br>
+<br>
+ Basically, if state-&gt;global_struct is NULL, it means the library should<br>
+ free the global_ctx when it's done with it. This is the case when used in<br>
+ gpdf (C implementation of PDF).<br>
+<br>
+ If the state-&gt;global_struct is non-NULL, then it is a memory-managed<br>
+ value that the interpreter will eventually clean up. This is the case<br>
+ when used in gs (PS implementation of PDF).<br>
+<br>
+base/sjbig2.c<br>
+base/sjbig2_luratech.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-11 08:49:14 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fd3730fa8429f1ea58b2f5a5bfc1eecd3f835247">fd3730fa8429f1ea58b2f5a5bfc1eecd3f835247</a>
+<blockquote>
+<p>
+ Change s_jbig2decode_set_global_data to take a separate pointer for global_ctx<br>
+<br>
+ This is so gpdf can pass NULL for the 'gd' pointer, since it doesn't care<br>
+ about garbage collection.<br>
+<br>
+base/sjbig2.c<br>
+base/sjbig2.h<br>
+base/sjbig2_luratech.c<br>
+base/sjbig2_luratech.h<br>
+psi/zfjbig2.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-10 14:23:39 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=06c920713e11bce9bd541bbf9bf294b2ba16aee8">06c920713e11bce9bd541bbf9bf294b2ba16aee8</a>
+<blockquote>
+<p>
+ Bug 700952: re-introduce over/underflow workaround<br>
+<br>
+ Commit 355434f4b1bbe8c4f98cafad5a6868aa2f0eaae1 reverted a workaround that<br>
+ compensated for over/underflow in Freetype's TTF hinting (related to freedom<br>
+ and projection vector calculations). That problem no longer exists in recent<br>
+ Freetype releases, and the workaround actually caused other issues to occur<br>
+ with hinting.<br>
+<br>
+ What wasn't obvious was that the workaround also protected over/underflow<br>
+ issues relating to the unitsPerEm value.<br>
+<br>
+ So this re-instates the workaround, but bases the decision on how the final<br>
+ scale is distributing between the Freetype &quot;size&quot; and the Freetype matrix on<br>
+ the unitsPerEm value (this is relevant for all font types as, for non-TTF,<br>
+ font types, Freetype derives the unitsPerEm from the FontMatrix (for PS type<br>
+ fonts).<br>
+<br>
+ Also fixes Bug 700875<br>
+<br>
+base/fapi_ft.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-10 14:51:12 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=35d9fc4d2a9dd85fc8497cb68389ec6eded73fcb">35d9fc4d2a9dd85fc8497cb68389ec6eded73fcb</a>
+<blockquote>
+<p>
+ Update the copyright string.<br>
+<br>
+base/gscdefs.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-10 13:54:57 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=08b91a2141df36d2f733e1822601ad06941674f2">08b91a2141df36d2f733e1822601ad06941674f2</a>
+<blockquote>
+<p>
+ Detect system jbig2dec library using pkg-config if available.<br>
+<br>
+ Otherwise fall back to traditional presence checking.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-10 20:06:04 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9f111ddc1cdb3cee329fb71e6ce4fd31c150f039">9f111ddc1cdb3cee329fb71e6ce4fd31c150f039</a>
+<blockquote>
+<p>
+ jbig2dec: Improve jbig2dec-specific gitignore.<br>
+<br>
+jbig2dec/.gitignore<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-10 13:48:05 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d72c6cdcd686a7dd0836f8a3afc4e23b5bb45144">d72c6cdcd686a7dd0836f8a3afc4e23b5bb45144</a>
+<blockquote>
+<p>
+ jbig2dec: Add pkg-config file and allow for it to be installed.<br>
+<br>
+jbig2dec/Makefile.am<br>
+jbig2dec/configure.ac.in<br>
+jbig2dec/jbig2dec.pc.in<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-10 18:23:26 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=300dd807b47d48b7b8368ca7b6db3db0312fa19b">300dd807b47d48b7b8368ca7b6db3db0312fa19b</a>
+<blockquote>
+<p>
+ jbig2dec: Check that header version matches library version.<br>
+<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-10 18:00:35 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a2f646ac8a07e7d019ddcb9e0ca2bdff1f5c740f">a2f646ac8a07e7d019ddcb9e0ca2bdff1f5c740f</a>
+<blockquote>
+<p>
+ jbig2dec: Expose version number in header.<br>
+<br>
+ Since the version number should only be specified in one location,<br>
+ the public jbig2dec header, autogen.sh will not regenrate the<br>
+ autoconf input file configure.ac.<br>
+<br>
+jbig2dec/autogen.sh<br>
+jbig2dec/config_win32.h<br>
+jbig2dec/configure.ac.in<br>
+jbig2dec/jbig2.h<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-10 13:44:23 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=90e56e3d9195f1aa19977629f2d3d3b4ec4d72cf">90e56e3d9195f1aa19977629f2d3d3b4ec4d72cf</a>
+<blockquote>
+<p>
+ jbig2dec: Add empty m4 directory to silence libtool warning.<br>
+<br>
+jbig2dec/Makefile.am<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-10 13:40:08 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cb4d8dee4974e85b8c54f553520bded6fabd7b74">cb4d8dee4974e85b8c54f553520bded6fabd7b74</a>
+<blockquote>
+<p>
+ jbig2dec: Silence automake warning about setting CFLAGS directly.<br>
+<br>
+ Setting AM_CFLAGS is added to CFLAGS, adding the wanted XCFLAGS.<br>
+<br>
+jbig2dec/Makefile.am<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-10 13:39:05 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f25171c4fc2a5e7cd6bd9ab0b96a5133c038425d">f25171c4fc2a5e7cd6bd9ab0b96a5133c038425d</a>
+<blockquote>
+<p>
+ jbig2dec: Silence automake warning about ar use.<br>
+<br>
+jbig2dec/configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-05 18:09:20 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9f1959fb44a4da0506c8ef7a8cbb0ccbef4cceea">9f1959fb44a4da0506c8ef7a8cbb0ccbef4cceea</a>
+<blockquote>
+<p>
+ jbig2dec: Fix bug where realloc returns NULL.<br>
+<br>
+jbig2dec/jbig2_image.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-10 05:11:16 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=67c9175c4a601a447b22e84251ec8c33ac827277">67c9175c4a601a447b22e84251ec8c33ac827277</a>
+<blockquote>
+<p>
+ jbig2: Avoid integer overflow in custom allocator.<br>
+<br>
+base/sjbig2.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-10 05:10:29 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a69dd377c6f07e08ea4f895eabb974c92adccab4">a69dd377c6f07e08ea4f895eabb974c92adccab4</a>
+<blockquote>
+<p>
+ jbig2: Print messages from jbig2dec, do not just count them.<br>
+<br>
+base/sjbig2.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-03 11:01:18 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1fb3a69df53754f6a000152606f52b2f4a658b97">1fb3a69df53754f6a000152606f52b2f4a658b97</a>
+<blockquote>
+<p>
+ Fix crash reported by customer #531 with multi-threaded rendering.<br>
+<br>
+ This was a race condition where threads were continuing to be started<br>
+ while we were tearing threads down. This doesn't occur with most usages<br>
+ because we render the entire page, but with the customer's device, it<br>
+ stops reading before the last line, but the multi-threading rendering<br>
+ logic tried to keep starting threads (up to NumRenderingThreads) to<br>
+ have later bands available.<br>
+<br>
+ The solution is to wait for all threads to be in the &quot;THREAD_DONE&quot;<br>
+ state before freeing the threads.<br>
+<br>
+ Also, since the color_usage_array of the main thread is shared by the<br>
+ rendering threads, wait until the threads are shut down before freeing<br>
+ that.<br>
+<br>
+base/gxclist.c<br>
+base/gxclthrd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-19 13:49: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=d9055d0a350ca7681fb8f4854ed4f1c3bf7ed570">d9055d0a350ca7681fb8f4854ed4f1c3bf7ed570</a>
+<blockquote>
+<p>
+ Bring master up to date with 9.27 release branch<br>
+<br>
+ Product string, dates etc for 9.27 release candidate<br>
+<br>
+ News and changelog for 9.27 release candidate<br>
+<br>
+ Update product string, dates etc for 9.27 release<br>
+<br>
+ News/History9.htm revisions also.<br>
+<br>
+base/version.mak<br>
+doc/DLL.htm<br>
+doc/Deprecated.htm<br>
+doc/Develop.htm<br>
+doc/Devices.htm<br>
+doc/Drivers.htm<br>
+doc/Fonts.htm<br>
+doc/History9.htm<br>
+doc/Install.htm<br>
+doc/Internal.htm<br>
+doc/Language.htm<br>
+doc/Lib.htm<br>
+doc/Make.htm<br>
+doc/News.htm<br>
+doc/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/SavedPages.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+doc/gs-vms.hlp<br>
+doc/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+man/dvipdf.1<br>
+man/gs.1<br>
+man/gslp.1<br>
+man/gsnd.1<br>
+man/pdf2dsc.1<br>
+man/pdf2ps.1<br>
+man/pf2afm.1<br>
+man/pfbtopfa.1<br>
+man/printafm.1<br>
+man/ps2ascii.1<br>
+man/ps2epsi.1<br>
+man/ps2pdf.1<br>
+man/ps2pdfwr.1<br>
+man/ps2ps.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-04 10:44:50 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=12e31a72ffe1d2da30bf2c1976795b72ccd320b2">12e31a72ffe1d2da30bf2c1976795b72ccd320b2</a>
+<blockquote>
+<p>
+ Update jbig2dec stuff for 0.16 release<br>
+<br>
+jbig2dec/CHANGES<br>
+jbig2dec/config_win32.h<br>
+jbig2dec/configure.ac<br>
+jbig2dec/jbig2dec.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-03 03:28:01 -0700
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=76c6de5428936c8fdb7269d7fcc31d4bdc83d745">76c6de5428936c8fdb7269d7fcc31d4bdc83d745</a>
+<blockquote>
+<p>
+ Fix problems with &quot;typedef struct foo_s foo;&quot; redefinitions.<br>
+<br>
+ In the header revamp, I'd left various places where we<br>
+ use the above formulation in more than one location. This<br>
+ is fine with all the C compilers I tested it on, but seems<br>
+ to update gcc 4.1.2.<br>
+<br>
+ This effect can be seen on later gcc's by using<br>
+ &quot;-std=gnu89 -pedantic&quot;.<br>
+<br>
+ This commit tweaks the code to avoid redefinitions of this<br>
+ kind.<br>
+<br>
+base/gsfont.h<br>
+base/gsgdata.h<br>
+base/gspath.h<br>
+base/gspenum.h<br>
+base/gxchar.h<br>
+base/gxdevcli.h<br>
+base/gxfont.h<br>
+base/gxiodev.h<br>
+base/gxpath.h<br>
+base/gxtext.h<br>
+base/lib.mak<br>
+psi/imemory.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-03 08:37:41 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7146b7292e27acc54d23b48472f6851ae9b51d8c">7146b7292e27acc54d23b48472f6851ae9b51d8c</a>
+<blockquote>
+<p>
+ Fix PDFX_def.ps<br>
+<br>
+ Bug #700942<br>
+<br>
+ For some reason Git did a merge with this file when I made the change,<br>
+ and it messed it up. Since we don't test these files, it didn't get<br>
+ noticed.<br>
+<br>
+lib/PDFX_def.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-02 10:55:27 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2c97be9f328babb7b544ab3610e6fce05e30cdc8">2c97be9f328babb7b544ab3610e6fce05e30cdc8</a>
+<blockquote>
+<p>
+ pdfwrite - change the example PDF/A and PDF/X scripts<br>
+<br>
+ From Bug #700930 &quot;Typo in example command for PDF/X-3 in VectorDevices.htm&quot;<br>
+<br>
+ The reporter claimed that the (mis-spelled) command didn't work, which<br>
+ was not surprising, since it contained a typo. After fixing the<br>
+ documentation the reporter claimed that the command didn't work. This<br>
+ is true and was missed because of the misleading title.<br>
+<br>
+ The PDFX_def.ps file was mistakenly pulling the ProcessColorModel from<br>
+ systemdict, which would only be set if this was set on the command line.<br>
+ The real problem is the fact that our setpagedevice/currentpagedevice<br>
+ code doesn't truly reflect the device setup, so changes to the<br>
+ ProcessColorModel caused by setting ColorConversionStrategy are not<br>
+ reflected in the values returned by currentpagedevice.<br>
+<br>
+ This commit updates PDFX_def.ps to chaeck the ColorConversionStrategy<br>
+ instead, which is more reliable, and then use the ProcessColorModel<br>
+ from the currentpagedevice as a fallback if ColorConversionStrategy<br>
+ is not set. (actually this should not be possible)<br>
+<br>
+ Update PDFA_def.ps similarly; although it was using the currentpagedvice<br>
+ this is not a reliable method.<br>
+<br>
+ Finally; reformat the files, add some extra comments describing what the<br>
+ code is doing, make it clearer that these files *should* be customised<br>
+ and add additional some basic instruction on customising them.<br>
+<br>
+lib/PDFA_def.ps<br>
+lib/PDFX_def.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-02 08:26:09 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=978b03b453245c2a48abaee5addea3b7e025a2ed">978b03b453245c2a48abaee5addea3b7e025a2ed</a>
+<blockquote>
+<p>
+ Fix another typo.<br>
+<br>
+ HTML is annoyingly impossible to spell-check :-(<br>
+<br>
+doc/VectorDevices.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-01 16:15:21 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2983be3f871e480b6567f5ce5c16206a026851fe">2983be3f871e480b6567f5ce5c16206a026851fe</a>
+<blockquote>
+<p>
+ PS interpreter - prevent user code overriding some commad line switches<br>
+<br>
+ Bug #700935 &quot;defining BATCH causes typecheck in ifelse&quot;<br>
+<br>
+ A (surprisingly large) number of command line switches are checked at<br>
+ various points in gs_init.ps, but use the 'current' definition of the<br>
+ key, rather than explicitly checking systemdict, which is where the<br>
+ command line controls are stored.<br>
+<br>
+ This meant that user code could (deliberately or accidentally) override<br>
+ the system definition and cause errors or unexpected behaviour.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-01 16:12:33 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=34a94a5d72f8a339cad4c2e2140519c33b58de79">34a94a5d72f8a339cad4c2e2140519c33b58de79</a>
+<blockquote>
+<p>
+ tiffsep devices - add TIFFDateTime to get_params<br>
+<br>
+ We need to add this parameter to both put_params and get_params, or it<br>
+ will not work properly.<br>
+<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-01 13:30:57 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=87e4b35c9fc15434d710f86aa265501cad61c34f">87e4b35c9fc15434d710f86aa265501cad61c34f</a>
+<blockquote>
+<p>
+ Tiff devices - Honour the TIFFDateTime parameter<br>
+<br>
+ The TIFFDateTime switch can be used to disable writing the date and<br>
+ time into the tags of TIFF files. However, the tiffg3, tiffg4, tiffsep<br>
+ and tiffsep1 devices weren't honouring the parameter.<br>
+<br>
+ I believe this also affected the tiff32 and tiff8 devices, all the<br>
+ tiffscaled devices and teh tiffcrle device.<br>
+<br>
+ Although gdevtfax.c read the parameter, it didn't transfer it to the<br>
+ devcie structure. The tiffsep and tiffsep1 devices didn't even read it.<br>
+<br>
+ I can't help thinking that having our tiff support spread over 19<br>
+ different devices and 3 source files<br>
+<br>
+devices/gdevtfax.c<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-01 10:58:11 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b987c511229ba0b70e6a7691366d530fa8db7444">b987c511229ba0b70e6a7691366d530fa8db7444</a>
+<blockquote>
+<p>
+ pdfwrite - completely remove the old colour management<br>
+<br>
+ Also remove all references (I hope) from the documentation.<br>
+<br>
+ While we're changing the docs, remove references to ps2pdf where we are<br>
+ really referring to pdfwrite, rewrite the information on LZW Encoding,<br>
+ update the 'Opitimize' distiller param note, add some covering words<br>
+ about the faxt that pdfwrite doesn't permit the full range of options<br>
+ in the LCMS2 implementation that rendering devices do, note that the<br>
+ example PDFX_def.ps needs to be modified (cribbed from PDF/A).<br>
+<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfi.c<br>
+devices/vector/gdevpdfp.c<br>
+devices/vector/gdevpsdf.h<br>
+doc/VectorDevices.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-04-01 08:20:52 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f5bd9757cffeb8b173cdde161b39abd381e325c3">f5bd9757cffeb8b173cdde161b39abd381e325c3</a>
+<blockquote>
+<p>
+ Documentation changes<br>
+<br>
+ Bug #700930 &quot;Ghostscript - Typo in example command for PDF/X-3 in VectorDevices.htm&quot;<br>
+<br>
+doc/VectorDevices.htm<br>
+lib/PDFX_def.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-29 15:43:14 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=086390943b223cd726d7f63ad076b48e57ceae0f">086390943b223cd726d7f63ad076b48e57ceae0f</a>
+<blockquote>
+<p>
+ Fix Downscaler ETS brokenness.<br>
+<br>
+ We are only supposed to use ETS if requested. We pass in a flag to<br>
+ say whether to use it - probably best, on balance, not to ignore it.<br>
+<br>
+base/gxdownscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-28 10:36:53 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3929dbaed570ba58cccbf600ba58158ab4fafd8a">3929dbaed570ba58cccbf600ba58158ab4fafd8a</a>
+<blockquote>
+<p>
+ Revise gs.c to use the gsapi API.<br>
+<br>
+ It's probably better if our own code reflects the way we recommend others to<br>
+ code.<br>
+<br>
+psi/gs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-28 09:21:37 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a87c116174ef574465ab12493ef6d0c575bda60d">a87c116174ef574465ab12493ef6d0c575bda60d</a>
+<blockquote>
+<p>
+ Fix sefault with 'so' build.<br>
+<br>
+ The loaders were passing an unitialise pointer into gsapi_new_instance()<br>
+ meaning we might try to dereference the pointer to get to the shared portion<br>
+ of the library context.<br>
+<br>
+ Initialise the pointer to NULL.<br>
+<br>
+ Apply the same fix to everywhere that uses gsapi_new_instance.<br>
+<br>
+pcl/pl/plwmainc.c<br>
+pcl/pl/realmain.c<br>
+psi/apitest.c<br>
+psi/dmmain.c<br>
+psi/dpmain.c<br>
+psi/dwmain.c<br>
+psi/dwmainc.c<br>
+psi/dxmain.c<br>
+psi/dxmainc.c<br>
+toolbin/halftone/gen_stochastic/gen_stochastic.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-27 14:41:13 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9723b898561c3cd7b9f207c9976994671940df56">9723b898561c3cd7b9f207c9976994671940df56</a>
+<blockquote>
+<p>
+ Update thirdparty.htm: Freetype and jbig2dec versions<br>
+<br>
+doc/thirdparty.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-27 08:08:04 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a21912a4c7c2a0cbc79c1a86df77b63bcae850fb">a21912a4c7c2a0cbc79c1a86df77b63bcae850fb</a>
+<blockquote>
+<p>
+ Add license file for cups/libcups<br>
+<br>
+cups/LICENSE.txt<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-26 16:26:11 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cdd481e5406b8fd07f0cc9b771adfd6877028d96">cdd481e5406b8fd07f0cc9b771adfd6877028d96</a>
+<blockquote>
+<p>
+ Fix valgrind error with PXL patterns and high level devices<br>
+<br>
+ Bug #700573 &quot; Uninitialised colors used in path plotting&quot;<br>
+<br>
+ When the current colour space is a pattern, and the saved high level<br>
+ colour space is also a pattern, we were checking every possible<br>
+ component of ccolor.paint.values in both spaces against each other.<br>
+<br>
+ The problem is that in gx_hld_save_color we set almost all the values to<br>
+ 0, but then copy a single uninitialised value into the 0th index.<br>
+<br>
+ This leads to a valgrind error. Henry points out that the PostScript<br>
+ interpreter has a hack specifically to work around this in zcolor.c,<br>
+ zsetcolor() at around line 313.<br>
+<br>
+ This is wasteful, its far better (IMO) to rearrange the logic in<br>
+ gx_hld_saved_color_equal(), we already bail out early if the colour<br>
+ spaces are not equal. If the spaces are patterns, then there's no point<br>
+ in comparing the device components, instead compare the pattern IDs<br>
+ *before* we compare the device components, if they are the same then<br>
+ return true, if they are different return false.<br>
+<br>
+ This avoids us having to check 2 sets of 64 values, and also avoids us<br>
+ having to set 64 values every time we create a pattern.<br>
+<br>
+base/gxhldevc.c<br>
+psi/zcolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-26 15:14: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=519326a98c1d2172da280305fef0a3a52ddc65bc">519326a98c1d2172da280305fef0a3a52ddc65bc</a>
+<blockquote>
+<p>
+ Tweak the pcl/LICENSE to make a little more sense<br>
+<br>
+ It hadn't been revised really for the &quot;new&quot; directory structure.<br>
+<br>
+ It will probably benefit from a more substantial revisit, but for now, this<br>
+ makes it less confusing.<br>
+<br>
+pcl/LICENSE<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-26 09:23:56 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=db96dc02a83e45d2997315e52e77cb4c283c09ce">db96dc02a83e45d2997315e52e77cb4c283c09ce</a>
+<blockquote>
+<p>
+ Reword the 'greeting' to reflect the open source license.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-26 09:13:42 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0371b3cef0e28fa603437faf983c7be8f2160214">0371b3cef0e28fa603437faf983c7be8f2160214</a>
+<blockquote>
+<p>
+ Fix 'greeting' and include COPYING in install<br>
+<br>
+ The greeting message still referenced the obsolete 'PUBLIC' file. And<br>
+ doc/COPYING was missing from the list of files for install.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+base/unixinst.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-26 10:51:36 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=686204e73479a5fde722ca00a851cfb7f0d4186a">686204e73479a5fde722ca00a851cfb7f0d4186a</a>
+<blockquote>
+<p>
+ Bug 700897: fix validation of -M and -N parameters.<br>
+<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-25 19:35:07 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=81d801a07450227eee573aac5fc9259862b4a568">81d801a07450227eee573aac5fc9259862b4a568</a>
+<blockquote>
+<p>
+ Fix tiffsep_cmyk_cs_to_cm in tiffsep device<br>
+<br>
+ When we were doing just a single or a couple spot colorants using something like<br>
+ -c &quot;&lt;&lt; /SeparationColorNames [(Pantone 137 CVU)] /SeparationOrder [(Pantone 137 CVU)]&gt;&gt;<br>
+ setpagedevice&quot; the colorants mappings were not getting properly cleared by<br>
+ tiffsep_cmyk_cs_to_cm causing fillpage to not clear out the page.<br>
+<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-25 09:01:51 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c70dc7911aaf559eeec0ced48f8504e24ba39b8a">c70dc7911aaf559eeec0ced48f8504e24ba39b8a</a>
+<blockquote>
+<p>
+ Coverity ID 337243 - remove dead code<br>
+<br>
+devices/vector/gdevpdfp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-23 10:29: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=4dc1cb5197292f3fa7548353c4208f507ca3b310">4dc1cb5197292f3fa7548353c4208f507ca3b310</a>
+<blockquote>
+<p>
+ Another trailing white space fix<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-23 10:26:29 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8946e4418257a99ea029283405bc23b75a02e0a5">8946e4418257a99ea029283405bc23b75a02e0a5</a>
+<blockquote>
+<p>
+ PDF Interpreter - fix leading and trailing white spaces in pdf_draw.ps<br>
+<br>
+ Commit 09c656e066777bd69bbd1902e6163fe3a8a39406 included some<br>
+ leading and trailing white spaces.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-20 13:55:54 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f1fccd62b5d1010ecec2817b1b67f3b74b145d02">f1fccd62b5d1010ecec2817b1b67f3b74b145d02</a>
+<blockquote>
+<p>
+ tiffscaled: correctly select the downscaler when using ETS<br>
+<br>
+ When tiffscaled uses ETS for the halftoning, and it's downscaling, we have to<br>
+ select the downscaling &quot;core&quot; based on the factor.<br>
+<br>
+base/gxdownscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-19 17:49:14 +0100
+</strong>
+<br>Knut Petersen &lt;knut_petersen@t-online.de&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eec855c9baeaa73c0208ed439fbbf1a0d48a447e">eec855c9baeaa73c0208ed439fbbf1a0d48a447e</a>
+<blockquote>
+<p>
+ Fix e005c87e09f67f37ce4ae2f80f24cf9182e86d8d<br>
+<br>
+ Signed-off-by: Knut Petersen &lt;knut_petersen@t-online.de&gt;<br>
+<br>
+Resource/Init/pdf_font.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-19 10:06:38 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2d67148ab19d5e278ec4dbe9929839a37f9961b7">2d67148ab19d5e278ec4dbe9929839a37f9961b7</a>
+<blockquote>
+<p>
+ Bug 700744 Documentation typo.<br>
+<br>
+doc/GS9_Color_Management.pdf<br>
+doc/GS9_Color_Management.tex<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-19 08:32:46 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=09c656e066777bd69bbd1902e6163fe3a8a39406">09c656e066777bd69bbd1902e6163fe3a8a39406</a>
+<blockquote>
+<p>
+ Bug 700686 Matte premultiplied images<br>
+<br>
+ The undoing of the matte pre-blend must occur in the image color space. As such<br>
+ the group that the interpreter pushes must be that color space and we must make sure<br>
+ that we undo the pre-blend before any conversions for the group color space.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+base/gdevp14.c<br>
+base/gxblend.c<br>
+base/gxblend.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-19 09:25:48 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=db24f253409d5d085c2760c814c3e1d3fa2dac59">db24f253409d5d085c2760c814c3e1d3fa2dac59</a>
+<blockquote>
+<p>
+ Fix lib/pdf2dsc.ps to use documented Ghostscript pdf procedures.<br>
+<br>
+ We eliminated GS_PDF_ProcSet and pdfdict, but runpdfbegin, dopdfpages,<br>
+ and runpdfend are still available.<br>
+<br>
+lib/pdf2dsc.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-19 08:34:05 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=332c74c6ffe84acfc0fa80a99f6590a4be9f561b">332c74c6ffe84acfc0fa80a99f6590a4be9f561b</a>
+<blockquote>
+<p>
+ Fix bug 700719: SEGV with very large XStep/YStep and transparent patterns.<br>
+<br>
+ At high resolutions, the bonkers XStep/YStep for the pattern could confuse<br>
+ the tile_by_steps_trans logic, and could overflow a 32-bit signed int causing<br>
+ a sign flip. Protect from this by checking to make sure we only fill within<br>
+ the fill_trans_buffer-&gt;rect.<br>
+<br>
+base/gxp1fill.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-19 14:35:43 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c5b92cc2dc9a20c8b6ba204f1e5a5e292bc53846">c5b92cc2dc9a20c8b6ba204f1e5a5e292bc53846</a>
+<blockquote>
+<p>
+ Fix FillOrder tag for the TiffG3 and TiffG4 devices<br>
+<br>
+ Bug #700255 &quot;Option FillOrder doesn't work anymore&quot;<br>
+<br>
+ Commit 0ef309305417776a9f8b8cd143fbf3c5e89456b2 added the FillOrder<br>
+ switch to the 'tiff' class of devices, but the fax Tiff devices already<br>
+ processed that switch, and the commit did not remove the processing<br>
+ from those devices.<br>
+<br>
+ This led to us trying to us ending up with the parameter in the params<br>
+ list twice when we executed get_params (once from the tiff device<br>
+ processing and once from the tiff fax device processing).<br>
+<br>
+ When we then next execute a 'put_param', the list has a duplicate<br>
+ entry for FillOrder. We stop processing when we find the first entry,<br>
+ which means the second entry never gets processed, leading to an<br>
+ unused entry in the list, and that throws an error.<br>
+<br>
+ The simplest way to fix this is to remove the duplicate 'get_param()'<br>
+ processing from the tiff fax devices, leaving it up to the generic<br>
+ Tiff device.<br>
+<br>
+devices/gdevtfax.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-03-19 13:12:25 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5eebbe1be2b097e541b14fecbd5a154c2cba1519">5eebbe1be2b097e541b14fecbd5a154c2cba1519</a>
+<blockquote>
+<p>
+ Bump version number for release<br>
+<br>
+Resource/Init/gs_init.ps<br>
+base/version.mak<br>
+<p>
+</blockquote>
+<hr>
+<hr size=20>
<h3><a name="9.27_changelog"></a>Changelog</h3>
<p><strong>2019-04-03 09:27:46 +0100
</strong>
diff --git a/doc/News.htm b/doc/News.htm
index bfdae91ac..6169627ad 100644
--- a/doc/News.htm
+++ b/doc/News.htm
@@ -100,26 +100,19 @@ overview</a>.
<p> Highlights in this release include:
<ul>
<li>
-<p>We have extensively cleaned up the Postscript name space: removing access to internal
-and/or undocumented Postscript operators, procedures and data. This has benefits for security
-and maintainability.
-</li>
-<li>
-<p>We have added a new &quot;product&quot;: &quot;gpdl&quot;. This is a rethink/redesign of the old
-&quot;language_switch&quot; product (pspcl6), and includes all the interpreters we
-develop based on the Ghostscript graphics library: Postscript, PDF, PCL6, PXL and XPS.
-This is experimental, and should be considered of beta testing quality, and thus is not
-built by default: it can be built by using the &quot;experimental&quot; target.
-<p><code>gpdl</code> uses a heuristic to judge the file type being passed to it. In general,
-it supports most of the widely used command line options for each interpreter, but
-compatibility is not complete (the practicalities of swapping interpreters means it is
-unlikely that full parity of command line options will be possible).
-</li>
-<li>
-<p>Fontmap can now reference invidual fonts in a TrueType Collection for font subsitution.
-Previously, a Fontmap entry could only reference a TrueType collection and use the default
-(first) font. Now, the Fontmap syntax allows for specifying a specific index in a TTC.
-See the comments at the top of (the default) Fontmap.GS for details.
+<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>
</li>
<li>
<p>IMPORTANT: We are in the process of forking LittleCMS. LCMS2 is not thread safe, and
@@ -134,9 +127,24 @@ Our fork will be available as its own package separately from Ghostscript (and M
</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.27_Incompatible_changes"></a>Incompatible changes</h3>
+<h3><a name="9.28_Incompatible_changes"></a>Incompatible changes</h3>
<ul>
<li>
+<p>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
+<a href="Use.htm#Safer">SAFER</a>.
+<p><strong>Important Note for Windows Users</strong>:
+<br>
+The file/path pattern matching is case sensitive, even on Windows. This is a
+change in behaviour compared to the old code which, on Windows, was case
+<i>in</i>sensitive. This is in recognition of changes in Windows behaviour,
+in that it now supports (although does not enforce) case sensitivity.
+</li>
+<li>
+<p>The following is not strictly speaking new to 9.28, 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
only non-standard and undocumented operators. Nevertheless, it is possible that
any integrations or utilities that rely on those non-standard and undocumented
@@ -150,7 +158,7 @@ still work as previously for Postscript files. For PDF files, users are encourag
at <a href="https://www.mupdf.com">MuPDF</a>.
</li>
</ul>
-<h3><a name="9.27_changelog"></a>Changelog</h3>
+<h3><a name="9.28_changelog"></a>Changelog</h3>
<p>See the <a href="History9.htm">history file</a> for complete log
of changes.
diff --git a/doc/Use.htm b/doc/Use.htm
index 0b60b6a06..5b6889b17 100644
--- a/doc/Use.htm
+++ b/doc/Use.htm
@@ -3433,6 +3433,7 @@ should be used so that the restore between jobs will restore global VM as
expected.</dd>
</dl>
+<a name="NoSafer"></a>
<dl>
<dt><code>-dNOSAFER</code> (equivalent to <code>-dDELAYSAFER</code>).</dt>
<dd>This flag disables SAFER mode until the <code>.setsafe</code>