summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorThomas Deutschmann <whissi@gentoo.org>2020-09-10 18:10:49 +0200
committerThomas Deutschmann <whissi@gentoo.org>2020-09-11 20:06:36 +0200
commitacfc02c1747065fe450c7cfeb6f1844b62335f08 (patch)
tree5887806a2e6b99bbb0255e013a9028810e230a7f /doc
parentImport Ghostscript 9.52 (diff)
downloadghostscript-gpl-patches-acfc02c1747065fe450c7cfeb6f1844b62335f08.tar.gz
ghostscript-gpl-patches-acfc02c1747065fe450c7cfeb6f1844b62335f08.tar.bz2
ghostscript-gpl-patches-acfc02c1747065fe450c7cfeb6f1844b62335f08.zip
Import Ghostscript 9.53ghostscript-9.53
Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
Diffstat (limited to 'doc')
-rw-r--r--doc/API.htm733
-rw-r--r--doc/C-style.htm11
-rw-r--r--doc/Commprod.htm11
-rw-r--r--doc/DLL.htm13
-rw-r--r--doc/Deprecated.htm13
-rw-r--r--doc/Develop.htm13
-rw-r--r--doc/Devices.htm103
-rw-r--r--doc/Drivers.htm13
-rw-r--r--doc/Fonts.htm13
-rw-r--r--doc/GPDL.htm618
-rw-r--r--doc/History9.htm13453
-rw-r--r--doc/Install.htm13
-rw-r--r--doc/Internal.htm13
-rw-r--r--doc/Language.htm104
-rw-r--r--doc/Lib.htm13
-rw-r--r--doc/Make.htm13
-rw-r--r--doc/News.htm83
-rw-r--r--doc/Ps-style.htm13
-rw-r--r--doc/Ps2epsi.htm13
-rw-r--r--doc/Psfiles.htm13
-rw-r--r--doc/Readme.htm13
-rw-r--r--doc/Release.htm13
-rw-r--r--doc/SavedPages.htm11
-rw-r--r--doc/Source.htm13
-rw-r--r--doc/Unix-lpr.htm13
-rw-r--r--doc/Use.htm62
-rw-r--r--doc/VectorDevices.htm15
-rw-r--r--doc/WhatIsGS.htm13
-rw-r--r--doc/gdevds32.c21
-rw-r--r--doc/gs-vms.hlp2
-rw-r--r--doc/sample_downscale_device.htm11
-rw-r--r--doc/subclass.htm11
-rw-r--r--doc/thirdparty.htm11
33 files changed, 15064 insertions, 417 deletions
diff --git a/doc/API.htm b/doc/API.htm
index faee4d58..feffd7e7 100644
--- a/doc/API.htm
+++ b/doc/API.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -72,21 +63,37 @@
<li><a href="#revision"><code>gsapi_revision</code></a></li>
<li><a href="#new_instance"><code>gsapi_new_instance</code></a></li>
<li><a href="#delete_instance"><code>gsapi_delete_instance</code></a></li>
+<li><a href="#set_stdio_with_handle"><code>gsapi_set_stdio_with_handle</code></a></li>
<li><a href="#set_stdio"><code>gsapi_set_stdio</code></a></li>
+<li><a href="#set_poll_with_handle"><code>gsapi_set_poll_with_handle</code></a></li>
<li><a href="#set_poll"><code>gsapi_set_poll</code></a></li>
<li><a href="#set_display_callback"><code>gsapi_set_display_callback</code></a></li>
+<li><a href="#register_callout"><code>gsapi_register_callout</code></a></li>
+<li><a href="#deregister_callout"><code>gsapi_deregister_callout</code></a></li>
<li><a href="#set_arg_encoding"><code>gsapi_set_arg_encoding</code></a></li>
+<li><a href="#get_default_device_list"><code>gsapi_get_default_device_list</code></a></li>
+<li><a href="#set_default_device_list"><code>gsapi_set_default_device_list</code></a></li>
<li><a href="#run"><code>gsapi_run_string_begin</code></a></li>
<li><a href="#run"><code>gsapi_run_string_continue</code></a></li>
<li><a href="#run"><code>gsapi_run_string_end</code></a></li>
<li><a href="#run"><code>gsapi_run_string_with_length</code></a></li>
<li><a href="#run"><code>gsapi_run_string</code></a></li>
+<li><a href="#run"><code>gsapi_run_file</code></a></li>
<li><a href="#init"><code>gsapi_init_with_args</code></a></li>
-<li><a href="#run"><code>gsapi_run_*</code></a></li>
<li><a href="#exit"><code>gsapi_exit</code></a></li>
+<li><a href="#set_param"><code>gsapi_set_param</code></a></li>
+<li><a href="#get_param"><code>gsapi_get_param</code></a></li>
+<li><a href="#enumerate_params"><code>gsapi_enumerate_params</code></a></li>
+<li><a href="#add_control_path"><code>gsapi_add_control_path</code></a></li>
+<li><a href="#remove_control_path"><code>gsapi_remove_control_path</code></a></li>
+<li><a href="#purge_control_paths"><code>gsapi_purge_control_paths</code></a></li>
+<li><a href="#activate_path_control"><code>gsapi_activate_path_control</code></a></li>
+<li><a href="#is_path_control_active"><code>gsapi_is_path_control_active</code></a></li>
<li><a href="#add_fs"><code>gsapi_add_fs</code></a></li>
<li><a href="#remove_fs"><code>gsapi_remove_fs</code></a></li>
<li><a href="#return_codes">Return codes</a></li>
+<li><a href="#gsapi_fs_t">gsapi_fs_t</a></li>
+<li><a href="#callout">Callouts</a></li>
</ul>
<li><a href="#Example_usage">Example usage</a></li>
<li><a href="#stdio">Standard input and output</a></li>
@@ -195,6 +202,16 @@ void
<li><code>
int
+<a href="#set_stdio_with_handle">gsapi_set_stdio_with_handle</a>
+(void *instance,
+ int(*stdin_fn)(void *caller_handle, char *buf, int len),
+ int(*stdout_fn)(void *caller_handle, const char *str, int len),
+ int(*stderr_fn)(void *caller_handle, const char *str, int len),
+ void *caller_handle);
+</code></li>
+
+<li><code>
+int
<a href="#set_stdio">gsapi_set_stdio</a>
(void *instance,
int(*stdin_fn)(void *caller_handle, char *buf, int len),
@@ -204,6 +221,12 @@ int
<li><code>
int
+<a href="#set_poll_with_handle">gsapi_set_poll_with_handle</a>
+(void *instance, int(*poll_fn)(void *caller_handle), void *caller_handle);
+</code></li>
+
+<li><code>
+int
<a href="#set_poll">gsapi_set_poll</a>
(void *instance, int(*poll_fn)(void *caller_handle));
</code></li>
@@ -216,14 +239,30 @@ int
<li><code>
int
+<a href="#register_callout">gsapi_register_callout</a>
+(void *instance, gs_callout callout, void *callout_handle);
+</code></li>
+
+<li><code>
+void
+<a href="#deregister_callout">gsapi_deregister_callout</a>
+(void *instance, gs_callout callout, void *callout_handle);
+</code></li>
+
+<li><code>
+int
<a href="#set_arg_encoding">gsapi_set_arg_encoding</a>
(void *instance, int encoding);
</code></li>
<li><code>
int
-<a href="#init">gsapi_init_with_args</a>
-(void *instance, int argc, char **argv);
+<a href="#get_default_device_list">gsapi_get_default_device_list</a>(void *instance, char **list, int *listlen);
+</code></li>
+
+<li><code>
+int
+<a href="#set_default_device_list">gsapi_set_default_device_list</a>(void *instance, const char *list, int listlen);
</code></li>
<li><code>
@@ -268,12 +307,58 @@ int
<li><code>
int
+<a href="#init">gsapi_init_with_args</a>
+(void *instance, int argc, char **argv);
+</code></li>
+
+<li><code>
+int
<a href="#exit">gsapi_exit</a>
(void *instance);
</code></li>
<li><code>
int
+<a href="#set_param">gsapi_set_param</a>(void *instance, const char *param, const void *value, gs_set_param_type type);
+</code></li>
+
+<li><code>
+ int
+ <a href="#get_param">gsapi_get_param</a>(void *instance, const char *param, void *value, gs_set_param_type type);
+</code></li>
+
+<li><code>
+int
+<a href="#enumerate_params">gsapi_enumerate_params</a>(void *instance, void **iter, const char **key, gs_set_param_type *type);
+</code></li>
+
+<li><code>
+int
+<a href="#add_control_path">gsapi_add_control_path</a>(void *instance, int type, const char *path);
+</code></li>
+
+<li><code>
+int
+<a href="#remove_control_path">gsapi_remove_control_path</a>(void *instance, int type, const char *path);
+</code></li>
+
+<li><code>
+void
+<a href="#purge_control_paths">gsapi_purge_control_paths</a>(void *instance, int type);
+</code></li>
+
+<li><code>
+void
+<a href="#activate_path_control">gsapi_activate_path_control</a>(void *instance, int enable);
+</code></li>
+
+<li><code>
+int
+<a href="#is_path_control_active">gsapi_is_path_control_active</a>(void *instance);
+</code></li>
+
+<li><code>
+int
<a href="#add_fs">gsapi_add_fs</a>
(void *instance,
gsapi_fs_t *fs, void *secret);
@@ -321,7 +406,7 @@ else {
<blockquote>
Create a new instance of Ghostscript.
This instance is passed to most other gsapi functions.
-The caller_handle will be provided to callback functions.
+The caller_handle is the default value that will be provided to callback functions.
<b>Unless Ghostscript has been compiled with the </code>GS_THREADSAFE</code>
define, only one instance at a time is supported.</b>
@@ -353,19 +438,33 @@ If Ghostscript has been initialised, you must call
</blockquote>
-<h3><a name="set_stdio"></a><code>gsapi_set_stdio()</code></h3>
+<h3><a name="set_stdio_with_handle"></a><code>gsapi_set_stdio_with_handle()</code></h3>
<blockquote>
-Set the callback functions for stdio
+<p>Set the callback functions for stdio, together with the
+handle to use in the callback functions.
The stdin callback function should return the number of
characters read, 0 for EOF, or -1 for error.
The stdout and stderr callback functions should return
the number of characters written.
+<p><b>NOTE:</b> These callbacks do not affect output device I/O when
+using &quot;<code>%stdout</code>&quot; as the output file. In that
+case, device output will still be directed to the process &quot;stdout&quot;
+file descriptor, not to the stdio callback.
</blockquote>
+<h3><a name="set_stdio"></a><code>gsapi_set_stdio()</code></h3>
+<blockquote>
+<p>Set the callback functions for stdio. The handle used
+in the callbacks will be taken from the value passed
+to <code><a href="#new_instance">gsapi_new_instance</a></code>. Otherwise the behaviour of this
+function matches <code><a href="#set_stdio_with_handle">gsapi_set_stdio_with_handle</a></code>.
+</blockquote>
-<h3><a name="set_poll"></a><code>gsapi_set_poll()</code></h3>
+
+<h3><a name="set_poll_with_handle"></a><code>gsapi_set_poll_with_handle()</code></h3>
<blockquote>
-Set the callback function for polling. This function will only be called if
+Set the callback function for polling, together with the handle to pass
+to the callback function. This function will only be called if
the Ghostscript interpreter was compiled with <code>CHECK_INTERRUPTS</code>
as described in <code><a href="../base/gpcheck.h">gpcheck.h</a></code>.
<p>
@@ -380,10 +479,25 @@ to return 0 immediately some number of times can be used to reduce the
performance impact.</p>
</blockquote>
+<h3><a name="set_poll"></a><code>gsapi_set_poll()</code></h3>
+<blockquote>
+Set the callback function for polling. The handle passed to the
+callback function will be taken from the handle passed to
+<code><a href="#new_instance">gsapi_new_instance</a></code>.
+Otherwise the behaviour of this function matches
+<code><a href="#set_poll_with_handle">gsapi_set_poll_with_handle</a></code>.
+</blockquote>
+
<h3><a name="set_display_callback"></a><code>gsapi_set_display_callback()</code></h3>
<blockquote>
+<b>This call is deprecated; please use
+<code><a href="#register_callout">gsapi_register_callout</a></code>
+to register a <a href="#callout">callout</a> handler for the
+<a href="#display">display</a> device in preference.</b>
Set the callback structure for the <a href="#display">display</a>
-device. If the <a href="#display">display</a> device is used,
+device. The handle passed in the callback functions is taken from
+the <code>DisplayHandle</code> parameter (or NULL if there is no
+such parameter). If the <a href="#display">display</a> device is used,
this must be called after
<code>gsapi_new_instance()</code>
and before <code>gsapi_init_with_args()</code>.
@@ -391,6 +505,20 @@ See <code><a href="../base/gdevdsp.h">gdevdsp.h</a></code>
for more details.
</blockquote>
+<h3><a name="register_callout"></a><code>gsapi_register_callout()</code></h3>
+<blockquote>
+<p>This call registers a <code><a href="#callout">callout</a></code>
+handler.</p>
+</blockquote>
+
+<h3><a name="deregister_callout"></a><code>gsapi_deregister_callout()</code></h3>
+<blockquote>
+<p>This call deregisters a <code><a href="#callout">callout</a></code> handler
+previously registered with <code><a href="#register_callout">gsapi_register_callout</a></code>.
+All three arguments must match exactly for the callout handler to
+be deregistered.</p>
+</blockquote>
+
<h3><a name="set_arg_encoding"></a><code>gsapi_set_arg_encoding()</code></h3>
<blockquote>
Set the encoding used for the interpretation of all subsequent args
@@ -405,6 +533,23 @@ This must be called after <code>gsapi_new_instance()</code>
and before <code>gsapi_init_with_args()</code>.
</blockquote>
+<h3><a name="set_default_device_list"></a><code>set_default_device_list()</code></h3>
+<blockquote>
+Set the string containing the list of default device names,
+for example "display x11alpha x11 bbox". Allows the calling
+application to influence which device(s) gs will try, in order,
+in it's selection of the default device.
+This must be called after <code>gsapi_new_instance()</code>
+and before <code>gsapi_init_with_args()</code>.
+</blockquote>
+
+<h3><a name="get_default_device_list"></a><code>get_default_device_list()</code></h3>
+<blockquote>
+Returns a pointer to the current default device string.
+This must be called after <code>gsapi_new_instance()</code>
+and before <code>gsapi_init_with_args()</code>.
+</blockquote>
+
<h3><a name="init"></a><code>gsapi_init_with_args()</code></h3>
<blockquote>
Initialise the interpreter.
@@ -451,6 +596,119 @@ This must be called on shutdown if <code>gsapi_init_with_args()</code>
has been called, and just before <code>gsapi_delete_instance()</code>.
</blockquote>
+<h3><a name="set_param"></a><code>gsapi_set_param()</code></h3>
+<blockquote>
+Set a parameter.
+Broadly, this is equivalent to setting a parameter using <code>-d</code>, <code>-s</code> or <code>-p</code> on the command line. This call cannot be made during a <code>run_string</code> operation.
+<p>
+Parameters in this context are not the same as 'arguments' as processed by <code>gsapi_init_with_args</code>, but often the same thing can be achieved. For example, with <code>gsapi_init_with_args</code>, we can pass &quot;<code>-r200</code>&quot; to change the resolution. Broadly the same thing can be achieved by using <code>gsapi_set_param</code> to set a parsed value of &quot;<code>&lt;&lt;/HWResolution [ 200.0 200.0 ]&gt;&gt;</code>&quot;.
+<p>
+Note, that internally, when we set a parameter, we perform an <code>initgraphics</code> operation. This means that using <code>set_param</code> other than at the start of a page is likely to give unexpected results.
+<p>Further, note that attempting to set a parameter that the device does not recognise will be silently ignored, and that parameter will not be found in subsequent <code>gsapi_get_param</code> calls.
+<p>The <code>type</code> argument dictates the kind of object that <code>value</code> points to:
+<pre><code>typedef enum {
+ gs_spt_invalid = -1,
+ gs_spt_null = 0, /* void * is NULL */
+ gs_spt_bool = 1, /* void * is a pointer to an int (0 false,
+ * non-zero true). */
+ gs_spt_int = 2, /* void * is a pointer to an int */
+ gs_spt_float = 3, /* void * is a float * */
+ gs_spt_name = 4, /* void * is a char * */
+ gs_spt_string = 5, /* void * is a char * */
+ gs_spt_long = 6, /* void * is a long * */
+ gs_spt_i64 = 7, /* void * is an int64_t * */
+ gs_spt_size_t = 8, /* void * is a size_t * */
+ gs_spt_parsed = 9, /* void * is a pointer to a char * to be parsed */
+
+ /* Setting a typed param causes it to be instantly fed to to the
+ * device. This can cause the device to reinitialise itself. Hence,
+ * setting a sequence of typed params can cause the device to reset
+ * itself several times. Accordingly, if you OR the type with
+ * gs_spt_more_to_come, the param will held ready to be passed into
+ * the device, and will only actually be sent when the next typed
+ * param is set without this flag (or on device init). Not valid
+ * for get_typed_param. */
+ gs_spt_more_to_come = 1<<31
+} gs_set_param_type;
+</code></pre>
+<p>Combining a type value by ORRing it with the <code>gs_spt_more_to_come</code> flag will cause the <code>set_param</code> operation to be queued internally, but not actually be sent to the device. Thus a series of <code>set_param</code> operations can be queued, for example as below:
+<pre>
+ int code = gsapi_set_param(instance,
+ "HWResolution",
+ "[300 300]",
+ gs_spt_parsed | gs_spt_more_to_come);
+ if (code >= 0) {
+ int i = 1;
+ code = gsapi_set_param(instance,
+ "FirstPage",
+ &i,
+ gs_spt_int | gs_spt_more_to_come);
+ }
+ if (code >= 0) {
+ int i = 3;
+ code = gsapi_set_param(instance,
+ "DownScaleFactor",
+ &i,
+ gs_spt_int);
+ }
+</pre>
+<p>This enables a series of set operations to be performed 'atomically'. This can be useful for performance, in that any reconfigurations to the device (such as page size changes or memory reallocations) will only happen when all the parameters are sent, rather than potentially each time each one is sent.
+</blockquote>
+
+<h3><a name="get_param"></a><code>gsapi_get_param()</code></h3>
+<blockquote>
+Get a parameter.
+Retrieve the current value of a parameter.
+<p>If an error occurs, the return value is negative. Otherwise the return value is the number of bytes required for storage of the value. Call once with <code>value = NULL</code> to get the number of bytes required, then call again with <code>value</code> pointing to at least the required number of bytes where the value will be copied out. Note that the caller is required to know the type of value in order to get it. For all types other than <code>string</code>, <code>name</code>, and <code>parsed</code> knowing the type means you already know the size required.
+<p>
+This call retrieves parameters/values that have made it to the device. Thus, any values set using the <code>gs_spt_more_to_come</code> without a following call without that flag will not be retrieved. Similarly, attempting to get a parameter before <code>gsapi_init_with_args</code> has been called will not list any, even if <code>gsapi_set_param</code> has been used.
+<p>
+Attempting to read a parameter that is not set will return <code>gs_error_undefined (-21)</code>. Note that calling <code>gsapi_set_param</code> followed by <code>gsapi_get_param</code> may not find the value, if the device did not recognise the key as being one of its configuration keys.
+</blockquote>
+
+<h3><a name="enumerate_params"></a><code>gsapi_enumerate_params()</code></h3>
+<blockquote>
+Enumerate the current parameters.
+Call repeatedly to list out the current parameters.
+<p>
+ The first call should have <code>*iter = NULL</code>. Subsequent calls should pass the same pointer in so the iterator can be updated. Negative return codes indicate error, 0 success, and 1 indicates that there are no more keys to read. On success, <code>key</code> will be updated to point to a null terminated string with the key name that is guaranteed to be valid until the next call to <code>gsapi_enumerate_params</code>. If <code>type</code> is non <code>NULL</code> then <code>*type</code> will be updated to have the type of the parameter.
+<p>
+Note that only one enumeration can happen at a time. Starting a second enumeration will reset the first.
+<p>
+The enumeration only returns parameters/values that have made it to the device. Thus, any values set using the <code>gs_spt_more_to_come</code> without a following call without that flag will not be retrieved. Similarly, attempting to enumerate parameters before <code>gsapi_init_with_args</code> has been called will not list any, even if <code>gsapi_set_param</code> has been used.
+</blockquote>
+
+<h3><a name="add_control_path"></a><code>gsapi_add_control_path()</code></h3>
+<blockquote>
+Add a (case sensitive) path to one of the lists of permitted paths for file access.
+See <a href="Use.htm#Safer">here</a> for more information about permitted paths.
+</blockquote>
+
+<h3><a name="remove_control_path"></a><code>gsapi_remove_control_path()</code></h3>
+<blockquote>
+Remove a (case sensitive) path from one of the lists of permitted paths for file access.
+See <a href="Use.htm#Safer">here</a> for more information about permitted paths.
+</blockquote>
+
+<h3><a name="purge_control_paths"></a><code>gsapi_purge_control_paths()</code></h3>
+<blockquote>
+Clear all the paths from one of the lists of permitted paths for file access.
+See <a href="Use.htm#Safer">here</a> for more information about permitted paths.
+</blockquote>
+
+<h3><a name="activate_path_control"></a><code>gsapi_activate_path_control()</code></h3>
+<blockquote>
+Enable/Disable path control (i.e. whether paths are checked against permitted paths
+before access is granted).
+See <a href="Use.htm#Safer">here</a> for more information about permitted paths.
+</blockquote>
+
+<h3><a name="is_path_control_active"></a><code>gsapi_is_path_control_active()</code></h3>
+<blockquote>
+Query whether path control is activated or not.
+See <a href="Use.htm#Safer">here</a> for more information about permitted paths.
+</blockquote>
+
<h3><a name="add_fs"></a><code>gsapi_add_fs()</code></h3>
<blockquote>
Adds a new 'Filing System' to the interpreter.
@@ -793,6 +1051,47 @@ Reopen a stream with a different mode. Behaves like
<code>freopen(fname, mode, FILE *)</code>.
</dl>
+<h3><a name="callout"></a>Callouts</h3>
+<blockquote>
+<p>Callouts are a mechanism
+for the core code (specifically devices) to communicate with the
+user of gsapi. This communication can take the form of passing
+information out vis-a-vis what devices are doing, or requesting
+configuration from the caller to affect exactly how the device
+itself works.</p>
+<p>This is deliberately an extensible system, so exact details of
+callouts should be documented with the device in question. In general
+however a callout handler will be of the form:</p>
+<pre>
+typedef int (*gs_callout)(void *callout_handle,
+ const char *device_name,
+ int id,
+ int size,
+ void *data);
+</pre>
+<p>The <code>callout_handle</code> value passed to the callout will
+be the value passed in at registration. The <code>device_name</code>
+should be a null-terminated string giving the name of the device
+(though care should be taken to cope with the case where
+<code>device_name</code> is NULL for potential future uses).
+The <code>id</code> value will have a (device-specific) meaning; see
+the documentation for the device in question for more details. The
+same <code>id</code> value may be used to mean different things in
+different devices.
+Finally, <code>size</code> and <code>data</code> have callout
+specific meanings, but typically, <code>data</code> will be a pointer
+to data block (which may either be uninitialised or wholly/partially
+initialised on entry, and may be updated on exit), and <code>size</code>
+will be the size (in bytes) of the block pointed to by <code>data</code>.
+</p>
+<p>A return value of -1 (<code>gs_error_unknownerror</code>) means
+the callout was not recognised by the handler, and should be passed
+to more handlers. Other negative values are interpreted as standard
+Ghostscript error values, and stop the propagation of the callout.
+Non-negative return codes mean the callout was handled and should
+not be passed to any more registered callout handlers.</p>
+</blockquote>
+
<hr>
<h2><a name="Example_usage"></a>Example Usage</h2>
<p>To try out the following examples in a development environment like Microsoft's
@@ -1016,24 +1315,38 @@ The callback functions are described in
<h2><a name="display"></a>Display device</h2>
<p>
The <code>display</code> device is available for use with
-the Ghostscript interpreter library. This is described in the file
+the Ghostscript interpreter library. While originally designed
+for allowing screen display of rendered output from Ghostscript,
+this is now powerful enough to provide a simple mechanism for
+getting rendered output suitable for use in all manner of
+output scenarios, including printing.</p>
+<p>Details of the API and options are given in the file
<code><a href="../base/gdevdsp.h">gdevdsp.h</a></code>.
This device provides you with access to the raster output of
-Ghostscript. It is your responsibility to copy this raster
+Ghostscript. It is the callers responsibility to copy this raster
to a display window or printer.</p>
<p>
-To use this device, you must provide a callback structure
-with addresses of a number of callback functions.
-The address of the callback structure is provided using
-<code>gsapi_set_display_callback()</code>.
+In order for this device to operate, it needs access to a structure
+containing a set of callback functions, and a callback handle (an
+opaque <code>void *</code> that can be used by caller to locate its
+own state). There are 2 ways that the device can get this
+information, a legacy method, and a modern method.
+</p>
+<dl>
+<dt>Legacy method</dt>
+<dd>
+<p>The address of the callback structure, is provided
+using <code>gsapi_set_display_callback()</code>.
This must be called after
<code>gsapi_new_instance()</code>
and before
<code>gsapi_init_with_args()</code>.</p>
<p>
-The callbacks are for device open, close, resize, sync, page,
-memory allocation and updating.
-Each callback function contains a handle can be set using</p>
+With this call, the callback handle is passed as NULL by default, but can
+be overridden by using a parameter. We actively dislike
+this way of working, as we consider passing addresses
+via the command line distasteful. The handle can be
+set using</p>
<blockquote>
-sDisplayHandle=1234
</blockquote>
@@ -1071,6 +1384,31 @@ The previous API, using a number value:</p>
is still supported on 32 bit systems, but will cause a "typecheck"
error on 64 bit systems, and is considered deprecated. It should
not be used in new code.</p>
+</dd>
+<dt>Modern method
+<dd>
+<p>The preferred method is to register a callout handler using
+<code><a href="#register_callout">gsapi_register_callout</a></code>.
+When this handler is called for the <code>&quot;display&quot;</code>
+device, with <code>id = 0</code> (= <code>DISPLAY_CALLOUT_GET_CALLBACK</code>),
+then <code>data</code> should point to an empty <code>gs_display_get_callback_t</code>
+block, with <code>size = sizeof(gs_display_get_callback_t)</code>.
+</p>
+<pre>
+typedef struct {
+ display_callback *callback;
+ void *caller_handle;
+} gs_display_get_callback_t;
+</pre>
+<p>The handler should fill in the structure before returning,
+with a return code of 0.</p>
+</dd>
+</dl>
+<p>
+Note, that the <code>DisplayHandle</code> value is only consulted for
+display device callbacks registered using the (legacy, now deprecated)
+<code>gsapi_set_display_callback</code> API, not the preferred
+<code>gsapi_register_callout</code> based mechanism.
<p>
The device raster format can be configured using</p>
@@ -1085,44 +1423,333 @@ The device raster format can be configured using</p>
<li> bigendian (RGB) or littleendian (BGR) order.</li>
<li> top first or bottom first raster.</li>
<li> 16 bits/pixel with 555 or 565 bitfields.</li>
+<li> Chunky, Planar and Planar interleaved formats.</li>
+<li> "Full screen" or "Rectangle Request" modes of operation.</li>
</ul>
-<p>The format values are described in
-<code><a href="../base/gdevdsp.h">gdevdsp.h</a></code>.
-The format is flexible enough to support common Windows, OS/2, Linux
-and Mac raster formats. To select the display device with a
-Windows 24-bit RGB raster:</p>
+<p>The operation of the device is best described with a walkthrough
+of some example code that uses it. For simplicity and clarity, we
+have omitted the error handling code in this example; in production
+code, every place where we get a <code>code</code> value returned
+we should check it for failure (a negative value) and clean up
+accordingly. First, we create an instance of Ghostscript:</p>
<pre>
- char **nargv;
- char arg1[64];
- char arg2[64];
- char arg3[64];
+ void *minst = NULL;
code = gsapi_new_instance(&amp;minst, NULL);
- gsapi_set_stdio(minst, gsdll_stdin, gsdll_stdout, gsdll_stderr);
+ code = gsapi_set_stdio(minst, gsdll_stdin, gsdll_stdout, gsdll_stderr);
+</pre>
+<p>Next, we have to give the display device the address of our
+callback structure. In old code, we would do so using something
+like this:</p>
+<pre>
code = gsapi_set_display_callback(minst, &amp;display_callback);
- sprintf(arg1, "-sDEVICE=display");
- sprintf(arg2, "-dDisplayHandle=%d", 0);
- sprintf(arg3, "-dDisplayFormat=%d",
+</pre>
+<p>We strongly recommend that you don't do that, but instead use the
+more modern <a href="callout">callout</a> mechanism:</p>
+<pre>
+ code = gsapi_register_callout(minst, my_callout_handler, state);
+</pre>
+<p>where <code>state</code> is any <code>void *</code> value you like,
+usually a pointer to help you reach any internal state you may need.
+Earlier in your code you would have the definition of
+<code>my_callout_handler</code> that might look like this:</p>
+<pre>
+ static int
+ my_callout_handler(void *instance,
+ void *callout_handle,
+ const char *device_name,
+ int id,
+ int size,
+ void *data)
+{
+ /* On entry, callout_handle == the value of state passed in
+ * to gsapi_register_callout. */
+ /* We are only interested in callouts from the display device. */
+ if (device_name == NULL || strcmp(device_name, "display"))
+ return -1;
+
+ if (id == DISPLAY_CALLOUT_GET_CALLBACK)
+ {
+ /* Fill in the supplied block with the details of our callback
+ * handler, and the handle to use. In this instance, the handle
+ * is the pointer to our test structure. */
+ gs_display_get_callback_t *cb = (gs_display_get_callback_t *)data;
+ cb->callback = &display_callback;
+ cb->caller_handle = callout_handle;
+ return 0;
+ }
+ return -1;
+}
+</pre>
+<p>As you can see, this callout handler only responds to callouts
+for the display device, and then only for one particular function
+(<code>id</code>). It returns the same <code>display_callback</code>
+structure as the deprecated, legacy mechanism passed in using
+<code>gsapi_set_display_callback</code>, with the added benefit that
+the <code>caller_handle</code> value can be passed in too. In this
+example we pass in the same value as was used for <code>callout_handle</code>,
+but implementations are free to use any value they want.</p>
+<p>Returning to our example, we now set up a set of arguments to
+setup Ghostscript:</p>
+<pre>
+ int argc = 0;
+ /* Allow for up to 32 args of up to 64 chars each. */
+ char argv[32][64];
+ sprintf(argc[argc++], "gs");
+ sprintf(argv[argc++], "-sDEVICE=display");
+</pre>
+<p>The zeroth arg is a dummy argument to match the standard C mechanism
+for passing arguments to a program. Traditionally this is the name of
+the program being invoked. Next, we tell Ghostscript to use the display
+device.</p>
+<pre>
+ sprintf(argv[argc++], "-sDEVICE=display");
+</pre>
+Next we tell the display device what output format to use. The
+format is flexible enough to support common Windows, OS/2, Linux
+and Mac raster formats. <p>The format values are described in
+<code><a href="../base/gdevdsp.h">gdevdsp.h</a></code>.
+To select the display device with a Windows 24-bit RGB raster:</p>
+<pre>
+ sprintf(argv[argc++], "-dDisplayFormat=%d",
DISPLAY_COLORS_RGB | DISPLAY_ALPHA_NONE | DISPLAY_DEPTH_8 |
DISPLAY_LITTLEENDIAN | DISPLAY_BOTTOMFIRST);
- nargv = (char **)malloc((argc + 4) * sizeof(char *));
- nargv[0] = argv[0];
- nargv[1] = arg1;
- nargv[2] = arg2;
- nargv[3] = arg3;
- memcpy(nargv + 4, argv + 1, argc * sizeof(char *));
- argc += 3;
- code = gsapi_init_with_args(minst, argc, nargv);
+</pre>
+<p>If (and only if) you used the legacy mechanism described above, you
+will need another argument to pass in the <code>caller_handle</code>
+value to be parroted back to the functions listed within
+<code>display_callback</code>:</p>
+<pre>
+ sprintf(arg2, "-dDisplayHandle=%d", callout_handle);
+</pre>
+<p>Any other arguments that you want can be added to the end of
+the command line, typically including a file to run. Then we pass
+that all to Ghostscript:
+<pre>
+ code = gsapi_init_with_args(minst, argc, argv);
</pre>
+<p><a name="display_callback"></a>At this point you should start to
+see your display callback functions being called. Exactly which callback
+functions are provided, and how they respond will determine exactly
+how the display device operates. The primary choice will be whether the
+device runs in &quot;full page&quot; or &quot;rectangle request&quot;
+ mode. Details of these are given below.</p>
+
+<p>Once we have finished processing the file, we can process
+other files using <code>gsapi_run_file</code>, or feed in data
+using <code>gsapi_run_string</code>. Once you have finished, you
+can shut the interpreter down and exit, using:</p>
+
+<pre>
+ code = gsapi_exit(minst);
+ gsapi_delete_instance(minst);
+</pre>
+
+<p>A full list of the display callback functions can be found in
+<code><a href="../devices/gdevdsp.h">gdevdsp.h</a></code>. There
+are several different versions of the callback, corresponding to
+different &quot;generations&quot; of the device. In general
+you should use the latest one. The <code>size</code> field of
+the structure should be initialised to the size of the structure
+in bytes.</p>
+
+<h3><a name="display_open"></a>display_open</h3>
+
+<pre>int (*display_open)(void *handle, void *device);</pre>
+
+<p>This function will be called when the display device is
+opened. The device may be opened and closed many times,
+sometimes without any output being produced.</p>
+
+<h3><a name="display_preclose"></a>display_preclose</h3>
+
+<pre>int (*display_preclose)(void *handle, void *device);</pre>
+
+<p>This function will be called when the display device is
+about to be closed. The device will not actually be closed
+until this function returns.</p>
+
+<h3><a name="display_close"></a>display_close</h3>
+
+<pre>int (*display_close)(void *handle, void *device);</pre>
+
+<p>This function will be called once the display device has
+been closed. There will be no more events from the device
+unless/until it is reopened.</p>
+
+<h3><a name="display_presize"></a>display_presize</h3>
+
+<pre>int (*display_presize)(void *handle, void *device,
+ int width, int height, int raster, unsigned int format);</pre>
+
+<p>This function will be called when the display device is
+about to be resized. The device will only be resized if this
+function returns 0.</p>
+
+<h3><a name="display_size"></a>display_size</h3>
+
+<pre>int (*display_size)(void *handle, void *device, int width, int height,
+ int raster, unsigned int format, unsigned char *pimage);</pre>
+
+<p>This function will be called when the display device is
+has been resized. The pointer to the raster image is pimage.</p>
+
+<h3><a name="display_sync"></a>display_sync</h3>
+
+<pre>int (*display_sync)(void *handle, void *device);</pre>
+
+<p>This function may be called periodically during display
+to flush the page to the display.</p>
+
+<h3><a name="display_page"></a>display_page</h3>
+
+<pre>int (*display_page)(void *handle, void *device, int copies, int flush);</pre>
+
+<p>This function is called on a &quot;showpage&quot; operation
+(i.e. at the end of every page). Operation will continue as soon as
+this function returns.</p>
+
+<h3><a name="display_update"></a>display_update</h3>
+
+<pre>int (*display_update)(void *handle, void *device,
+ int x, int y, int w, int h);</pre>
+
+<p>This function <strong>may</strong> get called repeatedly
+during rendering to indicate that an area of the output has
+been updated. Certain types of rendering will not see this
+function called back at all (in particular files using
+transparency).</p>
+
+<h3><a name="display_memalloc"></a>display_memalloc</h3>
+
+<pre>int (*display_memalloc)(void *handle, void *device,
+ size_t long size);</pre>
+
+<p><strong>Note:</strong> In older versions of this API,
+size is an <code>unsigned long</code> rather than a
+<code>size_t</code>.</p>
+<p>If this function pointer is sent as NULL, then the
+display device will handle all the memory allocations
+internally, and will always work in full page rendering
+mode.</p>
+<p>Otherwise, this function will be called to allocate
+the storage for the page to be rendered into. If a non-NULL
+value is returned, then the device will proceed to render
+the full page into it. If NULL is returned, then the device
+will check a) whether we are using a V2 or greater display
+callback structure and b) whether that structure specifies
+a <code>rectangle_request</code> function pointer.</p>
+<p>If both of those conditions are true, then the device
+will continue in rectangle request mode. Otherwise it will
+fail with an out of memory error.</p>
+
+
+<h3><a name="display_memfree"></a>display_memfree</h3>
+
+<pre>int (*display_memfree)(void *handle, void *device, void *ptr);</pre>
+
+<p>This function should be NULL if and only if
+<code><a href="#display_memalloc">display_memalloc</a></code> is
+NULL. Any memory allocated using <code>display_memalloc</code> will be
+freed via this function.</p>
+
+<h3><a name="display_separation"></a>display_separation</h3>
+<pre>int (*display_separation)(void *handle, void *device,
+ int component, const char *component_name,
+ unsigned short c, unsigned short m,
+ unsigned short y, unsigned short k);</pre>
+
+<p>When using <code>DISPLAY_COLORS_SEPARATION</code>, this function
+ will be called once for every separation component - first
+ &quot;Cyan&quot;, &quot;Magenta&quot;, &quot;Yellow&quot; and
+ &quot;Black&quot;, then any spot colors used. The supplied
+ <code>c</code>, <code>m</code>, <code>y</code> and <code>k</code>
+ values give the equivalent color for each spot. Each colorant
+ value ranges from 0 (for none) to 65535 (full).</p>
+<p>In separation color mode you are expected to count the number
+of calls you get to this function after each
+<code><a href="#display_size">display_size</a></code> to know how many
+colors you are dealing with.</p>
+
+<h3><a name="display_adjust_band_height"></a>display_adjust_band_height</h3>
+<pre>int (*display_adjust_band_height)(void *handle, void *device,
+ int bandheight);</pre>
+
+<p>When running in &quot;rectangle request mode&quot; the device
+first renders the page to a display list internally. It can then
+be played back repeatedly so that different regions (rectangles)
+of the page can be extracted in sequence. A common use of this is
+to support &quot;banded&quot; operation, where the page is divided
+into multiple non-overlapping bands of a fixed height.</p>
+<p>The display device itself will pick an appropriate band height
+for it to use. If this function pointer is left as NULL then this
+value will be used unchanged. Otherwise, the proposed value will
+be offered to this function. This function can override the choice
+of bandheight, by returning the value that it would like to be
+used in preference.</p>
+<p>In general, this figure should (as much as possible) only be
+adjusted downwards. For example, a device targeting an inkjet printer
+with 200 nozzles in the print head might like to extract bands
+that are a multiple of 200 lines high. So the function might
+return <code>max(200, 200*(bandheight/200))</code>. If the function
+returns 0, then the existing value will be used unchanged.</p>
+<p>Any size rectangle can be chosen with any size bandheight,
+so ultimately the value chosen here will not matter much. It
+may make some small difference in speed in some cases.</p>
+
+<h3><a name="display_rectangle_request"></a>display_rectangle_request</h3>
+<pre>int (*display_rectangle_request)(void *handle, void *device,
+ void **memory, int *ox, int *oy,
+ int *raster, int *plane_raster,
+ int *x, int *y, int *w, int *h);</pre>
+
+<p>If the display device chooses to use rectangle request mode,
+this function will be called repeatedly to request a rectangle
+to render. Ghostscript will render the rectangle, and call this
+function again. The implementer is expected to handle the rectangle
+that has just been rendered, and to return the details of another
+rectangle to render. This will continue until a rectangle with
+zero height or width is returned, whereupon Ghostscript will
+continue operation.</p>
+<p>On entry, <code>*raster</code> and <code>*plane_raster</code>
+are set to the values expected by the format in use. All the
+other pointers point to uninitialised values.</p>
+<p>On exit, the values should be updated appropriately. The
+implementor is expected to store the values returned so that
+the rendered output given can be correctly interpreted when
+ control returns to this function.</p>
+<p><code>memory</code> should be updated to point to a block of
+memory to use for the rendered output. Pixel (<code>*ox</code>,
+<code>*oy</code>) is the first pixel represented in that block.
+<code>*raster</code> is the number of bytes difference between
+the address of component 0 of Pixel(<code>*ox</code>, <code>*oy</code>)
+and the address of component 0 of Pixel(<code>*ox</code>,
+<code>1+*oy</code>). <code>*plane_raster</code> is the number of
+bytes difference between the address of component 0 of
+Pixel(<code>*ox</code>, <code>*oy</code>) and the address of
+component 1 of Pixel(<code>*ox</code>, <code>*oy</code>), if in
+planar mode, 0 otherwise. <code>*x</code>, <code>*y</code>,
+<code>*w</code> and <code>*h</code> give the rectangle requested
+within that memory block.</p>
+<p>Any set of rectangles can be rendered with this method, so this
+can be used to drive Ghostscript in various ways. Firstly, it is
+simple to request a set of non-overlapping &quot;bands&quot; that
+cover the page, to drive a printer. Alternatively, rectangles can
+be chosen to fill a given block of memory to implement a window
+panning around a larger page. Either the whole image could be
+redrawn each time, or smaller rectangles around the edge of the
+panned area could be requested. The choice is down to the caller.</p>
+
<p>
-The display device provides you with the address and size of the
-raster using the <code>display_size()</code> callback.
-You are then responsible for displaying this raster.
-Some examples are in
+Some examples of driving this code in full page mode are in
<code><a href="../psi/dwmain.c">dwmain.c</a></code> (Windows),
<code><a href="../psi/dpmain.c">dpmain.c</a></code> (OS/2) and
<code><a href="../psi/dxmain.c">dxmain.c</a></code> (X11/Linux), and
<code><a href="../psi/dmmain.c">dmmain.c</a></code> (MacOS Classic or Carbon).</p>
+<p>Alternatively an example that drives this code in both full page
+and rectangle request mode can be found in
+<code><a href="../toolbin/displaydevice_test.c">displaydevice_test.c</a></code>.</p>
+
<p>
On some platforms, the calling convention for the display device callbacks in
<code><a href="../base/gdevdsp.h">gdevdsp.h</a></code>
@@ -1134,7 +1761,7 @@ functions in <a href="../psi/iapi.h"><code>iapi.h</code></a>.</p></p>
<!-- [3.0 begin visible trailer] =========================================== -->
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small></p>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small></p>
<p>
This software is provided AS-IS with no warranty, either express or
diff --git a/doc/C-style.htm b/doc/C-style.htm
index 99fa032a..38fb58f7 100644
--- a/doc/C-style.htm
+++ b/doc/C-style.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -1606,7 +1597,7 @@ to PostScript error conditions.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small></p>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small></p>
<p>
This software is provided AS-IS with no warranty, either express or
diff --git a/doc/Commprod.htm b/doc/Commprod.htm
index 27681559..2290e425 100644
--- a/doc/Commprod.htm
+++ b/doc/Commprod.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -278,7 +269,7 @@ AGPL complies with the conditions set forth above.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights
reserved.</small></p>
<p>
diff --git a/doc/DLL.htm b/doc/DLL.htm
index 779bbba4..a9f25413 100644
--- a/doc/DLL.htm
+++ b/doc/DLL.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -763,7 +754,7 @@ if (!code) {
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -776,7 +767,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Deprecated.htm b/doc/Deprecated.htm
index 4e187c6f..e1e5bc91 100644
--- a/doc/Deprecated.htm
+++ b/doc/Deprecated.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -5760,7 +5751,7 @@ February 2001
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -5773,7 +5764,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Develop.htm b/doc/Develop.htm
index 65525865..dcc0aece 100644
--- a/doc/Develop.htm
+++ b/doc/Develop.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -1311,8 +1302,6 @@ Alpha channel and compositing:
<dd>
<a href="../base/gsalpha.c">base/gsalpha.c</a>,
<a href="../base/gsalpha.h">base/gsalpha.h</a>,
-<a href="../base/gsalphac.c">base/gsalphac.c</a>,
-<a href="../base/gsalphac.h">base/gsalphac.h</a>,
<a href="../base/gsdpnext.h">base/gsdpnext.h</a>,
<a href="../base/gxalpha.h">base/gxalpha.h</a>.
@@ -4773,7 +4762,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Devices.htm b/doc/Devices.htm
index 166c4080..921211a6 100644
--- a/doc/Devices.htm
+++ b/doc/Devices.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -85,12 +76,14 @@
<ul>
<li><a href="#PDF">PDF file output</a></li>
<li><a href="#PDFimage">Bitmap PDF output, PCLm output</a></li>
+<li><a href="#OCR">OCR devices</a></li>
+<li><a href="#PDFocr">Bitmap PDF output (with OCR text)</a></li>
<li><a href="#PS">PostScript file output</a></li>
<li><a href="#EPS">EPS file output</a></li>
<li><a href="#PXL">PCL-XL file output</a></li>
<li><a href="#TXT">Text output</a></li>
</ul>
-<li><a href="#Dis play_devices">Display devices</a></li>
+<li><a href="#Display_devices">Display devices</a></li>
<ul>
<li><a href="#x11_devices">X Window System</a></li>
<li><a href="#display_device">display device (MS Windows, OS/2, gtk+)</a></li>
@@ -962,6 +955,92 @@ of 'high-level' formats. These allow Ghostscript to preserve (as much as
possible) the drawing elements of the input file maintaining flexibility,
resolution independence, and editability.</p>
+<h3><a name="OCR"></a>Optical Character Recognition (OCR) output</h3>
+
+<p>
+ These devices render internally in 8 bit greyscale, and then
+ feed the resultant image into an OCR engine. Currently, we
+ are using the Tesseract engine. Not only is this both free
+ and open source, it gives very good results, and supports
+ a huge number of languages/scripts.
+</p>
+<p>
+ The Tesseract engine relies on files to encapsulate each
+ language and/or script. These &quot;traineddata&quot; files
+ are available in different forms, including <a href="github.com/tesseract-ocr/tessdata_fast">fast</a>
+ and <a href="tesseract-ocr/tessdata_best">best</a> variants.
+ Alternatively, people can train their own data using the
+ standard Tesseract tools.
+</p>
+<p>
+ These files are looked for from a variety of places. Firstly,
+ any files placed in &quot;Resource/Tesseract/&quot; will be
+ included in the binary for any standard (COMPILE_INITS=1) build.
+ Secondly, files will be searched for in the current directory.
+ Thirdly, files will be searched for in the directory given by
+ the environment variable TESSDATA_PREFIX.
+</p>
+<p>
+ By default, the OCR process defaults to looking for English text,
+ using &quot;eng.traineddata&quot;. This can be changed by using the
+ <code>-sOCRLanguage=</code> switch;
+</p>
+<blockquote>
+<dl>
+<dt><code>-sOCRLanguage=</code><b><em>language</em></b></dt>
+<dd>This sets the trained data sets to use within the Tesseract
+ OCR engine. For example, the following will use English and
+ Arabic:</dd></dl>
+<blockquote>
+<pre>
+ <kbd>gs -sDEVICE=ocr -r200 -sOCRLanguage="eng,ara" -o out.txt\
+ zlib/zlib.3.pdf</kbd>
+</pre>
+</blockquote>
+</blockquote>
+<p>
+ The first device is named ocr. It extracts data as unicode codepoints
+ and outputs them to the device as a stream of UTF-8 bytes.
+</p>
+<p>
+ The second device is named hocr. This extracts the data in
+ <a href="wikipedia.org/wiki/HOCR">hOCR</a> format.
+</p>
+<p>
+ These devices are implemented as downscaling devices, so the
+ standard parameters can be used to control this process. It
+ may seem strange to use downscaling on an image that is not
+ actually going to be output, but there are actually good reasons
+ for this. Firstly, the higher the resolution, the slower the
+ OCR process. Secondly, the way the Tesseract OCR engine works
+ means that anti-aliased images perform broadly as well as the
+ super-sampled image from which it came.
+</p>
+
+<h3><a name="PDFocr"></a>PDF image output (with OCR text)</h3>
+
+<p>
+ These devices do the same render to bitmap and wrap as a PDF process as
+ the <a name="PDFimage">PDFimage</a> devices above, but with the addition
+ of an OCR step at the end. The OCR'd text is overlaid &quot;invisibly&quot;
+ over the images, so searching and cut/paste should still work.
+</p>
+<p>
+ The OCR engine being used is Tesseract. For information on this
+ including how to control what language data is used, see the <a href="OCR">
+ OCR devices</a> section above.
+</p>
+<p>
+ There are three devices named pdfocr8, pdfocr24 and pdfocr32. These
+ produce valid PDF files with a colour depth of 8 (Gray), 24 (RGB) or
+ 32 (CMYK).
+</p>
+<p>
+ These devices accept all the same flags as the <a name="PDFimage">PDFimage</a>
+ devices described above.
+</p>
+<p>
+
<h2><a name="High-level"></a>High-level devices</h2>
<h3><a name="PDF"></a>PDF writer</h3>
@@ -2002,7 +2081,7 @@ spot colors.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -2015,7 +2094,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Drivers.htm b/doc/Drivers.htm
index a051778b..dc1fac45 100644
--- a/doc/Drivers.htm
+++ b/doc/Drivers.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -3665,7 +3656,7 @@ non-rotated case.</li>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -3678,7 +3669,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Fonts.htm b/doc/Fonts.htm
index e6fa7c09..941be154 100644
--- a/doc/Fonts.htm
+++ b/doc/Fonts.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -357,7 +348,7 @@ your own fonts that you distribute.)</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -370,7 +361,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/GPDL.htm b/doc/GPDL.htm
new file mode 100644
index 00000000..d8fca2ea
--- /dev/null
+++ b/doc/GPDL.htm
@@ -0,0 +1,618 @@
+<!doctype html>
+<html>
+<head>
+<meta charset="UTF-8">
+<meta name="viewport" content="width=device-width, initial-scale=1.0">
+<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
+<link rel="shortcut icon" type="image/png" href="../../images/favicon.png">
+<title>The GhostPDL Interpreter Framework</title>
+<link href="style.css" rel="stylesheet" type="text/css">
+<link href="gs-style.css" rel="stylesheet" type="text/css">
+</head>
+
+<body>
+
+ <div class="header">
+ <div class="row">
+ <div class="col-lt-6 logo"><a href="https://www.ghostscript.com/"><img src="images/ghostscript_logo.png" width="108" height="119" alt=""></a></div>
+ <div class="col-6"><div class="row"><div class="artifexlogo"><a href="https://artifex.com" target="_blank"><img src="images/Artifex_logo.png" width="194" height="40" alt=""></a></div>
+ <div class="col-12"><div class="button button1"><a href="https://artifex.com/contact-us/" title="Contact Us" target="_blank">Contact Us</a></div>
+ <div class="button button2 hidden-xs"><a href="https://www.ghostscript.com/download.html" title="Download">Download</a></div></div></div>
+ </div>
+ </div>
+ </div>
+
+ <div class="banner">
+ <div class="row">
+ <div class="col-12">The GhostPDL Interpreter Framework</div>
+ </div>
+ </div>
+
+ <div class="main">
+ <div class="row">
+ <div id="sidebar">
+ <div class="sidebar-item"></div>
+ <div class="col-2 leftnav">
+<ul>
+ <li><a href="https://www.ghostscript.com/">Home</a></li>
+ <li><a href="https://www.ghostscript.com/license.html">Licensing</a></li>
+ <li><a href="https://www.ghostscript.com/releases.html">Releases</a></li>
+ <li><a href="https://www.ghostscript.com/release_history.html">Release History</a></li>
+ <li><a href="https://www.ghostscript.com/documentation.html" title="Documentation">Documentation</a></li>
+ <li><a href="https://www.ghostscript.com/download.html" title="Download">Download</a></li>
+ <li><a href="https://www.ghostscript.com/performance.html" title="Performance">Performance</a></li>
+ <li><a href="http://jbig2dec.com/" title="jbig2dec">jbig2dec</a></li>
+ <li><a href="http://git.ghostscript.com/?p=ghostpdl.git;a=summary">Source</a></li>
+ <li><a href="http://bugs.ghostscript.com/">Bugs</a></li>
+ <li><a href="https://www.ghostscript.com/faq.html" title="FAQ">FAQ</a></li>
+ </ul>
+ </div>
+ </div>
+ <div class="col-10 page">
+
+<!--START EDITING HERE-->
+
+<h2>Table of contents</h2>
+
+<ul>
+<li><a href="#What_Is_This">What is the GhostPDL Interpreter Framework?</a></li>
+<li><a href="#API">The API</a></li>
+ <ul>
+ <li><a href="#run">The run_string functions</a></li>
+ <li><a href="#string_vs_file">String vs File functions</a></li>
+ </ul>
+<li><a href="#executable">The GPDL executable</a></li>
+<li><a href="#different_switches">Differences in switches from Ghostscript</a></li>
+<li><a href="#languages">Supported languages</a></li>
+ <ul>
+ <li><a href="#PJL">PJL</a></li>
+ <li><a href="#PCL">PCL</a></li>
+ <li><a href="#PCLXL">PCLXL</a></li>
+ <li><a href="#XPS">XPS</a></li>
+ <li><a href="#POSTSCRIPT">POSTSCRIPT</a></li>
+ <li><a href="#URF">URF</a></li>
+ <li><a href="#JPG">JPG</a></li>
+ <li><a href="#PWG">PWG</a></li>
+ <li><a href="#TIFF">TIFF</a></li>
+ <li><a href="#JBIG2">JBIG2</a></li>
+ <li><a href="#JP2K">JP2K</a></li>
+ <li><a href="#PNG">PNG</a></li>
+ </ul>
+<li><a href="#new_language">Adding a new language</a></li>
+ <ul>
+ <li><a href="proc_characteristics">proc_characteristics</a></li>
+ <li><a href="proc_allocate_interp_instance">proc_allocate_interp_instance</a></li>
+ <li><a href="proc_get_device_memory">proc_get_device_memory</a></li>
+ <li><a href="proc_set_param">proc_set_param</a></li>
+ <li><a href="proc_add_path">proc_add_path</a></li>
+ <li><a href="proc_post_args_init">proc_post_args_init</a></li>
+ <li><a href="proc_init_job">proc_init_job</a></li>
+ <li><a href="proc_run_prefix_commands">proc_run_prefix_commands</a></li>
+ <li><a href="proc_process_file">proc_process_file</a></li>
+ <li><a href="proc_process_begin">proc_process_begin</a></li>
+ <li><a href="proc_process">proc_process</a></li>
+ <li><a href="proc_process_end">proc_process_end</a></li>
+ <li><a href="proc_flush_to_eoj">proc_flush_to_eoj</a></li>
+ <li><a href="proc_process_eof">proc_process_eof</a></li>
+ <li><a href="proc_report_errors">proc_report_errors</a></li>
+ <li><a href="proc_dnit_job">proc_dnit_job</a></li>
+ <li><a href="proc_deallocate_interp_instance">proc_deallocate_interp_instance</a></li>
+ </ul>
+
+</ul>
+
+<!-- [1.2 end table of contents] =========================================== -->
+
+<!-- [1.3 begin hint] ====================================================== -->
+
+<p>For other information, see the <a href="Readme.htm">Ghostscript overview</a>.</p>
+
+<!-- [1.3 end hint] ======================================================== -->
+
+<hr>
+
+<!-- [1.0 end visible header] ============================================== -->
+
+<!-- [2.0 begin contents] ================================================== -->
+
+
+<h2><a name="What_Is_This"></a>What is the GhostPDL Interpreter Framework?</h2>
+
+<p>
+The GhostPDL interpreter framework (henceforth, just GhostPDL) is
+a framework into which multiple interpreters can be fitted, together
+with a set of interpreters for different input &quot;languages&quot;.</p>
+<p>The intent is that a build of GPDL will behave as much as possible
+like a build of Ghostscript, but should be able to transparently
+cope with as many different input formats as it has interpreters built
+into it.</p>
+<p>It can be built as a dynamic link library
+(DLL) on Microsoft Windows, as a shared object on the
+Linux, Unix and MacOS X platforms. With some changes, it could be built
+as a static library.</p>
+<p>The reason we dub it a &quot;Framework&quot; is that it is
+designed to be modular, and to readily allow new interpreters to be
+swapped in and out to extend and customise its capabilities.</p>
+
+<p>Jobs must be separated by <code>UEL</code> (Universal End of Language)
+code sequences (or PJL fragments, which implicitly start with a
+<code>UEL</code> marker).</p>
+
+<h2><a name="API"></a>The API</h2>
+
+<p>The API for GPDL (found in <a href="../pcl/pl/plapi.h">plapi.h</a>)
+is deliberately designed to be nearly identical
+to that for Ghostscript itself (found in <a href="../psi/iapi.h">iapi.h</a>).
+Details of Ghostscript's API can be
+found <a href="API.htm">here</a>, and we refer you to that. Only
+differences from that API will be documented here. In particular
+the differences in the handling of switches within the
+<code>gsapi_init_with_args</code> are documented
+<a href="#different_switches">here</a>.</p>
+<p>Our intent is that existing users of the Ghostscript API should be
+able to drop a GPDL DLL in as a replacement with little to no code
+changes.</p>
+
+<h3><a name="run"></a>The run_string APIs</h3>
+
+<p>The <code>run_string</code> APIs have parameters for
+<code>int user_errors</code> and <code>int *error_code</code>.
+Within Ghostscript, these allow a caller to bypass the language's
+standard error handling, and to trap errors externally.
+This makes no sense within a printer implementation (and, in
+particular, no sense for a postscript interpreter running
+jobs within a JobServer loop as GPDL does). Thus these
+parameters are kept for ABI compatibility, but are largely
+ignored within the GPDL implementation of gsapi.
+For sanity, pass 0 for <code>user_errors</code>, and expect
+<code>*error_code</code> to be set to 0 on exit.</p>
+
+<h3><a name="string_vs_file"></a>String vs File functions</h3>
+
+<p>Some file types, such as Postscript and PCL, are designed to be
+'streamable'; that is to say that the files can be fed in and
+consumed as they are interpreted. Other file types, such as PDF or
+XPS require the whole file to be available so that the interpreters
+can seek back and forth within it to extract the data they require.</p>
+
+<p>Traditionally, Ghostscript has relied upon the caller knowing
+which type of data is which; streamable data can be fed in to the
+system using the <code>gsapi_run_string</code> APIs, and complete files
+of data can be fed in using <code>gsapi_run_file</code> or
+<code>gsapi_init_with_args</code> APIs. Streamable data contained
+with a file is simple to deal with, as it's trivial for an interpreter
+to read bytes from a file, but doing random access on a stream is
+much harder.</p>
+
+<p>In systems where data is being streamed in, but it is required
+to be available for random access, the entire stream must be buffered
+for presentation to the language interpreters. With Ghostscript,
+the responsibility for doing this fell to the caller. Unfortunately,
+this means that the caller also has to be responsible for scanning
+the incoming data to spot when it is in a format that requires
+buffering. With the explosion of formats that GPDL supports this
+quickly becomes unpalatable.</p>
+
+<p>While the caller is still free to do such buffering of data
+itself, GPDL will do it automatically if required. If a language
+spots that data being fed to it via the <code>gsapi_run_string</code>
+APIs is in a format that requires buffering, the entire string of
+data will be automatically collected together, and then be
+represented internally to the <code>gsapi_run_file</code> API.</p>
+
+<p>The current implementation buffers the data in memory. Alternative
+implementations could use a backing store if such a thing were
+available. For server based applications the use of memory is not
+likely to be a problem (assuming reasonably sized input files at least).
+For printer integrations, it's entirely possible that no backing
+store will be available, so RAM may be the only option. Integrators
+may wish to place a limit on the size of files that can be buffered
+in this way.</p>
+
+<h2><a name="executable"></a>The GPDL executable</h2>
+
+<p>
+The GPDL executable is a small executable that loads the DLL/shared object,
+and implements, pretty much, the interface described in the
+<a href="Use.htm">usage documentation</a> for Ghostscript, but capable of
+reading any of the configured languages. This executable provides all
+the interaction with the windowing system, including image windows.</p>
+
+<p>Areas where the GPDL executable differs from the Ghostscript
+executable are described <a href="#different_switches">below</a>. These
+are primarily to do with (slightly) esoteric requirements when
+running Postscript in an interactive environment. Whereas Ghostscript
+is a generic Postscript interpreter, GPDL is unashamedly targeted
+as a print processor.</p>
+
+<p>
+The GPDL framework's library name and characteristics differ
+for each platform:</p>
+
+<ul>
+<li>The Win32 DLL <code>gpdldll32.dll</code>
+can be used by multiple programs simultaneously, but only once
+within each process.</li>
+
+<li>The Linux shared object <code>libgs.so</code>
+can be used by multiple programs simultaneously.</li>
+</ul>
+<p>
+The source for the executable is in <code>plw</code>*.* (Windows)
+and <code>plx</code>*.* (Linux/Unix).
+See these source files for examples of how to use the DLL.</p>
+
+<p>
+At this stage, GhostPDL does not support multiple instances
+of the interpreter within a single process.</p>
+
+<h2><a name="different_switches"></a>Differences in switches from Ghostscript</h3>
+
+<p>The <code>gsapi_init_with_args</code> API entrypoint takes a
+set of arguments, which can include various switches. We document
+the differences between Ghostscript's handling of switches and
+GhostPDLs here. The GhostPDL executable directly maps parameters
+given on the command-line into this list, so this list of differences
+applies both to API calls and uses of the executable.</p>
+
+<p>GhostPDL does not support the <code>-_</code>, <code>-+</code>,
+<code>-@</code>, <code>-B</code>, <code>-F</code>, <code>-M</code>,
+<code>-N</code>, <code>-P</code>, <code>-u</code>, and <code>-X</code>
+switches that Ghostscript does.
+
+<p>GhostPDL supports a few switches that the Ghostscript executable
+does not.</p>
+
+<ul>
+ <li><b><code>-E #</code>:</b> Sets the &quot;error reporting mode&quot;
+for PCL/PXL.</li>
+ <li><b><code>-H #x#x#x#</code>:</b> Sets the hardware margins to the
+given left/bottom/right/top values (in points).</li>
+ <li><b><code>-j &lt;string&gt;</code>:</b> Passes the string to the
+ PJL level. The string is split on ';'.</li>
+ <li><b><code>-J</code>:</b> Same as <code>-j</code>.</li>
+ <li><b><code>-l {RTL,PCL5E,PCL5C}</code>:</b> Sets the
+ &quot;personality&quot; of the PCL/PXL interpreter.</li>
+ <li><b><code>-L &lt;language&gt;</code>:</b> Sets the language
+ to be used. Run with <code>-L</code> and no string to see a list
+ of languages supported in your build.</li>
+ <li><b><code>-m #x#</code>:</b> Sets the margin values to the
+ left/bottom values (in points).</li>
+</ul>
+
+<h2><a name="languages"></a>Supported languages</h2>
+
+<p>The following is a (possibly non-exhaustive) list of languages
+for which implementations exist for GhostPDL. We use the term
+&quot;language&quot; to include both full page description languages
+(such as PCL, Postscript and XPS), and handlers for simpler formats
+(such as JPEG, PNG and TIFF).</p>
+<p>It is inherent in the design that new handlers can be included,
+and unwanted formats can be dropped from any given build/integration.</p>
+
+<h3><a name="PJL"></a>PJL</h3>
+<p>PJL is special, in that it is the central language implementation
+to which we return between all jobs. As such it always appears first
+in the list, and must be present in all builds.</p>
+<h3><a name="PCL"></a>PCL</h3>
+<p>The PCL language implementation supports PCL5C/PXL5E and HPGL/2
+with RTL.</p>
+<h3><a name="PCLXL"></a>PCLXL</h3>
+<p>The PCLXL language implementation supports PCLXL.</p>
+<h3><a name="XPS"></a>XPS</h3>
+<p>The XPS language implementation supports the XML Paper Specification
+format, as used in modern Windows systems printing pipelines.</p>
+<h3><a name="POSTSCRIPT"></a>POSTSCRIPT</h3>
+<p>The POSTSCRIPT language implementation is the Ghostscript
+ Postscript interpreter, as described in the accompanying
+ documentation.</p>
+<h3><a name="URF"></a>URF</h3>
+<p>Currently available to commercial customers only, the URF language
+implementation implements support for the URF file format, as used
+by Apple Airprint.</p>
+<h3><a name="JPG"></a>JPG</h3>
+<p>The JPG language implementation supports JPEG files
+(in both JFIF and EXIF formats).</p>
+<h3><a name="PWG"></a>PWG</h3>
+<p>The PWG language implementation supports PWG
+(Printer Working Group) format files.</p>
+<h3><a name="TIFF"></a>TIFF</h3>
+<p>The TIFF language implementation supports TIFF format files in
+a variety of compression formats, depending on the exact configuration
+of libtiff used in the build.</p>
+<h3><a name="JBIG2"></a>JBIG2</h3>
+<p>The JBIG2 language implementation supports JBIG2 format images.</p>
+<h3><a name="JP2K"></a>JP2K</h3>
+<p>The JP2K language implementation supports JPEG2000 and JPX format
+images.</p>
+<h3><a name="PNG"></a>PNG</h3>
+<p>The PNG language implementation supports PNG format images.</p>
+
+<h2><a name="new_language"></a>Adding a new language</h2>
+
+<p>Each language implementation in the system appears as an instance
+of a <code>pl_interp_implementation_t</code> structure.
+
+<pre>
+typedef struct pl_interp_implementation_s
+{
+ /* Procedure vector */
+ pl_interp_proc_characteristics_t proc_characteristics;
+ pl_interp_proc_allocate_interp_instance_t proc_allocate_interp_instance;
+ pl_interp_proc_get_device_memory_t proc_get_device_memory;
+ pl_interp_proc_set_param_t proc_set_param;
+ pl_interp_proc_add_path_t proc_add_path;
+ pl_interp_proc_post_args_init_t proc_post_args_init;
+ pl_interp_proc_init_job_t proc_init_job;
+ pl_interp_proc_run_prefix_commands_t proc_run_prefix_commands;
+ pl_interp_proc_process_file_t proc_process_file;
+ pl_interp_proc_process_begin_t proc_process_begin;
+ pl_interp_proc_process_t proc_process;
+ pl_interp_proc_process_end_t proc_process_end;
+ pl_interp_proc_flush_to_eoj_t proc_flush_to_eoj;
+ pl_interp_proc_process_eof_t proc_process_eof;
+ pl_interp_proc_report_errors_t proc_report_errors;
+ pl_interp_proc_dnit_job_t proc_dnit_job;
+ pl_interp_proc_deallocate_interp_instance_t
+ proc_deallocate_interp_instance;
+ void *interp_client_data;
+} pl_interp_implementation_t;
+</pre>
+
+<p>This structure consists of series of function pointers, each
+of which performs some portion of the processing required to handle
+detection of language type and processing of data. These function
+pointers are described in detail below.</p>
+<p>In addition, the <code>interp_client_data</code> field is
+used to hold the running state of a given interpreter.</p>
+
+<p>All the languages to be supported in the build are listed
+in the <code>pdl_implementations</code> array in
+<a href="../pcl/pl/plimpl.c">plimpl.c</a>. To add a new implementation
+the name of the appropriate <code>pl_interp_implementation_t</code>
+should be added here.</a>
+
+<p>The existing range of language implementations may prove useful
+as references when implementing new ones. They can be found as
+<code>gpdl/*top.c</code>. In particular,
+<code><a href="../gpdl/pngtop.c">pngtop.c</a></code> is a simple
+implementation of a well-defined, relatively simple file format
+(PNG), based upon a well-known and well-documented library (libpng),
+so is probably a good place to start.</p>
+
+<h3><a name="proc_characteristics"></a>proc_characteristics</h3>
+<pre>
+typedef const pl_interp_characteristics_t
+ *(*pl_interp_proc_characteristics_t) (const pl_interp_implementation_t *);
+</pre>
+<p>This entrypoint is called to request details of the characteristics
+of the language. This must be implemented in all instances.</p>
+<p>This returns a pointer to a <code>pl_interp_characteristics_t</code>
+ structure:</p>
+<pre>
+typedef struct pl_interp_characteristics_s
+{
+ const char *language; /* generic language should correspond with
+ HP documented PJL name */
+ int (*auto_sense)(const char *string, int length); /* routine used to detect language - returns a score: 0 is definitely not, 100 is definitely yes. */
+ const char *manufacturer; /* manuf str */
+ const char *version; /* version str */
+ const char *build_date; /* build date str */
+} pl_interp_characteristics_t;
+</pre>
+<p>The <code>language</code> entry contains a simple NULL terminated
+ string that names the interpreter. Similarly, the <code>manufacturer</code>,
+ <code>version</code>, and <code>build_date</code> fields are for
+ informational purposes only.</p>
+<p>The <code>auto_sense</code> function is called with a prefix of data
+ from each new source. Each language is passed the data in turn, and
+ &quot;scores;&quot; according to how sure it is the file is that format.</p>
+<p>For many file formats this means looking for known in the first
+few bytes (such as PNG or TIFF looking for their signature bytes). For
+others, such as XPS, the best that can be done is to spot that it's a
+ zip file. For still others, such as PCL, heuristics have to be used.</p>
+<p>A 'definite' match is returned as 100, a definite rejection as 0, with
+intermediate values used appropriately.</p>
+<h3><a name="proc_allocate_interp_instance"></a>proc_allocate_interp_instance</h3>
+<pre>
+typedef int (*pl_interp_proc_allocate_interp_instance_t)
+ (pl_interp_implementation_t *,
+ gs_memory_t *);
+</pre>
+<p>On startup, the GPDL library calls around all the languages
+via this function, getting them to allocate themselves an instance.
+ What this means will vary between languages, but typically it involves
+ allocating a state structure, and storing the pointer to that in the
+ <code>interp_client_data</code> pointer of the
+ <code>pl_interp_implementation_t *</code>. Part of this state structure
+ will typically be a <code>gstate</code> to use to drive the graphics
+ library.</p>
+<h3><a name="proc_get_device_memory"></a>proc_get_device_memory</h3>
+<pre>
+typedef gs_memory_t *(*pl_interp_proc_get_device_memory_t)
+ (pl_interp_implementation_t *);
+</pre>
+<p>On shutdown, the GPDL library calls around all the languages
+via this function, getting them to release their resources and
+deallocate any memory.</p>
+<h3><a name="proc_set_param"></a>proc_set_param</h3>
+<pre>
+typedef int (*pl_interp_proc_set_param_t) (pl_interp_implementation_t *,
+ pl_set_param_type,
+ const char *,
+ const void *);
+</pre>
+<p>Some languages (particularly Postscript) can have their behaviour
+changed by the use of parameters. This function provides a generic
+method for the GPDL library to pass parameters into a language. Each
+language is free to ignore the parameters that do not apply to it. For
+most languages, this can safely be passed as <code>NULL</code>.</p>
+<h3><a name="proc_add_path"></a>proc_add_path</h3>
+<pre>
+typedef int (*pl_interp_proc_add_path_t) (pl_interp_implementation_t *,
+ const char *);
+</pre>
+<p>Some languages (particularly Postscript) have the ability to
+ open files from the local storage. These files can be found
+ in a variety of different locations within the local storage.
+ As such this call allows the GPDL library to add paths to
+ the current list of locations that will be searched. For
+ most languages, this can safely be passed as <code>NULL</code>.</p>
+<h3><a name="proc_post_args_init"></a>proc_post_args_init</h3>
+<pre>
+typedef int (*pl_interp_proc_post_args_init_t) (pl_interp_implementation_t *);
+</pre>
+<p></p>
+<h3><a name="proc_init_job"></a>proc_init_job</h3>
+<pre>
+typedef int (*pl_interp_proc_init_job_t) (pl_interp_implementation_t *,
+ gx_device *);
+</pre>
+<p>Once the GPDL library has identified which language should be used
+for an incoming job, it will call this entrypoint to initialise the
+language for the job. What this means will vary between languages,
+but at the very minimum the job will need to take note of the device
+to be used.</p>
+<h3><a name="proc_run_prefix_commands"></a>proc_run_prefix_commands</h3>
+<pre>
+typedef int (*pl_interp_proc_run_prefix_commands_t)
+ (pl_interp_implementation_t *,
+ const char *prefix);
+</pre>
+<p>The GPDL library (and executable) allow language commands to be
+sent in the argument parameters using the <code>-c</code> switch. These
+are collected into a buffer, and forwarded to a language to be run
+as part of the same job as any following file.</p>
+<p>Currently, only the Postscript language handler implements this
+function, all others should pass <code>NULL</code>.</p>
+<h3><a name="proc_process_file"></a>proc_process_file</h3>
+<pre>
+typedef int (*pl_interp_proc_process_file_t) (pl_interp_implementation_t *,
+ const char *);
+</pre>
+<p>If the GPDL library is given a filename to process, and this function
+is non-NULL, it will call this to run the file. For file formats such as
+PDF (which need to be buffered so they can be read out of order), this
+can avoid the need to feed in all the data via <code>proc_process</code>,
+buffer it somewhere, and then process it at the end.</p>
+<p>For many languages this can be <code>NULL</code>.</p>
+<h3><a name="proc_process_begin"></a>proc_process_begin</h3>
+<pre>
+typedef int (*pl_interp_proc_process_begin_t) (pl_interp_implementation_t *);
+</pre>
+<p>Once the GPDL library has data to process (that it cannot process
+with <code>proc_process_file</code>, it will call this function to
+setup the transfer of data.</p>
+<h3><a name="proc_process"></a>proc_process</h3>
+<pre>
+typedef int (*pl_interp_proc_process_t) (pl_interp_implementation_t *,
+ stream_cursor_read *);
+</pre>
+<p>After the GPDL library has called <code>proc_process_begin</code>
+this function may be called multiple times to actually transfer
+the data in. The implementation is expected to consume as many bytes
+as it can (but not necessarily all of them) before returning with
+an updated read pointer. If this function cannot advance without more
+data, it should return with <code>gs_error_NeedInput</code>.</p>
+<h3><a name="proc_process_end"></a>proc_process_end</h3>
+<pre>
+typedef int (*pl_interp_proc_process_end_t) (pl_interp_implementation_t *);
+</pre>
+<p>After the GPDL library has called <code>proc_process_begin</code>
+(and possibly made a number of calls to <code>proc_process</code>) it
+will call <code>proc_process_end</code> to signify the end of the
+data. This does not necessarily signal the end of the job.</p>
+<h3><a name="proc_flush_to_eoj"></a>proc_flush_to_eoj</h3>
+<pre>
+typedef int (*pl_interp_proc_flush_to_eoj_t) (pl_interp_implementation_t *,
+ stream_cursor_read *);
+</pre>
+<p>In the event of a problem while processing data, GPDL may seek to
+abandon processing of a transfer in progress by calling
+<code>proc_flush_to_eoj</code>. If possible, the language should
+continue to process data until a reasonable stopping point, or until
+<code>UEL</code> is reached.</p>
+<h3><a name="proc_process_eof"></a>proc_process_eof</h3>
+<pre>
+typedef int (*pl_interp_proc_process_eof_t) (pl_interp_implementation_t *);
+</pre>
+<p>Called when GPDL reaches EOF in processing a job. A language
+implementation should assume no more data is forthcoming.</p>
+<h3><a name="proc_report_errors"></a>proc_report_errors</h3>
+<pre>
+typedef int (*pl_interp_proc_report_errors_t) (pl_interp_implementation_t *,
+ int,
+ long,
+ bool);
+</pre>
+<p>Called after running a job to give the language implementation the
+chance to report any errors it may have detected as it ran.</p>
+<h3><a name="proc_dnit_job"></a>proc_dnit_job</h3>
+<pre>
+typedef int (*pl_interp_proc_dnit_job_t) (pl_interp_implementation_t *);
+</pre>
+<p>Called after a job is complete so that the language implementation
+may clean up. The interpreter is kept open so that more jobs can be
+fed to it, but no state should be kept from this job to the next.</p>
+<h3><a name="proc_deallocate_interp_instance"></a>proc_deallocate_interp_instance</h3>
+<pre>
+typedef int (*pl_interp_proc_deallocate_interp_instance_t)
+ (pl_interp_implementation_t *);
+</pre>
+<p>Called on shutdown of the GPDL library to close down the language
+instance and free all the resources.</p>
+
+<!-- [2.0 end contents] ==================================================== -->
+<!-- [3.0 begin visible trailer] =========================================== -->
+<hr>
+<p>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small></p>
+
+<p>
+This software is provided AS-IS with no warranty, either express or
+implied.</p>
+
+This software is distributed under license and may not be copied, modified
+or distributed except as expressly authorized under the terms of that
+license. Refer to licensing information at <a href="https://www.artifex.com">https://www.artifex.com</a>
+or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
+Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.</p>
+
+<p>
+<small>Ghostscript version 9.23, 21 March 2018</p>
+
+<!-- [3.0 end visible trailer] ============================================= -->
+
+<!--FINISH EDITING HERE-->
+
+ </div>
+ </div>
+ </div>
+
+ <div class="footer">
+ <div class="row">
+ <div class="col-7 footleft">
+ <ul>
+ <li><a href="https://artifex.com/contact-us/" target="blank">CONTACT US</a></li>
+ <li><a href="https://artifex.com/about-us/" target="blank">ABOUT</a></li>
+ <li><a href="https://ghostscript.com/security.html">SECURITY</a></li>
+ </ul>
+ </div>
+ <div class="col-1 footcenter">
+ <ul>
+ <li><a href="https://artifex.com/support/" target="blank">SUPPORT</a></li>
+ <li><a href="https://artifex.com/blog/artifex/" target="blank">BLOG</a></li>
+ <li><a href="https://artifex.com/privacy-policy/" target="blank">PRIVACY</a></li>
+ </ul>
+ </div>
+ <div class="col-ft-3 footright"><img src="images/Artifex_logo.png" width="194" height="40" alt=""/> <br>
+ © Copyright 2019 Artifex Software, Inc. <br>
+ All rights reserved.
+ </div>
+ </div>
+ </div>
+
+ <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
+ <script src="index.js"></script>
+</body>
+</html>
diff --git a/doc/History9.htm b/doc/History9.htm
index ac20b01e..20e67642 100644
--- a/doc/History9.htm
+++ b/doc/History9.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -79,7 +70,8 @@ TOC to see how to edit it for visual conciseness.
<h2>Table of contents</h2>
<blockquote><ul>
-<li><a href="#Version9.51">Version 9.52 (2020-03-19)</a>
+<li><a href="#Version9.53.0">Version 9.53.0 (2020-09-10)</a>
+<li><a href="#Version9.52">Version 9.52 (2020-03-19)</a>
<li><a href="#Version9.50">Version 9.50 (2019-10-15)</a>
<li><a href="#Version9.27">Version 9.27 (2019-04-03)</a>
<li><a href="#Version9.26">Version 9.26 (2018-11-20)</a>
@@ -134,6 +126,13443 @@ overview</a>.
<!-- [1.0 end visible header] ============================================== -->
<!-- [2.0 begin contents] ================================================== -->
+<h2><a name="Version9.53.0"></a>Version 9.53.0 (2020-09-10)</h2>
+<p> Highlights in this release include:
+<ul>
+<li>
+<p>The 9.53.0 release is primarily maintenance.
+</li>
+<li>
+<p>The most obvious change is the (re-)introduction of the patch level to the version number,
+this helps facilitate a revised policy on handling security related issues.
+</li>
+<li>
+<p>Our efforts in code hygiene and maintainability continue.
+</li>
+<li>
+<p>We have added the capability to build with the Tesseract OCR engine. In such
+a build, new devices are available (pdfocr8/pdfocr24/pdfocr32) which render the
+output file to an image, OCR that image, and output the image "wrapped" up as a
+PDF file, with the OCR generated text information included as "invisible" text
+(in PDF terms, text rendering mode 3).
+<p>Due to some patches to the Tesseract sources that are required (integrated
+upstream, but awaiting release), time constraints, and the experimental nature
+of the feature, we only support including Tesseract from source, not linking to
+Tesseract shared libraries. Whether we add this capability will be largely
+dependant on community demand for the feature.
+</li>
+<li>
+<p>We have added Python bindings for the <code>gsapi</code> interface, can be found
+in <code>demos/python</code>. These are experimental, and we welcome feedback from
+interested developers.
+</li>
+<li>
+<p>For those integrating Ghostscript/GhostPDL via the <code>gsapi</code> interface, we
+have added new capabilities to that, specifically in terms of setting and interrogating
+device parameters. These, along with the existing interface calls, are documented in:
+<a href="API.htm">Ghostscript Interpreter API</a>
+</li>
+<li>
+<p><b>IMPORTANT:</b> In consultation with a representative of
+(<a href="http://www.openprinting.org">OpenPrinting</a>) it is
+our intention to deprecate and, in the not distant future, remove the
+OpenPrinting Vector/Raster Printer Drivers (that is, the <code>opvp</code>
+and <code>oprp</code> devices).
+<p> If you rely on either of these devices, <b><i>please</i></b> get in touch with
+us, so we can discuss your use case, and revise our plans accordingly.
+</li>
+<li>
+<p>IMPORTANT: We have forked LittleCMS2 into LittleCMS2mt (the "mt" indicating "multi-thread").
+LCMS2 is not thread safe and cannot be made thread safe without breaking the ABI. Our fork
+will be thread safe and include performance enhancements (these changes have all be been
+offered and rejected upstream). We will maintain compatibility between Ghostscript and LCMS2
+for a time, but not in perpetuity. If there is sufficient interest, our fork will be
+available as its own package separately from Ghostscript (and MuPDF).
+</li>
+<li>
+<p>The usual round of bug fixes, compatibility changes, and incremental improvements.
+</li>
+</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.52_Incompatible_changes"></a>Incompatible changes</h3>
+<h4>Included below are incompatible changes from recent releases (the
+specific release in question listed in parentheses). We include these,
+for now, as we are aware that not everyone upgrades with every release.</h4>
+<ul>
+<li>
+<p>(9.53.0) As of 9.53.0, we have (re-)introduced the patch level to the version number,
+this helps facilitate a revised policy on handling security related issues.
+<p><strong>Note for GSView Users:</strong>The patch level addition breaks GSView 5 (it is
+hardcoded to check for versions <code>704-999</code>. It is possible, but not guaranteed that
+a GSView update might be forthcoming to resolve this.
+</li>
+<li>
+<p>(9.52) As of 9.52, the Windows binaries released by the Ghostscript development
+team are built with Microsoft Visual Studio 2019. As a result, Microsoft Windows XP and
+earlier are no longer supported by these binaries. This does not imply we are, or will
+start relying upon features only available in VS2019, so the <code>nmake</code> Makefiles
+will continue to allow older Visual Studio versions (back to VS2005) to build Ghostscript.
+</li>
+<li>
+<p>(9.52) <code>-dALLOWPSTRANSPARENCY</code>: The transparency compositor (and related
+features), whilst we are improving it, remains sensitive to being driven correctly, and
+incorrect use can have unexpected/undefined results. Hence, as part of improving security
+we limited access to these operators, originally using the <code>-dSAFER</code> feature.
+As we made "SAFER" the default mode, that became unacceptable, hence the new option
+<code>-dALLOWPSTRANSPARENCY</code> which enables access to the operators.
+</li>
+<li>
+<p>(9.50) There are a couple of subtle incompatibilities between the old and new SAFER
+implementations. Firstly, as mentioned in the 9.50 release notes, 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>(9.27) The process of &quot;tidying&quot; the PostScript name space should have removed
+only non-standard and undocumented operators. Nevertheless, it is possible that
+any integrations or utilities that rely on those non-standard and undocumented
+operators may stop working or may change behaviour.
+<p>If you encounter such a case, please contact us (either the #ghostscript IRC channel,
+or the gs-devel mailing list would be best), and we'll work with you to either find an
+alternative solution or return the previous functionality, if there is genuinely no other
+option.
+<p>One case we know this has occurred is GSView 5 (and earlier). GSView 5 support for PDF
+files relied upon internal use only features which are no longer available. GSView 5 will
+still work as previously for PostScript files. For PDF files, users are encouraged to look
+at <a href="https://www.mupdf.com">MuPDF</a>.
+</li>
+</ul>
+<h3><a name="9.53.0_changelog"></a>Changelog</h3>
+<p><strong>2020-09-10 22:47:09 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9a5ace846c8af91d047e59c87722d0c36e79e5d3">9a5ace846c8af91d047e59c87722d0c36e79e5d3</a>
+<blockquote>
+<p>
+ Bug 702884: Require jbig2dec 0.19 when building ghostscript.<br>
+<br>
+ In practice this has been required since commit<br>
+ 9b5008aa2bc1c6a6acb2c6f90d1ef8d6bad9e66a.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-09-10 22:41:20 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=53db58bd227c80375f00135045d36b66868732f4">53db58bd227c80375f00135045d36b66868732f4</a>
+<blockquote>
+<p>
+ Update jbig2dec stuff for 0.19 release.<br>
+<br>
+jbig2dec/CHANGES<br>
+jbig2dec/jbig2.h<br>
+jbig2dec/jbig2dec.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-09-09 11:50: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=45884ca68488ac470b894702bdd8da232743d8e4">45884ca68488ac470b894702bdd8da232743d8e4</a>
+<blockquote>
+<p>
+ Bug 702871: Fix GraphicsAlphaBits + Fill/Stroke issue.<br>
+<br>
+ When we flush the alphabuffer, mapped_start and mapped_height are<br>
+ both set to zero. When we refill it, mapped_height is set to<br>
+ non-zero. USUALLY mapped_start is set to non-zero too, but it can<br>
+ be set to zero when we are close to the bottom of the page.<br>
+<br>
+ Hence we should test for mapped_height != 0, rather than both<br>
+ mapped_height and mapped_start being non-zero.<br>
+<br>
+ So the 'quick hack' that Chris used is actually correct.<br>
+<br>
+base/gdevabuf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-28 09:31: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=4ba6aa1d7253e8ecd7cd796c95306f1203f70879">4ba6aa1d7253e8ecd7cd796c95306f1203f70879</a>
+<blockquote>
+<p>
+ Bug 702837 typo in warning message<br>
+<br>
+ Thanks to Herbert Voss for spotting this. Fixed the typo and updated the<br>
+ version number in the warning from 9.53 to 9.53.0 to match the actual<br>
+ version and patch number of the release (the decision to add the patch<br>
+ level was taken after the original commit)<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-24 18:55:30 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=197eb511b5d81a662f801333709199495abe61cf">197eb511b5d81a662f801333709199495abe61cf</a>
+<blockquote>
+<p>
+ Fix Tesseract traineddata file loading.<br>
+<br>
+ If it was finding any Tesseract data in ROM it was then not looking<br>
+ for files.<br>
+<br>
+base/tessocr.cpp<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-24 09:24: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=cb279d8a0e356542f6829ed429269ce07ec838a9">cb279d8a0e356542f6829ed429269ce07ec838a9</a>
+<blockquote>
+<p>
+ Coverity 361429: move &quot;break&quot; to correct place.<br>
+<br>
+ We had to add the outputfile to the &quot;control&quot; file permission list (as well<br>
+ as write), but for the &quot;pipe&quot; case, I accidentally added the call after the<br>
+ break out of loop that checks for a pipe.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-21 18:50: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=bad72741aad21b17a3965673f3e7949a2fc7c256">bad72741aad21b17a3965673f3e7949a2fc7c256</a>
+<blockquote>
+<p>
+ PDF interp: Consolidate disabling of page handler device<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-21 11:13: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=60bbe61efc97c208f31c2d2d617753232ed1881d">60bbe61efc97c208f31c2d2d617753232ed1881d</a>
+<blockquote>
+<p>
+ More version number fixes<br>
+<br>
+ The code to retrieve the Ghostscript paths from the Windows Registry<br>
+ was generating a key based on the version number, but since we added the<br>
+ patch the generation was incorrect.<br>
+<br>
+ Since this is the third (!) case of this, scan the code for any usage of<br>
+ gs_version, gs_version_number, GS_VERSION, GS_VERSION_NUMBER,<br>
+ gs_revision, gs_revision_number, GS_REVISION and GS_REVISION_NUMBER.<br>
+<br>
+ This reveals two more places, neither serious but we might as well fix<br>
+ them while we're here.<br>
+<br>
+ Thanks to Akira Kakuto for finding this problem and suggesting a patch.<br>
+ I chose to use the code we were already using in two other places, just<br>
+ for consistency, but the supplied patch was equally good.<br>
+<br>
+base/gp_wgetv.c<br>
+devices/gdevpdfimg.c<br>
+devices/gdevpng.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-21 08:14: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=45baf1a5b71c2ddad8e16ae2f895c4244e6af9e6">45baf1a5b71c2ddad8e16ae2f895c4244e6af9e6</a>
+<blockquote>
+<p>
+ Fox typos and stuff in the release highlights<br>
+<br>
+doc/History9.htm<br>
+doc/News.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-20 18:33:00 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=58ea17fd3032584e04f4e844e2d9991af87f114e">58ea17fd3032584e04f4e844e2d9991af87f114e</a>
+<blockquote>
+<p>
+ Delete binary files from lcms2mt tree<br>
+<br>
+ There were left over binary libraries, remove them.<br>
+<br>
+lcms2mt/Lib/MS/lcms2_fast_float_plugin.lib<br>
+lcms2mt/Lib/MS/lcms2_static.lib<br>
+lcms2mt/Lib/MS/lcms2mt_fast_float_plugin.lib<br>
+lcms2mt/Lib/MS/lcms2mt_static.lib<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-20 17:19:09 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2ddd9d68bb0831ec8c9dd5e4e2e94bb44f8e5028">2ddd9d68bb0831ec8c9dd5e4e2e94bb44f8e5028</a>
+<blockquote>
+<p>
+ Fix pdfwrite &quot;%d&quot; mode with file permissions<br>
+<br>
+ Firstly, in gx_device_delete_output_file the iodev pointer was being passed<br>
+ to the delete_method incorrectly (passing a pointer to that pointer). Thus<br>
+ when we attempted to use that to confirm permission to delete the file, it<br>
+ crashed. Credit to Ken for finding that.<br>
+<br>
+ Secondly, due to the way pdfwrite works, when running with an output file per<br>
+ page, it creates the current output file immediately it has completed writing<br>
+ the previous one. Thus, it has to delete that partial file on exit.<br>
+<br>
+ Previously, the output file was not added to the &quot;control&quot; permission list,<br>
+ so an attempt to delete it would result in an error. So add the output file<br>
+ to the &quot;control&quot; as well as &quot;write&quot; list.<br>
+<br>
+base/gsdevice.c<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-18 10:23:13 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dee56822c0c9989fdf0115dab79842ad116c14f3">dee56822c0c9989fdf0115dab79842ad116c14f3</a>
+<blockquote>
+<p>
+ Update version, dates, product family<br>
+<br>
+ for 9.53.0 RC1<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>2020-08-20 09:12: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=f797ac99d0b0a337b5a57c37cdd026f4a9dbf897">f797ac99d0b0a337b5a57c37cdd026f4a9dbf897</a>
+<blockquote>
+<p>
+ Fix PDF /Producer for new patch level<br>
+<br>
+ Bug #702772 &quot;Strange /Producer attribute&quot;<br>
+<br>
+ The change to include a patch level for Ghostscript in the gs_revision<br>
+ value wasn't being reflected in the code to generate the version<br>
+ number used in the PDF /Producer string.<br>
+<br>
+ Copied the code from printf_program_ident() in base/gsmisc.c to the<br>
+ code in pdf_store_default_Producer() and commented both pieces of code<br>
+ to note the existence of each other so that in future hopefully we won't<br>
+ forget to keep them in sync.<br>
+<br>
+ Thanks to Peter Cherepanov for spotting the flaw.<br>
+<br>
+base/gsmisc.c<br>
+devices/vector/gdevpdfu.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-18 23:23:40 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ec82d2aa95dc8eb764483ff9011585bfc47a0f1b">ec82d2aa95dc8eb764483ff9011585bfc47a0f1b</a>
+<blockquote>
+<p>
+ Fix Bug 702381: Hang due to cyclic PDF resources.<br>
+<br>
+ The loop is caused by a circular /ParentResources attribute.<br>
+ This branch of code is triggered by an error in the sample file:<br>
+ misplaced /Form resources in a Type 3 font. This font has /Resource<br>
+ dictionaries added to /CharProcs entries rather than the font dictionary.<br>
+<br>
+ Note that this patch fixes the hang issue, but does not correct the<br>
+ issue of not being able to find the correct resource (in the CharProc)<br>
+ so that the file still output does not match Adobe (mupdf has that<br>
+ same issue).<br>
+<br>
+ Thanks to Peter Cherepanov for this patch.<br>
+<br>
+Resource/Init/pdf_base.ps<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-17 15:44: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=a01320e4d57d984f5bf65126534dbb3c33b416a4">a01320e4d57d984f5bf65126534dbb3c33b416a4</a>
+<blockquote>
+<p>
+ Bug 702744: Add windows utf-8 handling for unlink and rename.<br>
+<br>
+ To do this, we introduce gp_unlink and gp_rename, and call those<br>
+ as appropriate.<br>
+<br>
+ Also, make gp_open_scratch_file add the file to the permit list.<br>
+ When such a file is closed, it will be deleted from the permit list.<br>
+<br>
+ It will also be removed from the permit list if the file is deleted<br>
+ using the PS deletefile operator.<br>
+<br>
+ On closedown, if scratch files haven't been deleted, then we'll<br>
+ delete them as part of the closedown of gs_lib_ctx.<br>
+<br>
+ This means that 'purging' the control lists must not remove scratch<br>
+ file paths from the list.<br>
+<br>
+ Also, ensure that gsapi callers can't maliciously (or accidentally)<br>
+ remove scratch path paths from the list so as to leave them around<br>
+ after closedown.<br>
+<br>
+base/gp.h<br>
+base/gp_mswin.c<br>
+base/gp_os2.c<br>
+base/gp_os2fs.c<br>
+base/gp_os2pr.c<br>
+base/gp_unifs.c<br>
+base/gp_vms.c<br>
+base/gp_winfs.c<br>
+base/gpmisc.c<br>
+base/gsiodev.c<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+base/mkromfs.c<br>
+base/winlib.mak<br>
+pcl/pl/pjparse.c<br>
+psi/imain.c<br>
+psi/zfile.c<br>
+xps/xpsjxr.c<br>
+xps/xpstop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-11 14:41:28 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0e98e2a27ed19fcc138215afe17ab1a173aeed7b">0e98e2a27ed19fcc138215afe17ab1a173aeed7b</a>
+<blockquote>
+<p>
+ Add patch version to version number<br>
+<br>
+ This makes it easier to issue patch releases for security problems.<br>
+<br>
+Resource/Init/gs_init.ps<br>
+base/gsmisc.c<br>
+base/version.mak<br>
+devices/gdevtifs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-17 13:14: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=7cfa8d364797aed267285124a32b5cc5e1cd4794">7cfa8d364797aed267285124a32b5cc5e1cd4794</a>
+<blockquote>
+<p>
+ Bug 702360: Allow @loader_path on darwin so build<br>
+<br>
+ As this is change in behaviour, it's optional. The configure script now<br>
+ uses (if set) a environment variable called &quot;DARWIN_LDFLAGS_SO_PREFIX&quot; -<br>
+ included &quot;DARWIN&quot; because it only applies to DARWIN derived systems.<br>
+<br>
+ This allows the caller to use:<br>
+ ./configure DARWIN_LDFLAGS_SO_PREFIX=&quot;@loader_path/&quot;<br>
+<br>
+ Thus meaning the build will use loader_path rather than &quot;@executable_path&quot;.<br>
+<br>
+ Configuring/building without that environment variable will retain the current<br>
+ behaviour.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-15 11:10:02 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ffbd883cd13883ace8fb424a8a7c447084ea5fac">ffbd883cd13883ace8fb424a8a7c447084ea5fac</a>
+<blockquote>
+<p>
+ Enhance First/LastPage processing<br>
+<br>
+ Previously the FirstPage and LastPage processing device did not allow<br>
+ any means to reset the PageCount. This was because Ghostscript's<br>
+ command line processing does not permit changing non-PostScript<br>
+ controls (interpreter and some device parameters) after the first file<br>
+ has been run.<br>
+<br>
+ GPDL however, has a new mechanism 'set_param' which can be used<br>
+ programmatically, and that does permit for device and interpreter<br>
+ parameters to be altered after the initial file has been processed.<br>
+<br>
+ To allow for this the gdevflp device now processes parameters itself<br>
+ instead of relying on the underlying device to do so. The parameters<br>
+ FirstPage, LastPage, PageList and DisablePageHandler now all reset the<br>
+ page count to 0 when they are encountered. This means that, using gpdl,<br>
+ it is possible to select a set of pages from one file, then select a<br>
+ different set of pages from a second file. Sending any of these<br>
+ parameters (except, obviously DisablePageHandler) also now automatically<br>
+ enables the device again ie it sets DisablePageHandler to false.<br>
+<br>
+ It is not, unfortunately, possible to load the gdevflp device at any<br>
+ time except when the underlying device is initially opened. This means<br>
+ that if any file is to be processed using gdevflp the first file must<br>
+ use one of the parameters, in order to load gdevflp. The simplest<br>
+ solution is simply to set -dFirstPage=1 which will load the device and<br>
+ run all the pages from the file.<br>
+<br>
+ This commit also includes a minor change to the PDF interpreter. Because<br>
+ the PDF interpreter (currently) handles subsets of pages itself, it<br>
+ does not want the first/last page device to be active, so it<br>
+ disables the device by sending a 'DisablePageHandler' to it. However<br>
+ (because of the GS command line, as described in the first paragraph) it<br>
+ did not bother to re-enable the device. So here we add a line to<br>
+ re-enable the device after processing is complete.<br>
+<br>
+ This is probably superfluous now that sending the params will re-enable<br>
+ the gdevflp device anyway, but it should make the intention plain.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+base/gdevflp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 10:47:04 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=604646154201c1ecd7000a04fd33778d95b6aeac">604646154201c1ecd7000a04fd33778d95b6aeac</a>
+<blockquote>
+<p>
+ Bug 702725 Maintain spot colors when overprint mismatch in process CS<br>
+<br>
+ If the process color space does not match the source color space (for example<br>
+ drawing an RGB image to a CMYK device) and overprint is true, then we should<br>
+ still retain the spot colorants assuming the device supports them.<br>
+<br>
+base/gscspace.c<br>
+base/gscspace.h<br>
+base/gsicc.c<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 12:40:37 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a02c4496e0c41f5db492e3e549ad06254676dd0e">a02c4496e0c41f5db492e3e549ad06254676dd0e</a>
+<blockquote>
+<p>
+ demos/python/gsapi.py: match new handling of bool by gsapi_set_param().<br>
+<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 16:32: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=99c90d8d20d4be6113016154119dc102c18c986b">99c90d8d20d4be6113016154119dc102c18c986b</a>
+<blockquote>
+<p>
+ Update api_test.<br>
+<br>
+ Fix proper expectation of return codes when setting params.<br>
+<br>
+ Fix alignment of memory buffers for display buffer test. md5sums<br>
+ of generated files now match properly.<br>
+<br>
+demos/c/api_test.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 16:30:37 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=067b1ee4b45ee31d251bb796b30079866465ce42">067b1ee4b45ee31d251bb796b30079866465ce42</a>
+<blockquote>
+<p>
+ Fix stray error during param to string conversions.<br>
+<br>
+base/gsparaml.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 13:14:26 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8eaac9486822db53d3a903ec8638dd83f6677782">8eaac9486822db53d3a903ec8638dd83f6677782</a>
+<blockquote>
+<p>
+ Add a couple of files missing from VS Solution.<br>
+<br>
+windows/ghostscript.vcxproj<br>
+windows/ghostscript.vcxproj.filters<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 13:05: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=043a9629cfc27d743b5125584753fd15e462d772">043a9629cfc27d743b5125584753fd15e462d772</a>
+<blockquote>
+<p>
+ Update gsapi_set_params to use an &quot;int *&quot; for booleans.<br>
+<br>
+doc/API.htm<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-14 11:10: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=d7e8ea24060997ea5f4be1808b45117fe59b9ead">d7e8ea24060997ea5f4be1808b45117fe59b9ead</a>
+<blockquote>
+<p>
+ Bug 702611: Fix tiff_from_filep to handle subclassing<br>
+<br>
+ tiff_from_filep() creates a tiffio structure, which contains a pointer to the<br>
+ tiff device. If the device has been subclassed, however, that is the transient<br>
+ copy of the tiff device, and not the memory used by the &quot;real&quot; device, as<br>
+ pointed to by the graphics state.<br>
+<br>
+ Since we only use the device to get to the gs_memory_t pointer, just store that<br>
+ instead.<br>
+<br>
+base/gstiffio.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-13 11:15:01 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ae3d32942f4f976e89faff65c4e2fbcf4c6d5068">ae3d32942f4f976e89faff65c4e2fbcf4c6d5068</a>
+<blockquote>
+<p>
+ Fix memory leak associated with pdfwrite, type3x images<br>
+<br>
+ This leak is only an issue for non-GC interpreters such as pdfi<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-13 10:38: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=3f2408d5ac786ac1c0a837b600f4ef3be9be0332">3f2408d5ac786ac1c0a837b600f4ef3be9be0332</a>
+<blockquote>
+<p>
+ graphics library- clean up streams used as DataSource for functions<br>
+<br>
+ The graphics library doesn't close streams which are supplied as<br>
+ the DataSource for type 0 functions, leading to a memory leak in pdfi<br>
+ because we create memory streams (and hence allocate buffers) for this<br>
+ kind of input.<br>
+<br>
+ Add code to close the stream (if present) when the type 0 function is<br>
+ freed. There may be future work required here and in other function<br>
+ types.<br>
+<br>
+base/gsfunc0.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-12 15:15: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=0694e6e708ccab305524b64692403308f62f2652">0694e6e708ccab305524b64692403308f62f2652</a>
+<blockquote>
+<p>
+ More API.htm fixes<br>
+<br>
+ Found by Ethan Vrhel.<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-11 13:53:07 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5066e260483660b8c13caab141fd34f5844298c7">5066e260483660b8c13caab141fd34f5844298c7</a>
+<blockquote>
+<p>
+ Improve client memory handling for colour spaces and patterns<br>
+<br>
+ Colour spaces have had a client_data member for some time (only used<br>
+ with Pantone colour replacement) but no means to signal to the client<br>
+ that a colour space was going to be freed.<br>
+<br>
+ In addition, its terribly hard for an interpreter which uses complex<br>
+ colour spaces (such as Separation and DeviceN, for Patterns see below)<br>
+ to reliably track when a colour space is freed.<br>
+<br>
+ This commit adds a new 'interpreter_data' pointer to hold data allocated<br>
+ by the interpreter which is associated with a colour space. We also add<br>
+ an 'interpreter_free_cspace_proc' to be called when a colour space is<br>
+ about to be freed. This gives the interpreter an opportunity to clean<br>
+ up the memory it has associated with the colour space.<br>
+<br>
+ Similarly pattern instances (as opposed to Pattern colour spaces) have<br>
+ long had a client_data member, which was previously stored in the<br>
+ 'template' (which is a terrible misnomer) for both type 1 and type 2<br>
+ patterns. However there was no procedure to notify the client when the<br>
+ pattern was freed! The PCL interpreter (which was the only one using<br>
+ this type of pattern) dealt with this by replacing the 'free' routine<br>
+ in the structure with its own routine which first freed the client data<br>
+ and then called the original free routine. This seems like a hack.<br>
+<br>
+ This commit moves the client_data out of the pattern instance and into<br>
+ the pattern structure proper. It also adds a 'notfy_free' member which<br>
+ holds a pointer to a function to be called when a pattern is freed. This<br>
+ gives the client a reliable opportunity to clean up the client_data.<br>
+<br>
+ These changes involve updating the PostScript, PCL and XPS interpreters<br>
+ to point to the new location of the client_data, as well as similar<br>
+ changes in the graphics library. pixmap patterns now use the notify_free<br>
+ functio0n instead of patching over the structure's free routine.<br>
+<br>
+base/gscspace.c<br>
+base/gscspace.h<br>
+base/gspcolor.c<br>
+base/gspcolor.h<br>
+base/gsptype1.c<br>
+base/gsptype1.h<br>
+pcl/pxl/pxink.c<br>
+psi/zpcolor.c<br>
+psi/zshade.c<br>
+xps/xpstile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-12 10:46: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=e0529567af14fbbbd397b79ad9579d97799abfa5">e0529567af14fbbbd397b79ad9579d97799abfa5</a>
+<blockquote>
+<p>
+ Update Makefiles for new MSVC version.<br>
+<br>
+base/msvclib.mak<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-11 16:09: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=2228dad8c8649a120fd68d707824be1a06c87ee8">2228dad8c8649a120fd68d707824be1a06c87ee8</a>
+<blockquote>
+<p>
+ Fix missing bits and errors in API.htm<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-08 10:02: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=e52f3fccbbb81a4cc0e26837dea4359bda774d3c">e52f3fccbbb81a4cc0e26837dea4359bda774d3c</a>
+<blockquote>
+<p>
+ Fix Bug 702472: Array contents scrambled with writeobject/printobject<br>
+<br>
+ Thanks to Peter Cherepanov for this patch.<br>
+<br>
+ The mix-up of the nested arrays was caused by depth-first traversal of<br>
+ the array tree and assignment of offsets to subsidiary arrays that assumed<br>
+ width-first traversal. Switching to width-first traversal in all cases is<br>
+ the easiest way to fix the problem.<br>
+<br>
+ Additionally, access to the list of arrays is now implemented with the<br>
+ -index- operator that has constant complexity, rather than with -roll-<br>
+ that has linear complexity. So the whole process now has linear complexity<br>
+ rather than quadratic.<br>
+<br>
+ The total number of arrays in the exported object is arbitrarily limited to<br>
+ 64K. This prevents memory exhaustion when exported object has circular<br>
+ references, but should not hinder real world usage, if any.<br>
+<br>
+ Following the original implementation, equal names are not merged and<br>
+ exported separately.<br>
+<br>
+ NOTE:<br>
+ A Ghostscript extension, support of dictionaries in binary object sequence<br>
+ has been removed. Following the recent trend of cleaning up non-standard<br>
+ features.<br>
+<br>
+ Dictionary support is not yet removed from the C part. Contrary to PLRM,<br>
+ Adobe can parse binary object sequences with a non-zero tag in the top<br>
+ object. This feature is not yet added. Sequences that contain zero<br>
+ length names can be exported but cannot be imported due a conflict with<br>
+ accessing the user name index. This is a design flaw in PostScript.<br>
+<br>
+Resource/Init/gs_btokn.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-10 13:51:43 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9ff6690610a44be40b938ac948d2d0e96852fac2">9ff6690610a44be40b938ac948d2d0e96852fac2</a>
+<blockquote>
+<p>
+ demos/python/gsapi.py: added support for gsapi_get_param() and gsapi_enumerate_params().<br>
+<br>
+ Also:<br>
+ Wrote some very crude tests of new fns.<br>
+ Extended gsapi_set_param() to take optional &lt;type_&gt; arg.<br>
+ Fixed error in handling of word size on 64-bit Windows.<br>
+<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-11 16:13: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=fbe65ad97b583611ad854941927aa4b5a6642c55">fbe65ad97b583611ad854941927aa4b5a6642c55</a>
+<blockquote>
+<p>
+ Swap order of arguments in gsapi_set_param/gsapi_get_param.<br>
+<br>
+ This should play nicer with python.<br>
+<br>
+demos/c/api_test.c<br>
+doc/API.htm<br>
+doc/GPDL.htm<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-10 18:29: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=4a98669de4caf9ac9598ba28633979c78f31d884">4a98669de4caf9ac9598ba28633979c78f31d884</a>
+<blockquote>
+<p>
+ Fix gsapi_get_param behaviour on 'not found'.<br>
+<br>
+ Now we return gs_error_undefined if a value is not found.<br>
+<br>
+doc/API.htm<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-07 18:07:08 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=826f4411a7e879f0891728c0d38c82c516ae34d7">826f4411a7e879f0891728c0d38c82c516ae34d7</a>
+<blockquote>
+<p>
+ Bug 702607: Fix (and IMPROVE the maintainability of) EPSFitPage<br>
+<br>
+ Thanks to Peter Cherepanov for this excellent PostScript code to perform<br>
+ the scale and rotate FitPage. It is well designed and well documented and<br>
+ much more understandable than the previous.<br>
+<br>
+Resource/Init/gs_epsf.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-07 18:29:16 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=18caff3cdf2158e7642ded330bbaf14469863c7e">18caff3cdf2158e7642ded330bbaf14469863c7e</a>
+<blockquote>
+<p>
+ Update .def files with new gsapi functions.<br>
+<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>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-04 19:45: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=4f5692b9c78f0a9fb92c2019d509b80e08a19636">4f5692b9c78f0a9fb92c2019d509b80e08a19636</a>
+<blockquote>
+<p>
+ Update api_test: test enumeration of parameters.<br>
+<br>
+demos/c/api_test.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-07 18:01:37 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e66ab52ed2d65ad6989e73b8c6c797faced8343a">e66ab52ed2d65ad6989e73b8c6c797faced8343a</a>
+<blockquote>
+<p>
+ Improve gs_param to string functions.<br>
+<br>
+ size_t's and int64_t's were being displayed wrong due to a typo<br>
+ in my use of the PRI macros.<br>
+<br>
+ Allow strings to be returned as human readable strings rather than<br>
+ hexstrings.<br>
+<br>
+base/gsparaml.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-07 15:18: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=c5b0d528b9e3cbbeadeaba4e7f2e6958cc2a99a6">c5b0d528b9e3cbbeadeaba4e7f2e6958cc2a99a6</a>
+<blockquote>
+<p>
+ Add gsapi_enumerate_params functions.<br>
+<br>
+doc/API.htm<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>
+psi/iapi.c<br>
+psi/iapi.h<br>
+psi/iminst.h<br>
+psi/psapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-08 09:32:59 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0c2e9b65fbc6a7b813fbf96e59d01bd8ffc776e4">0c2e9b65fbc6a7b813fbf96e59d01bd8ffc776e4</a>
+<blockquote>
+<p>
+ Coverity 361226: Add missing break.<br>
+<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-07 18:00: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=d65d008f20c1cefb27f9ee2f40bcde268050cd6e">d65d008f20c1cefb27f9ee2f40bcde268050cd6e</a>
+<blockquote>
+<p>
+ Fix typo in default param handling.<br>
+<br>
+ PageList should be a string, not a name.<br>
+<br>
+base/gsdparam.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-06 07:44:07 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=249da10b83dd8ed287877e6d21fa3ca3658aadea">249da10b83dd8ed287877e6d21fa3ca3658aadea</a>
+<blockquote>
+<p>
+ Add gstate param to client callback<br>
+<br>
+ This is needed for the pdfi interpreter.<br>
+<br>
+base/gsstate.c<br>
+base/gxstate.h<br>
+pcl/pcl/pctop.c<br>
+pcl/pxl/pxgstate.c<br>
+psi/zgstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-04 19:45: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=419fe20af3bdf203f980f41bd92189c7a76b32ba">419fe20af3bdf203f980f41bd92189c7a76b32ba</a>
+<blockquote>
+<p>
+ Update api_test.<br>
+<br>
+ Test param getting, and resolution changing.<br>
+<br>
+demos/c/api_test.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-06 15:23:50 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d01489255d8b5e1733ac1d664cbc1fbf206319e9">d01489255d8b5e1733ac1d664cbc1fbf206319e9</a>
+<blockquote>
+<p>
+ Fix bug in param array coercion.<br>
+<br>
+ If we're going to autoconvert an int array to a float array,<br>
+ make sure we label the final array as being floats, otherwise<br>
+ we run the risk of converting it again!<br>
+<br>
+base/gscparam.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-06 13:30: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=afac1313514a34b47bd7f3f441c6ec0ef169fccc">afac1313514a34b47bd7f3f441c6ec0ef169fccc</a>
+<blockquote>
+<p>
+ Tidy printing of floating point numbers in get_params.<br>
+<br>
+base/gsparaml.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-06 13:30:22 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=afbecca968cf0701da25cc7ec8ceba9075aad0f8">afbecca968cf0701da25cc7ec8ceba9075aad0f8</a>
+<blockquote>
+<p>
+ Parse #xx in param names correctly (for gsapi_set_param).<br>
+<br>
+base/gsparaml.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-06 12:02:59 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=783049405b39fb48f84d4ddee478e4ea10631c3d">783049405b39fb48f84d4ddee478e4ea10631c3d</a>
+<blockquote>
+<p>
+ Support arrays of names in the param passing code.<br>
+<br>
+base/gsparaml.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-05 18:48:59 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d1d44a90cf94338fec8ccf73338767ddb07a2254">d1d44a90cf94338fec8ccf73338767ddb07a2254</a>
+<blockquote>
+<p>
+ Update docs for set_param/get_param and -p.<br>
+<br>
+doc/API.htm<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-05 16:16: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=34703d722359c7547c532a3e24d2cd81c3f332f5">34703d722359c7547c532a3e24d2cd81c3f332f5</a>
+<blockquote>
+<p>
+ Trigger an initgraphics on every usage of -p within gs.<br>
+<br>
+ This enables us to set the resolution and have it reflected.<br>
+<br>
+psi/iapi.c<br>
+psi/imainarg.c<br>
+psi/int.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-05 13:44:51 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=932dc770a270ff7c70e899f953df9e9c72620d47">932dc770a270ff7c70e899f953df9e9c72620d47</a>
+<blockquote>
+<p>
+ Update gpdl to accept -d/-s/-p after filenames.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-05 13:18: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=4d94506a1a9442bd3cc51b94eb5f6a16a12588f2">4d94506a1a9442bd3cc51b94eb5f6a16a12588f2</a>
+<blockquote>
+<p>
+ Add -pNAME=STRING options to gs and gpdl to accept parsed params.<br>
+<br>
+ This means we no longer need to rely on using -c and passing<br>
+ postscript fragments to configure (for example) pdfwrite.<br>
+<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-04 19:44: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=fe0c022fbc1906a48b5a03704d9337751b26be8a">fe0c022fbc1906a48b5a03704d9337751b26be8a</a>
+<blockquote>
+<p>
+ Add gsapi_get_param<br>
+<br>
+base/gsparam.h<br>
+base/gsparam2.c<br>
+base/gsparaml.c<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+psi/psapi.c<br>
+psi/psapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-05 16:52: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=3a8f4eca0284294c05a471a99263d22032db84b6">3a8f4eca0284294c05a471a99263d22032db84b6</a>
+<blockquote>
+<p>
+ Bug 702606: Fix downsampler failing to initialise with pdfwrite.<br>
+<br>
+ Some of the params were being left unset. My mistake when I added<br>
+ them.<br>
+<br>
+devices/vector/gdevpsdi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-03 12:53:26 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c935b86d261d91ee04b5bf5f95028473d4af3735">c935b86d261d91ee04b5bf5f95028473d4af3735</a>
+<blockquote>
+<p>
+ Fix infinite loop in ialloc_validate_memory tracing the freelist.<br>
+<br>
+ Found in a DEBUG build running the file from Bug 702586 using:<br>
+ -sDEVICE=ppmraw -o x.ppm Bug702586.pdf<br>
+ Hangs after printing the error message:<br>
+ GPL Ghostscript GIT PRERELEASE 9.53: Unrecoverable error, exit code 1<br>
+<br>
+ Fixed by adding a check for self-reference and break out of the loop.<br>
+<br>
+ At some point, someone may want to look at how we get this freelist<br>
+ problem.<br>
+<br>
+psi/ilocate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-04 12:32: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=ae588a57abccc598d74cb664c117ef339a42c1ba">ae588a57abccc598d74cb664c117ef339a42c1ba</a>
+<blockquote>
+<p>
+ Coverity 361222: Add missing break.<br>
+<br>
+psi/imain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-03 13:57: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=341da1a6c41d71344f7ea32505f9ce82c1177e99">341da1a6c41d71344f7ea32505f9ce82c1177e99</a>
+<blockquote>
+<p>
+ Avoid gsapi_set_param within a gsapi_runstring.<br>
+<br>
+ Also, avoid gsapi_run_file within a gsapi_runstring.<br>
+<br>
+pcl/pl/plmain.c<br>
+psi/iminst.h<br>
+psi/psapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-08-03 13:17:30 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d1337dc425e1d032c0eeef26d530b096930432f4">d1337dc425e1d032c0eeef26d530b096930432f4</a>
+<blockquote>
+<p>
+ Update header dependencies<br>
+<br>
+base/lib.mak<br>
+base/tiff.mak<br>
+devices/dcontrib.mak<br>
+devices/devs.mak<br>
+devices/gdevpdfimg.h<br>
+psi/int.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-30 19:16: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=bf6884134c244c4766d13c76264fa4372eab4056">bf6884134c244c4766d13c76264fa4372eab4056</a>
+<blockquote>
+<p>
+ gsapi_set_param improvements.<br>
+<br>
+ Allow for a 'parsed' param type; this leverages the functions in<br>
+ gsparaml.c to parse an input string into a param list, coping<br>
+ with dictionaries and arrays.<br>
+<br>
+ We update those functions to improve behaviour on more exotically<br>
+ formed numbers (&quot;- 0.3e-10&quot; etc), on 'tricksy' inputs (e.g.<br>
+ &quot;&lt;&lt; /Foo (&gt;&gt;) &gt;&gt;&quot; etc) and to cope without relying on whitespace<br>
+ (e.g. &quot;&lt;&lt;/Foo/Bar/Baz[1 0]/Fizz&lt;1234&gt;/Bang(A)&gt;&gt;&quot; etc).<br>
+<br>
+ Update pl_implementation set_param entrypoint so that the language<br>
+ interface itself is based upon param lists, rather than typed<br>
+ params.<br>
+<br>
+ Update both implementations of gsapi_set_params so that if<br>
+ we are too early in the setup process stuff goes into the list<br>
+ and is held until we have devices/languages to pass it to. Also<br>
+ add a flag to allow for 'more to come' so that we can effectively<br>
+ set multiple params at once.<br>
+<br>
+base/gsparam.h<br>
+base/gsparaml.c<br>
+demos/c/api_test.c<br>
+demos/c/api_test.vcxproj<br>
+gpdl/psitop.c<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+pcl/pl/pltop.c<br>
+pcl/pl/pltop.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+psi/imain.c<br>
+psi/imain.h<br>
+psi/iminst.h<br>
+psi/psapi.c<br>
+psi/psapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-31 10:13:27 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=49a4fede913a12a61fd6649898cf5999030f4b69">49a4fede913a12a61fd6649898cf5999030f4b69</a>
+<blockquote>
+<p>
+ Fix Bug 702598: Ghostscript will not open SECURED PDF that Adobe opens.<br>
+<br>
+ It's not really clear that this is a valid PDF since it does not conform to<br>
+ one comment in the spec related to AuthEvent with StmF and StrF /Identity,<br>
+ but since Adobe opens this we now open PDF's with AuthEvent specified as<br>
+ something other than /DocOpen and BOTH StrF and StmF /Identity. We look<br>
+ in the /CF &quot;StdCF&quot; dictionary for the AuthEvent. As per the spec., if<br>
+ AuthEvent is not present, assume DocOpen, and if StmF or StrF are not<br>
+ present, we default to /Identity.<br>
+<br>
+ Thanks to Ken Sharp for the initial work on this.<br>
+<br>
+Resource/Init/pdf_sec.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-30 14:23:23 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e3c4d64fe28ffc1361995de034beaeb2a9a7b206">e3c4d64fe28ffc1361995de034beaeb2a9a7b206</a>
+<blockquote>
+<p>
+ Fix warning message re: gs_smoothness<br>
+<br>
+base/gsstate.c<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-30 14:22:09 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=28452533cab466bef9437ee393140695dabc5f9c">28452533cab466bef9437ee393140695dabc5f9c</a>
+<blockquote>
+<p>
+ Fix memory leak with non-GC overprint device<br>
+<br>
+ This memory leak only matters in non-GC (reference-counted) interpreters<br>
+ such as pdfi.<br>
+<br>
+ There was an extra reference count after creating and then setting the<br>
+ overprint device. This change decrements the rc so that it will be 1<br>
+ when exiting this function, allowing it to be properly freed later.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-30 16:18:44 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a1441168f346cefd28e6336f6fbb3b310540dbff">a1441168f346cefd28e6336f6fbb3b310540dbff</a>
+<blockquote>
+<p>
+ Changed gsapi.py to raise exceptions instead of returning error number<br>
+<br>
+ gsapi.py:<br>
+ Generate exceptions instead of returning error codes.<br>
+ Added python versions of gs_error_* codes.<br>
+<br>
+ examples.py:<br>
+ Updated to match new API.<br>
+ Re-raise import error if 'import gsapi' fails.<br>
+ Patched up calls of run_gpdl() to pass in_filename because passing None<br>
+ caused underlying C to return an error.<br>
+ Marked as executable.<br>
+ Look for input files relative to top of ghospdl checkout (found using<br>
+ __file__).<br>
+<br>
+demos/python/examples.py<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-29 17:27:31 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=868200752e41adacc9d027092eba7be2db572b00">868200752e41adacc9d027092eba7be2db572b00</a>
+<blockquote>
+<p>
+ demos/python/gsapi.py: added detection of OS to import correct libgs.so/gpdldll*.dll.<br>
+<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-29 07:25:58 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=54842402fafb0bfc9e4ab2031dbe82e7593f5d08">54842402fafb0bfc9e4ab2031dbe82e7593f5d08</a>
+<blockquote>
+<p>
+ devices/vector/gdevtxtw.c: Added TextFormat=4 for extract system.<br>
+<br>
+ We now retain glyph advance values, and fixed handling of extra widths.<br>
+<br>
+ Added .Advs arrays to text_list_entry_s and textw_text_enum_s so that<br>
+ we can store the original width of glyph before any additions due to<br>
+ TEXT_ADD_TO_ALL_WIDTHS. E.g. this allows one to determine whether glyphs are<br>
+ actually not adjacent.<br>
+<br>
+ Added TextFormat=4 for generating data suitable for extract system.<br>
+<br>
+ txtwrite_process_plain_text:<br>
+ Don't preserve gs_point dpt across iterations - this was cumlatively<br>
+ adding additions from TEXT_ADD_TO_SPACE_WIDTH, giving incorrect<br>
+ positioning. Instead we reset dpt back to {0,0} at the start of each<br>
+ iteration.<br>
+<br>
+ extract_text_output():<br>
+ New, implements TextFormat=4. Writes similar information to<br>
+ decorated_text_output() with TextFormat=0, but also specifies advance value<br>
+ for each char.<br>
+<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-29 13:19:02 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7e28caf03348229390e8aa3cf6395e3a13fab0b3">7e28caf03348229390e8aa3cf6395e3a13fab0b3</a>
+<blockquote>
+<p>
+ Fix minor items in python demo<br>
+<br>
+ Remove ;'s at some line endings (a hard habit to break).<br>
+ Add try catch around import process. Update README<br>
+<br>
+demos/python/README.txt<br>
+demos/python/examples.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-29 14:39: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=d802303d48d2cb7ac7be157865588b2416e8e633">d802303d48d2cb7ac7be157865588b2416e8e633</a>
+<blockquote>
+<p>
+ Add gs_param list parsing functions.<br>
+<br>
+ Actually, steal the existing functions from the PJL code,<br>
+ move them into the graphics library, and refactor slightly.<br>
+<br>
+ 2 functions; the first one, gs_param_list_add_tokens reads<br>
+ a string of key/value pairs and adds them to the list.<br>
+<br>
+ The second one, gs_param_list_add_parsed_value takes a key<br>
+ and a string for the value, and just adds that pair to the<br>
+ list.<br>
+<br>
+base/gsparam.h<br>
+base/gsparaml.c<br>
+base/lib.mak<br>
+pcl/pl/plparams.c<br>
+windows/ghostscript.vcxproj<br>
+windows/ghostscript.vcxproj.filters<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-29 11:29: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=423a04cd8bb7f12ffc127bfb30630348d98694b4">423a04cd8bb7f12ffc127bfb30630348d98694b4</a>
+<blockquote>
+<p>
+ Coverity 361150: Check return values for abuf_flush().<br>
+<br>
+ I foolishly checked the return value from abuf_flush() in new<br>
+ code, which has made Coverity wake up and start complaining<br>
+ about these older ones.<br>
+<br>
+base/gdevabuf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-25 08:29: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=89bba350f5724b034753c4febfc559afad835d5c">89bba350f5724b034753c4febfc559afad835d5c</a>
+<blockquote>
+<p>
+ Defeat ICC component validation for nullpage device<br>
+<br>
+ Further to commit 4a3441bdde7060ecc9048bf391977412a82063a8, it turns out that,<br>
+ in practice, we can't completely ignore the ICC profile device parameters,<br>
+ parameters that have an immediate effect on the device are also validated during<br>
+ put_params and thus, for those, validation can still fail.<br>
+<br>
+ Using gxdso_supports_devn allows us to defeat the profile component validation,<br>
+ but nullpage is not a DeviceN device, hence that could cause confusion.<br>
+<br>
+ Using a dedicated gxdso_skip_icc_component_validation allows us to be more<br>
+ selective about when to short circuit those tests, and avoid confusion.<br>
+<br>
+ This is required for gpdl as Postscript initialisation is slightly different<br>
+ compared to regular Ghostscript - the nulldevice remains in play all through<br>
+ Postscript initialisation (rather than being replaced with the device<br>
+ specified by the command arguments part way through initialisation).<br>
+<br>
+base/gdevmpla.c<br>
+base/gdevnfwd.c<br>
+base/gdevp14.c<br>
+base/gsicc_manage.c<br>
+base/gxclrect.c<br>
+base/gxdevsop.h<br>
+devices/gdevcmykog.c<br>
+devices/gdevdsp.c<br>
+devices/gdevpsd.c<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-27 12:46: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=9beae99074655cf78729d5e26862f00cea11b109">9beae99074655cf78729d5e26862f00cea11b109</a>
+<blockquote>
+<p>
+ Ensure we can call dev_spec_op as soon as device is created<br>
+<br>
+ Since we can legitimately want to interrogate a device for its capabilities and<br>
+ preferences right from its creation, ensure the dev_spec_op is valid as soon<br>
+ as the device is created.<br>
+<br>
+base/gsdevice.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-28 21:36:11 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6179b719348c1622352b55d66599ba26cfba9d3d">6179b719348c1622352b55d66599ba26cfba9d3d</a>
+<blockquote>
+<p>
+ Add Python examples and README<br>
+<br>
+ Also fix typos in C# README<br>
+<br>
+demos/csharp/README.txt<br>
+demos/python/README.txt<br>
+demos/python/examples.py<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-28 17:52: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=c001ce438ef9fd0171104ac49afa110e39edb03e">c001ce438ef9fd0171104ac49afa110e39edb03e</a>
+<blockquote>
+<p>
+ Bug 702587: Fix alpha buffer issue with fill/stroke operations.<br>
+<br>
+ The &quot;alphabits&quot; devices work by an alpha buffer being inserted<br>
+ into the device chain before graphical operations. This intercepts<br>
+ drawing device calls, 'saves' the color, and then converts the<br>
+ call into a fill of a monochrome mask.<br>
+<br>
+ Only a small 'window' of mask is ever held in memory at once. When<br>
+ the drawing moves out of the range of that window, the window is<br>
+ flushed (conceptually the mask is scaled down, and then that scaled<br>
+ representation is filled with the saved color).<br>
+<br>
+ Any &quot;stragglers&quot; (i.e. unwritten back bits of mask) are flushed at<br>
+ the end of the graphical operation.<br>
+<br>
+ When using fill/stroke, the existing code fails to notice the<br>
+ color in use being changed. This means the last 'window' of<br>
+ fill can end up being written in the color intended for 'stroke'.<br>
+<br>
+ We therefore update the fill/stroke logic to check for the color<br>
+ changing. (We check for 'unflushed data' and 'color has changed').<br>
+<br>
+base/gdevabuf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-27 12:43: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=45b122117e937bb36da2ef03ea590c90ebcd2de9">45b122117e937bb36da2ef03ea590c90ebcd2de9</a>
+<blockquote>
+<p>
+ pdfwrite - free ICCBased profile streams to prevent memory leak<br>
+<br>
+ An oversight in memory cleanup in pdfwrite.<br>
+<br>
+ ICCBased colour space arrays contain a reference (must be a reference)<br>
+ to a stream dictionary where the stream data is the profile. Because the<br>
+ stream dictionary is a reference, it must have an ID (a pdf index). This<br>
+ means that when we free the colour space array we do not free the stream<br>
+ dictionary element contained within it.<br>
+<br>
+ We don't free objects with a non-zero ID because these are assumed to be<br>
+ a type of resource, and tracked via the resource chains, but in the<br>
+ case of ICC profiles we were not adding them to a resource chain.<br>
+<br>
+ Fixed here by adding ICC profile streams to the 'resourceOther' chain<br>
+ so that they are freed on exit.<br>
+<br>
+devices/vector/gdevpdfk.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-25 10:52: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=55088a6e12775eeae1d19bf9a6db641566ea0c8f">55088a6e12775eeae1d19bf9a6db641566ea0c8f</a>
+<blockquote>
+<p>
+ pdfwrite - review use of sclose().<br>
+<br>
+ The stream interface essentially leaves the buffer management in the<br>
+ hands of the creator; sclose() does not free the stream buffer, but it<br>
+ does set the pointer in the stream state to NULL.<br>
+<br>
+ This can be problematic; if the only reference we have to the original<br>
+ buffer is the pointer in the stream state, then we must copy the pointer<br>
+ before calling sclose() and then free the buffer afterwards.<br>
+<br>
+ s_close_filters() does this BUT it can't know whether a given buffer<br>
+ was allocated in memory, from the C heap or some other fixed allocation.<br>
+ It simply frees all the buffers. Obviously this can cause problems if<br>
+ we use it indiscriminately.<br>
+<br>
+ I've reviewed all the places pdfwrite uses sclose() and where we can<br>
+ use s_close_filters() I've modified the code to do so (to avoid memory<br>
+ leaks in non-GC memory allocators). Where we must not attempt to free<br>
+ the buffer I've left the sclose() but commented on the reason.<br>
+<br>
+devices/vector/gdevpdf.c<br>
+devices/vector/gdevpdfc.c<br>
+devices/vector/gdevpdfo.c<br>
+devices/vector/gdevpdfu.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-22 09:57:54 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5d499272b95a6b890a1397e11d20937de000d31b">5d499272b95a6b890a1397e11d20937de000d31b</a>
+<blockquote>
+<p>
+ Bug 702582, CVE 2020-15900 Memory Corruption in Ghostscript 9.52<br>
+<br>
+ Fix the 'rsearch' calculation for the 'post' size to give the correct<br>
+ size. Previous calculation would result in a size that was too large,<br>
+ and could underflow to max uint32_t. Also fix 'rsearch' to return the<br>
+ correct 'pre' string with empty string match.<br>
+<br>
+ A future change may 'undefine' this undocumented, non-standard operator<br>
+ during initialization as we do with the many other non-standard internal<br>
+ PostScript operators and procedures.<br>
+<br>
+psi/zstring.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-24 14:03:51 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f77f99702c9c8418b9516056d5f4280105beafc4">f77f99702c9c8418b9516056d5f4280105beafc4</a>
+<blockquote>
+<p>
+ demos/python/gsapi.py: improved encoding/decoding of strings.<br>
+<br>
+ Set global _encoding to the encoding passed to gsapi_set_arg_encoding(), and<br>
+ use it where expected by the underlying C code.<br>
+<br>
+ gsapi_set_stdio():<br>
+ Pass bytes object to stdout and stderr callbacks for convenience, and<br>
+ document what expectations are.<br>
+<br>
+ gsapi_run_string*():<br>
+ Accept str or bytes; encode the former into bytes using utf-8 encoding.<br>
+<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-22 18:41:05 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=269f880585dd2c6b3f716668b05f4c911214356b">269f880585dd2c6b3f716668b05f4c911214356b</a>
+<blockquote>
+<p>
+ configure.ac: avoid pathological shell glob expansion in CFLAGS_SANITIZE.<br>
+<br>
+ Specifying a command-line arg with lots of '*' characters that aren't intended<br>
+ to match any filenames, can stress the shell's glob code.<br>
+<br>
+ OpenBSD's ksh gets very slow, for example (e.g. 20m vs 45s in bash).<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-24 17:52: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=dd1114e8ac0508ada6959c7ffcf6433b5bebe0cf">dd1114e8ac0508ada6959c7ffcf6433b5bebe0cf</a>
+<blockquote>
+<p>
+ make pdf_end_encrypt static<br>
+<br>
+devices/vector/gdevpdfx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-24 15:26: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=0752757bca7979ed23e6e4fc3cf0772a49fb86c2">0752757bca7979ed23e6e4fc3cf0772a49fb86c2</a>
+<blockquote>
+<p>
+ pdfwrite - fix memory leak with sclose<br>
+<br>
+ The stream code is hideous and full of surprised to trap the unwary. In<br>
+ this case sclose() has the unexpected side-effect of setting the stream<br>
+ buffer to NULL before returning, so we cannot free it afterwards.<br>
+<br>
+ s_close_filters deals with this for us by taking a pointer to the<br>
+ buffer and calling gs_free_object on it after the stream is closed, so<br>
+ we really need to do that (or mimic the same thing ourselves).<br>
+<br>
+ We could do s_close_filters(s, s-&gt;strm) to just close each filter in<br>
+ turn, but I've chosen to just walk down the filter chain for each<br>
+ filter we added, and then close them all up to that point.<br>
+<br>
+ This means changing pdf_end_encrypt() so that instead of closing the<br>
+ stream (with the potential memory leak) we just signal whether the<br>
+ calling code should close the encryption filter.<br>
+<br>
+devices/vector/gdevpdfu.c<br>
+devices/vector/gdevpdfx.h<br>
+devices/vector/gdevpdti.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-24 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=4837ddb473d3109fe2108b2ac2aa12a8bf5a0b4e">4837ddb473d3109fe2108b2ac2aa12a8bf5a0b4e</a>
+<blockquote>
+<p>
+ Have gsapi_run_file() handle access controls<br>
+<br>
+ Previously, gsapi_run_file() required the caller to add the file to be<br>
+ processed to the permit read file list. We'll now add the file to the permit<br>
+ read list, execute the file, and remove it from the list without the caller<br>
+ having to do so.<br>
+<br>
+pcl/pl/plapi.c<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-22 14:01: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=3244573621b1daa2997fbea0c13ce7f891b42203">3244573621b1daa2997fbea0c13ce7f891b42203</a>
+<blockquote>
+<p>
+ Fix pdfwrite memory leak when doing multi-page output<br>
+<br>
+ When doing multiple page output (i.e. page-%0d.pdf or whatever) there<br>
+ was a memory leak because it was attempting to short-circuit things and<br>
+ just delete the last (blank) page, but there was a ton of stuff that<br>
+ never got freed in that case.<br>
+<br>
+ This change sets a flag for the condition and then processes the whole<br>
+ page (which hopefully doesn't do much because it is empty), including<br>
+ freeing everything. Then it just deletes the file at the end instead<br>
+ of at the beginning of the function.<br>
+<br>
+ This function (pdf_close()) is over 1000 lines and really needs to be<br>
+ refactored for maintainability.<br>
+<br>
+devices/vector/gdevpdf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-22 12:24:05 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=90f0f92bf6bf9c346cd3f74adaa42a7c8a3702cb">90f0f92bf6bf9c346cd3f74adaa42a7c8a3702cb</a>
+<blockquote>
+<p>
+ Fix memory leak in pdfwrite device<br>
+<br>
+ This appears to only be a memory leak for non-garbage-collected interpreters<br>
+ such as pdfi.<br>
+<br>
+ sclose() calls s_disable() which sets s-&gt;cbuf to 0.<br>
+ But it also calls client callbacks that might do things with cbuf first, so<br>
+ it will crash if we free it before calling sclose().<br>
+ Side-effects galore! :(<br>
+<br>
+ Anyway, we save the pointer before doing the sclose() so we can<br>
+ properly free it afterwards.<br>
+<br>
+devices/vector/gdevpdfu.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-23 12:51:20 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4a3441bdde7060ecc9048bf391977412a82063a8">4a3441bdde7060ecc9048bf391977412a82063a8</a>
+<blockquote>
+<p>
+ Have nullpage ignore ICC parameters<br>
+<br>
+ We want nullpage to be (largely) a bitbucket device, but ICC profile<br>
+ parameters that require a specific color model could cause it to error.<br>
+<br>
+ Force nullpage to ignore changes to the device ICC profiles. Since it cannot<br>
+ ever produce output, it has no effect in normal operation.<br>
+<br>
+base/gdevnfwd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-23 13:15: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=a0288377aa1952f8bb3c3739e0d119635280f31c">a0288377aa1952f8bb3c3739e0d119635280f31c</a>
+<blockquote>
+<p>
+ gpdl: Don't report -h or --help as failures.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-21 14:50:13 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=36bec547acf7b799d09f0433b25b059153712839">36bec547acf7b799d09f0433b25b059153712839</a>
+<blockquote>
+<p>
+ demos/python/gsapi.py: removed requirement for python-3.7.<br>
+<br>
+ Removed use of collections module, and instead use hand-written classes, which<br>
+ are clearer and don't require python-3.7.<br>
+<br>
+demos/python/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-21 08:19: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=1d2b10ba71b40f261350e4ffc1f808381e81544d">1d2b10ba71b40f261350e4ffc1f808381e81544d</a>
+<blockquote>
+<p>
+ Fix Coverity ID 360929<br>
+<br>
+ Remove some pointless code, over-enthusiastic copy/paste error.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-20 16:41:37 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e2efdde6b718098f0d35763bb094833a766af479">e2efdde6b718098f0d35763bb094833a766af479</a>
+<blockquote>
+<p>
+ Fix two minor issues in python API demo<br>
+<br>
+demos/python/gsapi.py<br>
+demos/python/jlib.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-20 16:32: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=217b8d292a1098ee56ab52b57bce3e32920b55d4">217b8d292a1098ee56ab52b57bce3e32920b55d4</a>
+<blockquote>
+<p>
+ Demo Viewers: Add readme for csharp example.<br>
+<br>
+ Also minor fixes in Windows application.<br>
+<br>
+demos/csharp/README.txt<br>
+demos/csharp/api/ghostnet.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-20 16:02:31 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4aa0fb2f264f196bb9a07f9d03f7b2da3e89abec">4aa0fb2f264f196bb9a07f9d03f7b2da3e89abec</a>
+<blockquote>
+<p>
+ Linux Demo Viewer : Fix few issues found with testing<br>
+<br>
+ Race condition between gs thread and ui thread. Also<br>
+ issues with zoom factors.<br>
+<br>
+demos/csharp/api/ghostmono.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainZoom.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-20 14:42:17 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b6622b9b2e95e20febe283035328569211413ac4">b6622b9b2e95e20febe283035328569211413ac4</a>
+<blockquote>
+<p>
+ Demo Viewer: Delete unused file. Minor code fix in wpf viewer.<br>
+<br>
+demos/csharp/linux/gtk_viewer/src/gsIO.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.xaml.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-20 14:32:59 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4c6a3e9b8c87aadc6a50c457d8cf7190fafef59c">4c6a3e9b8c87aadc6a50c457d8cf7190fafef59c</a>
+<blockquote>
+<p>
+ Linux Demo Viewer: Complete various lingering tasks<br>
+<br>
+ Add proper closure of current file. Add launching of new<br>
+ process when another file is opened. Fix issue in<br>
+ distilling process.<br>
+<br>
+demos/csharp/api/ghostapi.cs<br>
+demos/csharp/api/ghostmono.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainRender.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-20 11:14: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=ed82512ecb34f9b51461383755e061e881c269c9">ed82512ecb34f9b51461383755e061e881c269c9</a>
+<blockquote>
+<p>
+ graphics library - initialise more members of the graphics state<br>
+<br>
+ When creating a graphics state and when calling gs_initgraphics() the<br>
+ code was not initialising several members of the graphics state. Mainly<br>
+ these were the new members introduced some time back to allow the PDF<br>
+ interpreter to track the PDF graphics state.<br>
+<br>
+ For consistency, and simpler implementation in pdfi, its better to<br>
+ specifically initialise the state, especially those members which<br>
+ should not default to 0.<br>
+<br>
+ This causes a few tiny diffs with XPS (because the XPS interpeter,<br>
+ unlike the PS and PDF interpreters) did not set a couple of members<br>
+ which are, nevertheless, used when rendering (smoothness and<br>
+ accuratecurves). Smoothness (which affects gradient fills) is now<br>
+ initialised to 0.02 instead of 1 (so much smoother) and accuratecurves<br>
+ is now true instead of false.<br>
+<br>
+base/gsstate.c<br>
+base/gxgstate.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-19 23:21: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=45d1994b40289b4ca7bf2d6504081ddcc4d68f14">45d1994b40289b4ca7bf2d6504081ddcc4d68f14</a>
+<blockquote>
+<p>
+ Linux Demo Viewer: Distiller work.<br>
+<br>
+ Everything is hooked in and running. For some odd reason the tmp<br>
+ file generated in the distilling process is 0 bytes. Will<br>
+ dig further to see why the file is not getting written. API<br>
+ seems happy as can be... very odd.<br>
+<br>
+demos/csharp/api/ghostapi.cs<br>
+demos/csharp/api/ghostmono.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-18 17:02: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=6466211fec0c44ce29e7cd094465d2ed4f351ef1">6466211fec0c44ce29e7cd094465d2ed4f351ef1</a>
+<blockquote>
+<p>
+ Linux Demo Viewer: Progress at last.<br>
+<br>
+ Many thing that should have been simple were complicated<br>
+ in the poorly documented world of C# mono development.<br>
+ Just need to do a bit more clean up and hook in the<br>
+ distilling option for PS.<br>
+<br>
+demos/csharp/api/ghostmono.cs<br>
+demos/csharp/linux/gtk_viewer/gtk_viewer.csproj<br>
+demos/csharp/linux/gtk_viewer/gtk_viewer.sln<br>
+demos/csharp/linux/gtk_viewer/src/MainRender.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainZoom.cs<br>
+demos/csharp/linux/gtk_viewer/src/Program.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-15 16:48: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=0f59de6b3daab30d405ee5c5c4ac943c26721622">0f59de6b3daab30d405ee5c5c4ac943c26721622</a>
+<blockquote>
+<p>
+ Linux Demo Viewer: Various updates to try to get threading working<br>
+<br>
+demos/csharp/linux/gtk_viewer/src/DocPage.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainRender.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainZoom.cs<br>
+demos/csharp/linux/gtk_viewer/src/Program.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-15 16:42: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=42b49069c0f87406dcd796183ba719d45dd8ce69">42b49069c0f87406dcd796183ba719d45dd8ce69</a>
+<blockquote>
+<p>
+ Mono GTK requires a different type of threading call<br>
+<br>
+ In Windows .NET one can use the BackgroundWorker event handler.<br>
+ Unfortunately the completed event does not call back on the<br>
+ correct thread. This one uses methods suggested by the mono<br>
+ GTK documentation. Keeping both versions for examples.<br>
+<br>
+demos/csharp/api/ghostmono.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-17 13:44: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=69593c399cbd445b51b4a7bf7d1ccc36604f2c37">69593c399cbd445b51b4a7bf7d1ccc36604f2c37</a>
+<blockquote>
+<p>
+ graphics library - initialise some gstate members appropriately<br>
+<br>
+ The members are (I think) all part of the PDF graphics state rather than<br>
+ the PostScript graphics state. These members are normally initialised<br>
+ by the (PostScript) PDF interpreter but when we are running the new<br>
+ pdfi interpreter inside Ghostscript we want to inherit the contents of<br>
+ the graphics state, not overwrite them, so we do not initialise these.<br>
+<br>
+ This leads to problems; because the values are never initialised in this<br>
+ case, and (for example) the text horizontal scaling remains at 0 when<br>
+ it should be 100. Since we set the Text Rendering Matrix partially by<br>
+ multiplying by that value, this can lead to a degenerate matrix and<br>
+ cause text not to appear. In addition it causes ps2write output to be<br>
+ incorrect and throw an error.<br>
+<br>
+ This commit does nothing with regular Ghostscript, but with GS+pdfi it<br>
+ fixes hundreds of errors in ps2write tests and results in at least some<br>
+ files drawing some content. At least one of these files is still not<br>
+ correct (it is with pdfi alone) so there is clearly more to do here.<br>
+<br>
+ This reduces the number of errors testing GS+pdfi to 475 which is<br>
+ 447 errors less than Ghostscript alone.<br>
+<br>
+base/gxgstate.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 10:51:21 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c735180bed16fa7e0525640670a4ee082700b770">c735180bed16fa7e0525640670a4ee082700b770</a>
+<blockquote>
+<p>
+ Change default pdfwrite.params.OPM to be 0<br>
+<br>
+ It is already set this way by gs distillerparams, but this makes it<br>
+ match to make it easier for pdfi.<br>
+<br>
+ (This is just a hack at this point, need a general solution for pdfi)<br>
+<br>
+devices/vector/gdevpsdf.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-16 09:15:34 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=630d427ab701c582c576a54f2b02f44ddae4a3f6">630d427ab701c582c576a54f2b02f44ddae4a3f6</a>
+<blockquote>
+<p>
+ Bug 702560: Honour PDFSTOPONERROR with broken form dict<br>
+<br>
+ Commit 409db64c5519 added support for form XObject dictionaries with a /Contents<br>
+ key for the content stream, rather than the form dict being the stream dict.<br>
+<br>
+ As that is contrary to the spec, this commit makes that case trigger an error<br>
+ when -dPDFSTOPONERROR is used.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-16 08:14: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=409db64c55198b0126c4afebd74eb26d8d7d57ed">409db64c55198b0126c4afebd74eb26d8d7d57ed</a>
+<blockquote>
+<p>
+ Bug 702560: Cope with (broken) form with &quot;Contents&quot;<br>
+<br>
+ The file for this bug has a form which contains a /Contents key for the content<br>
+ stream, rather than the /Form dictionary being a stream dictionary itself.<br>
+<br>
+ This is contrary to the spec, but Acrobat displays it without complaint.<br>
+<br>
+ Note: Acrobat pre-flight lists the resource to reference the form object<br>
+ as &quot;missing&quot;, and yet renders the form contents anyway.<br>
+<br>
+ Also note: we have a test file in the test suite that also includes &quot;/Contents&quot;<br>
+ key, which is a metadata string, so we have to explicitly check that the value<br>
+ for the &quot;/Contents&quot; key is a stream dictionary.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-14 14:03:41 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c184fcbcc23a196a6d6a26648e52d9f3372ac46b">c184fcbcc23a196a6d6a26648e52d9f3372ac46b</a>
+<blockquote>
+<p>
+ Fix problem introduced by commit 6a3c36f8 with multi-threaded rendering.<br>
+<br>
+ That commit changed the allocation requirement in clist_init_states, but didn't<br>
+ change the corresponding calculation that is supposed to match. Make this a<br>
+ function so that both will agree going forward.<br>
+<br>
+base/gxclist.c<br>
+base/gxclist.h<br>
+base/gxclthrd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-15 15:25:10 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3786f7cb0c4ccf3442beafdf186dbc6835da8ae3">3786f7cb0c4ccf3442beafdf186dbc6835da8ae3</a>
+<blockquote>
+<p>
+ pdfwrite - write FontMatrix for FDArray of a CFF CIDFont<br>
+<br>
+ Bug #702556 &quot;pdfwrite produces an invalid pdf file&quot;<br>
+<br>
+ The description is incorrect here, the PDF file is not invalid. The<br>
+ input PostScript file has been created by converting a PDF file using<br>
+ Poppler.<br>
+<br>
+ The original PDF file contains a number of CIDFonts, all with CFF<br>
+ outlines, and the conversion, for reasons best known to itself, moves<br>
+ the FontMatrix out of the CFF font and into the CIDFont. This isn't<br>
+ possible with PDF, so pdfwrite is forced to move the FontMatrix from<br>
+ the CIDFont back into the CFF font.<br>
+<br>
+ Unfortunately we were not writing the FontMatrix out at the FDArray<br>
+ level of the CFF CIDFont, leading to text 1000 times too large.<br>
+<br>
+ Fixed here by writing the FontMatrix for each font in the FDArray.<br>
+<br>
+devices/vector/gdevpsf2.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-14 13:56:24 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5ec2c321c890114af532cb69e913462d56fd4f4f">5ec2c321c890114af532cb69e913462d56fd4f4f</a>
+<blockquote>
+<p>
+ Fix bug 702559: Patterns + overprint on 16 bit-per-component devicen devices.<br>
+<br>
+ The 'blank_unmasked_bits' needed to handle 16 bit per component (deep) planes.<br>
+<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-14 13:52: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=d23a584e66c103f43a1de2b1d327bcf196c5972a">d23a584e66c103f43a1de2b1d327bcf196c5972a</a>
+<blockquote>
+<p>
+ Fix bug 702557: oknown missing in paint_form check for Group.<br>
+<br>
+ Yet another case where indirect objects were not being handled.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-14 10:42: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=868b71c7df45571088e2ff7fcde666b2534d03f0">868b71c7df45571088e2ff7fcde666b2534d03f0</a>
+<blockquote>
+<p>
+ pdfwrite - move TwoByteToUnicode variable out of union<br>
+<br>
+ Discovered while working on the new PDF interpreter and the test file<br>
+ BCL_Easy.pdf with pdfwrite.<br>
+<br>
+ The TwoByteToUnicode flag was stored in the 'simple' structure in the<br>
+ encoding union. However, that flag is altered by the addition of<br>
+ ToUnicode code points, and that is *not* limited to simple encodings,<br>
+ we also alter it for CIDFonts. If we alter the flag we are, in effect,<br>
+ corrupting members of the union in the case where we are using a<br>
+ different structure in the union.<br>
+<br>
+ This showed up as corrupting the CMapName member of the type0 structure<br>
+ when built for 64-bit. It didn't exhibit with regular Ghostscript<br>
+ because that uses the ToUnicode CMap from the input, and only has a<br>
+ 2-byte Unicode value, the pdfi version currently returns a 4-byte<br>
+ code point.<br>
+<br>
+ Nevertheless, this clearly shows that the potential for problems is<br>
+ there, so to avoid this in future move the flag out of the union and<br>
+ into the main pdf_font_resource_s structure.<br>
+<br>
+devices/vector/gdevpdte.c<br>
+devices/vector/gdevpdtf.c<br>
+devices/vector/gdevpdtf.h<br>
+devices/vector/gdevpdtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-14 10:35: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=bb1fcf280916311b4e38dfc438399aaebf9c8698">bb1fcf280916311b4e38dfc438399aaebf9c8698</a>
+<blockquote>
+<p>
+ Move declaration of a variable to function prolog.<br>
+<br>
+base/simscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-03 06:38:12 -0400
+</strong>
+<br>Ken Brown &lt;kbrown@cornell.edu&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8690eed13e3f343fde0d78a5c9bb0108b7f88d41">8690eed13e3f343fde0d78a5c9bb0108b7f88d41</a>
+<blockquote>
+<p>
+ Bug 702464: Fix Cygwin build<br>
+<br>
+ Commit 327dc89 made many changes to the Cygwin build of ghostscript,<br>
+ most of which were wrong. (They treated Cygwin as though it were<br>
+ Windows.) One of those changes caused the problem on x86_64 Cygwin<br>
+ reported here:<br>
+<br>
+ https://sourceware.org/pipermail/cygwin/2020-June/245070.html<br>
+<br>
+ This patch restores the Cygwin build to its former state and also<br>
+ makes a couple of small tweaks.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-10 09:44:19 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=857b4a2c5cb7d8ce8798caf623134b77e9f5c447">857b4a2c5cb7d8ce8798caf623134b77e9f5c447</a>
+<blockquote>
+<p>
+ Bug 702553: Broken handling of 1.0 TTF cmap case<br>
+<br>
+ A (clearly!) fairly little used path through the TTF cmap table handling code<br>
+ for PDF files had bitrotted to the point where we ended up trying to create<br>
+ a Type 42 font (from a TTF) which didn't have a CharStrings dictionary.<br>
+<br>
+ Specifically, this is the case where we're using a 1.0 cmap table, and the<br>
+ source PDF font's Encoding object does not contain a Differences key.<br>
+<br>
+Resource/Init/gs_ttf.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-09 22:20:32 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=13c04693416d0fbf0d614509cabce71e7399207e">13c04693416d0fbf0d614509cabce71e7399207e</a>
+<blockquote>
+<p>
+ WPF demo: Make changes introduced due to needs of mono project<br>
+<br>
+demos/csharp/windows/ghostnet_wpf_example/MainRender.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainThumbRendering.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/ghostnet_simple_viewer.csproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-09 22:08:08 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=279f4835e1ab58653665e9024aaf58032c0591d7">279f4835e1ab58653665e9024aaf58032c0591d7</a>
+<blockquote>
+<p>
+ Linux Demo Viewer: Pages now rendering.<br>
+<br>
+ AA working. Need to add zoom, page navigation, track down a few<br>
+ crashing issues.<br>
+<br>
+demos/csharp/api/ghostnet.cs<br>
+demos/csharp/linux/gtk_viewer/gtk-gui/gtk_viewer.src.gsOutput.cs<br>
+demos/csharp/linux/gtk_viewer/gtk_viewer.csproj<br>
+demos/csharp/linux/gtk_viewer/src/DocPage.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainRender.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 22:36: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=2260ba90c0e70f38f2fef96baf8b1b972eef2940">2260ba90c0e70f38f2fef96baf8b1b972eef2940</a>
+<blockquote>
+<p>
+ Linux Demo Viewer: StdIO output working<br>
+<br>
+ Thumbnail images created. Need to populate into UI next.<br>
+<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 17:42:56 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fcef740cdba16732a16f83a180404c458a075abc">fcef740cdba16732a16f83a180404c458a075abc</a>
+<blockquote>
+<p>
+ Progress on the UI design.<br>
+<br>
+ Made design similar to what was done for the WPF application.<br>
+ stdio callbacks from GS are working so hopefully will have pages<br>
+ rendered shortly.<br>
+<br>
+demos/csharp/linux/gtk_viewer/gtk-gui/gtk_viewer.src.gsOutput.cs<br>
+demos/csharp/linux/gtk_viewer/gtk_viewer.csproj<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-07 21:54:08 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=057a39eb4e3f859d293c1e98e1005c82da31024c">057a39eb4e3f859d293c1e98e1005c82da31024c</a>
+<blockquote>
+<p>
+ csharp/linux: Initial commit of mono gtk csharp project<br>
+<br>
+ Many of the files are variants of the wpf project from windows.<br>
+ These projects share the same API files to ghostscript, but the<br>
+ mono UI related objects have to change since mono does not support<br>
+ WPF. This is just an initial commit to get something in place.<br>
+<br>
+demos/csharp/linux/gs_mono.sln<br>
+demos/csharp/linux/gtk_viewer/Properties/AssemblyInfo.cs<br>
+demos/csharp/linux/gtk_viewer/gtk-gui/generated.cs<br>
+demos/csharp/linux/gtk_viewer/gtk-gui/gtk_viewer.src.gsOutput.cs<br>
+demos/csharp/linux/gtk_viewer/gtk-gui/gui.stetic<br>
+demos/csharp/linux/gtk_viewer/gtk_viewer.csproj<br>
+demos/csharp/linux/gtk_viewer/src/DocPage.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainRender.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainThumbRendering.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainWindow.cs<br>
+demos/csharp/linux/gtk_viewer/src/MainZoom.cs<br>
+demos/csharp/linux/gtk_viewer/src/Program.cs<br>
+demos/csharp/linux/gtk_viewer/src/TempFile.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsIO.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.cs<br>
+demos/csharp/linux/gtk_viewer/src/gsOutput.xaml.cs<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-09 11: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=e88ba0a1ee23911172222ee6ad7c2e3c9ea205a4">e88ba0a1ee23911172222ee6ad7c2e3c9ea205a4</a>
+<blockquote>
+<p>
+ Fix Coverity issue: sizeof(byte **) vs sizeof(byte *)<br>
+<br>
+ *Apparently* sizeof(byte *) and sizeof(byte **) might be different.<br>
+ I can't think of a case where that's true, but I am indeed using<br>
+ the wrong one.<br>
+<br>
+ Fix it here.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 16:41: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=da755f7ee3da900a504a3265c64fb08c93a41eac">da755f7ee3da900a504a3265c64fb08c93a41eac</a>
+<blockquote>
+<p>
+ Bug 688990: Reimplementation of image mask scaling.<br>
+<br>
+ Aiming for a better match to Adobe's reference implementation.<br>
+<br>
+ Patch supplied by Peter Cherepanov. Many Thanks!<br>
+<br>
+base/lib.mak<br>
+base/simscale.c<br>
+base/simscale.h<br>
+base/simscale_foo.c<br>
+base/simscale_foo.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 18:52: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=cc596ad6dd030f192416086370bd54e8059589d4">cc596ad6dd030f192416086370bd54e8059589d4</a>
+<blockquote>
+<p>
+ lgtm.com issue: Fix potential overflow in mkromfs.<br>
+<br>
+ We know that we only ever call this splitting the ROMFS into 4,<br>
+ so it's never going to overflow, but lgtm.com can't know that.<br>
+ Add a check to keep the number down to a sane size to keep it<br>
+ happy.<br>
+<br>
+base/mkromfs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 15:50: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=b0c208a555ed89139395a6ed0d8dce70d81cde09">b0c208a555ed89139395a6ed0d8dce70d81cde09</a>
+<blockquote>
+<p>
+ Bug 691452: Add missing dependencies.<br>
+<br>
+ Patch from Peter Cherepanov. Many thanks!<br>
+<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 07:22:06 -0700
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=000de1419225213fce7d06de0f1982cd79e4e141">000de1419225213fce7d06de0f1982cd79e4e141</a>
+<blockquote>
+<p>
+ Update CAL makefile to pass correct compiler flags.<br>
+<br>
+base/cal.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-08 00:03: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=79d9c45db7ce0ee075254bbfa8235d2996869fb1">79d9c45db7ce0ee075254bbfa8235d2996869fb1</a>
+<blockquote>
+<p>
+ Bug 702517: Fix overenthusiastic checking for NULL.<br>
+<br>
+ Patch from Peter Cherepanov. Many thanks.<br>
+<br>
+devices/gdevmgr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 17:16:10 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6c5a246ebe922e94df2e5f5cdd7d01ca86762cb3">6c5a246ebe922e94df2e5f5cdd7d01ca86762cb3</a>
+<blockquote>
+<p>
+ Rename displaydev_test to api_test.<br>
+<br>
+ Move it into the new &quot;demos&quot; directory, and expand it to cope<br>
+ with testing run_string too.<br>
+<br>
+demos/c/ReadMe.txt<br>
+demos/c/api_test.c<br>
+demos/c/api_test.vcxproj<br>
+demos/c/api_test.vcxproj.filters<br>
+toolbin/displaydev_test.vcxproj.filters<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-07 12:55:42 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=db8f3a277d0ae43cf5cffea16ee1c9149d4eb3de">db8f3a277d0ae43cf5cffea16ee1c9149d4eb3de</a>
+<blockquote>
+<p>
+ Extend gpdl to cope with being fed PDFs via run_string.<br>
+<br>
+ More generally, we can now cope with any language implementation<br>
+ requesting that data being fed in via run_string should be<br>
+ buffered up and then fed in via run_file instead, so formats that<br>
+ require seeking can cope.<br>
+<br>
+ We add a new gs_error_NeedFile error code. If a run_string<br>
+ implementation returns this, the calling gpdl layers captures<br>
+ the unused incoming data into an internal &quot;buffered_file&quot; object.<br>
+<br>
+ When we reach run_string_end, we then register a new filing<br>
+ system with gs_add_fs() to allow this buffered file to be found.<br>
+ We then run that file using the standard run_file mechanism.<br>
+ Then we remove that filing system, and free the buffered file.<br>
+<br>
+ The only implementation that currently uses this is the<br>
+ postscript one, which is amended to skip over leading whitespace<br>
+ and comments, looking for a PDF header.<br>
+<br>
+ XPS already has a mechanism in it for collating data<br>
+ into a file using run_string, but this was broken (due to<br>
+ process_eof not being called). Fixed here, but still using its<br>
+ own mechanism rather than gs_error_NeedFile for now.<br>
+<br>
+base/gserrors.h<br>
+doc/GPDL.htm<br>
+gpdl/psitop.c<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-07 16:09: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=6eb675b18b8234256bb37190fd35243eab369e36">6eb675b18b8234256bb37190fd35243eab369e36</a>
+<blockquote>
+<p>
+ Tweak gsapi for gpdl to match gs.<br>
+<br>
+ The gpdl implementation of gsapi differed in the &quot;run_string&quot;<br>
+ arguments from the original gs implementation. Add the extra<br>
+ parameters here to make the two look identical.<br>
+<br>
+doc/GPDL.htm<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+pcl/pl/realmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-07 14:56: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=24c9b3834b29e8a0eaa6dd78712ef1306049b479">24c9b3834b29e8a0eaa6dd78712ef1306049b479</a>
+<blockquote>
+<p>
+ Tweak gp_file veneers.<br>
+<br>
+ This allows for implementations to have more NULL function pointers,<br>
+ and hence to be simpler.<br>
+<br>
+base/gp.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-06 11:04:52 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0a9ec5e7fa81cf3f67f001bfcac2575611e49d85">0a9ec5e7fa81cf3f67f001bfcac2575611e49d85</a>
+<blockquote>
+<p>
+ Fix bug 702530: Spurious circular reference error message from PDF interpreter<br>
+<br>
+ The safe_recursive function comments described popping the copy of the dict<br>
+ made for recursion (to allow multiple references at the same level), but the<br>
+ code did not implement that.<br>
+<br>
+Resource/Init/pdf_base.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-06 15:44: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=f2e2e3c1bb24887bce699821a3da1f8b3bbd12be">f2e2e3c1bb24887bce699821a3da1f8b3bbd12be</a>
+<blockquote>
+<p>
+ Remove the dmprt device<br>
+<br>
+ It has code which triggers security warnings, it has not built as it stands<br>
+ since before 8.71 (so &gt;10 years) and has significant (segfaulting) problems<br>
+ when modified to successfully build.<br>
+<br>
+ Since it cannot have been used (and no one has complained) in over ten years,<br>
+ we're removing it.<br>
+<br>
+contrib/contrib.mak<br>
+contrib/japanese/dmp_init.ps<br>
+contrib/japanese/dmp_site.ps<br>
+contrib/japanese/doc/gdevdmpr.txt<br>
+contrib/japanese/dviprlib.c<br>
+contrib/japanese/escp_24.src<br>
+contrib/japanese/gdevdmpr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 13:52: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=61cbcfe94512ebd9316ff3c0d7ffaee06e226bc2">61cbcfe94512ebd9316ff3c0d7ffaee06e226bc2</a>
+<blockquote>
+<p>
+ Add/fix documentation for .begintransparencymaskgroup/.endtransparencymask<br>
+<br>
+doc/Language.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-06 12:13: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=0296da79f0f215322a1445c35f7343344806c08b">0296da79f0f215322a1445c35f7343344806c08b</a>
+<blockquote>
+<p>
+ Fix spot color handling of display device.<br>
+<br>
+ The device icc_struct needs to be initialised before we try to<br>
+ use it.<br>
+<br>
+devices/devs.mak<br>
+devices/gdevdsp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-07 12:51: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=2398bdb09fa80498a57ab54815e85d326506b509">2398bdb09fa80498a57ab54815e85d326506b509</a>
+<blockquote>
+<p>
+ Fix silly typo in gs_remove_fs.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-07 12:51: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=dbe3a897df38c94c0c2af5b6ad5c4ee9a1c0ffe5">dbe3a897df38c94c0c2af5b6ad5c4ee9a1c0ffe5</a>
+<blockquote>
+<p>
+ Add a 'const' to gp_file_alloc.<br>
+<br>
+ This enables it to be called in some circumstances where we only<br>
+ have a const gs_memory_t.<br>
+<br>
+base/gp.h<br>
+base/gpmisc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-06 12:35: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=87be031c6039d5f6d9bc960a9aefd442dded3e92">87be031c6039d5f6d9bc960a9aefd442dded3e92</a>
+<blockquote>
+<p>
+ Fix Coverity 360266: Unchecked return value.<br>
+<br>
+ By the time we get here, we are guaranteed to be fatally failing.<br>
+ Checking the return value can't alter what we are returning.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 18:37: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=8549a5c5af77ee512dea0a43a82bf7612a861237">8549a5c5af77ee512dea0a43a82bf7612a861237</a>
+<blockquote>
+<p>
+ Fix stray change in doc/API.htm<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 18:29: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=aafbb943f1298a75058485fc0c277edfd7ef4048">aafbb943f1298a75058485fc0c277edfd7ef4048</a>
+<blockquote>
+<p>
+ Fixes for displaydev_test.<br>
+<br>
+ In 64bit builds, we expect the display device to fail when asked<br>
+ to align to a multiple of 4.<br>
+<br>
+ Also, correct detection of failures.<br>
+<br>
+toolbin/displaydev_test.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 17:14: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=5410cc1d64a2082dcd0e037d1ccefdbf68894198">5410cc1d64a2082dcd0e037d1ccefdbf68894198</a>
+<blockquote>
+<p>
+ Fix infinite recursion in display device.<br>
+<br>
+ If the device was a clist device, and was opened/closed repeatedly,<br>
+ the wrong 'base' dev_spec_op could be stored.<br>
+<br>
+devices/gdevdsp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 15:45: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=c2b0b6d61e62b9d490e9e3fcc24efb64c06f2a14">c2b0b6d61e62b9d490e9e3fcc24efb64c06f2a14</a>
+<blockquote>
+<p>
+ Fix gpdl run_string API to properly detect language.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-03 12:06: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=a3cf573c2e72daf75c64d7b3a09e544f6e027244">a3cf573c2e72daf75c64d7b3a09e544f6e027244</a>
+<blockquote>
+<p>
+ pdfwrite - when copying clip path, cater for differing allocators<br>
+<br>
+ This is for pdfi when run under Ghostscript; the pdfwrite device keeps<br>
+ a copy of the current clip path when it writes it to the output. But<br>
+ the code (gx_cpath_to_path) relies on gx_path_asign_preserve and that<br>
+ function specifically states that the allocators for the two paths<br>
+ must be the same.<br>
+<br>
+ In the case of pdfi under GS, the path is created using the pdfi memory<br>
+ allocator (its created by the pdfi interpreter), but the copied path<br>
+ is allocated using the device allocator, which is derived from the<br>
+ PostScript interpreter. The result of this is that pdfwrite can still<br>
+ be pointing to a path which was allocated by pdfi and can disappear<br>
+ when the pdfi interpreter exits, leaving a dangling pointer. Since the<br>
+ path is subject to garbage collection (allocated with the PostScript<br>
+ interpreter allocator) this causes a crash as soon as any kind of<br>
+ grbage collection takes place.<br>
+<br>
+ Fortunately there's a simple function call 'gx_path_unshare' which will<br>
+ copy the segments after assignment and we can check the allocators to<br>
+ see if they are the same and us this function if they are not.<br>
+<br>
+ Fixes the remaining (currently) seg faults with pdf when running inside<br>
+ Ghostscript.<br>
+<br>
+devices/vector/gdevpdfd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-02 15:38:27 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=20757da77706d4227cd7268113bbffbe7716a6fc">20757da77706d4227cd7268113bbffbe7716a6fc</a>
+<blockquote>
+<p>
+ Introduce demos folder with csharp and python API examples<br>
+<br>
+ Current csharp demo shows creation of wpf viewer. Goal will<br>
+ be to next show a Linux viewer using mono and the same API file.<br>
+ Python demo/API brought over from toolbin.<br>
+<br>
+demos/csharp/api/ghostapi.cs<br>
+demos/csharp/api/ghostnet.cs<br>
+demos/csharp/windows/ghostnet.sln<br>
+demos/csharp/windows/ghostnet_wpf_example/About.xaml<br>
+demos/csharp/windows/ghostnet_wpf_example/About.xaml.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/App.config<br>
+demos/csharp/windows/ghostnet_wpf_example/App.xaml<br>
+demos/csharp/windows/ghostnet_wpf_example/App.xaml.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/DocPage.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainPrint.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainRender.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainThumbRendering.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml<br>
+demos/csharp/windows/ghostnet_wpf_example/MainWindow.xaml.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/MainZoom.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/PrintControl.xaml<br>
+demos/csharp/windows/ghostnet_wpf_example/PrintControl.xaml.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/Properties/AssemblyInfo.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/Properties/Resources.Designer.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/Properties/Resources.resx<br>
+demos/csharp/windows/ghostnet_wpf_example/Properties/Settings.Designer.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/Properties/Settings.settings<br>
+demos/csharp/windows/ghostnet_wpf_example/TempFile.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/XPSprint.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/ghostnet_simple_viewer.csproj<br>
+demos/csharp/windows/ghostnet_wpf_example/gsIO.cs<br>
+demos/csharp/windows/ghostnet_wpf_example/gsOutput.xaml<br>
+demos/csharp/windows/ghostnet_wpf_example/gsOutput.xaml.cs<br>
+demos/python/gsapi.py<br>
+demos/python/gsapiwrap.py<br>
+demos/python/jlib.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-02 15:02: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=ade938cc74549ffc8d58b0c1fd5e9be7f5429855">ade938cc74549ffc8d58b0c1fd5e9be7f5429855</a>
+<blockquote>
+<p>
+ Add missing methods to API.htm<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-02 12:21:33 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=62d83a31f7f20910eeb5938873c62e890c9d2b3a">62d83a31f7f20910eeb5938873c62e890c9d2b3a</a>
+<blockquote>
+<p>
+ Make -dSimulateOverprint=false work with transparency<br>
+<br>
+ When the source file has transparency and overprint, avoid doing<br>
+ the compatible overprint mode if overprint is specified to<br>
+ be disabled. Thanks to Ray Johnston for helping with the PS<br>
+ in pdf_main.ps<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 10:52:19 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=00e7143ce97a3d983a223c7d69f74f995d8e267d">00e7143ce97a3d983a223c7d69f74f995d8e267d</a>
+<blockquote>
+<p>
+ Pass memory to clist_make_accum_device()<br>
+<br>
+ Change function args to propagate the memory type of the graphics<br>
+ state to clist_make_accum_device to create device with it.<br>
+<br>
+ Also, make sure the dev-&gt;bandlist_memory (used for freeing 'data') is<br>
+ allocated in the mem-&gt;non_gc_memory instead of the parent device's<br>
+ (fixes crash in gpdl/pcl that was introduced).<br>
+<br>
+ That will mean pdfi and gs/pdfi get non-gc, and gs gets gc.<br>
+<br>
+ There was a bug in gs/pdfi where the clist-pattern device was in gc<br>
+ memory and it was getting freed when pdfi was still using it.<br>
+<br>
+ This should fix a segfault in: tests_private/comparefiles/Bug688396.pdf<br>
+<br>
+base/gxclist.c<br>
+base/gxclist.h<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-01 17:16:41 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=60d740278fc7f7b719482ae0dd4a59743025444d">60d740278fc7f7b719482ae0dd4a59743025444d</a>
+<blockquote>
+<p>
+ toolbin/gsapi.py: fixed stray ';' character.<br>
+<br>
+toolbin/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-01 14:00:17 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=07047636c74555d22c87fd7f05535b57e681a35d">07047636c74555d22c87fd7f05535b57e681a35d</a>
+<blockquote>
+<p>
+ toolbin/gsapi.py: added example of how to build .so and run.<br>
+<br>
+toolbin/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-07-01 13:59:56 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9900ecb043f3c138160f7d78d32af9967ea09b64">9900ecb043f3c138160f7d78d32af9967ea09b64</a>
+<blockquote>
+<p>
+ devices/vector/gdevtxtw.c: fixed build if TRACE_TXTWRITE defined.<br>
+<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-30 15:38:24 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f3c50e50d6ffd9b4fd98f0215e78d7659bf0bdc3">f3c50e50d6ffd9b4fd98f0215e78d7659bf0bdc3</a>
+<blockquote>
+<p>
+ Whitespace fixes<br>
+<br>
+doc/API.htm<br>
+psi/dw32c.def<br>
+psi/dw64c.def<br>
+psi/dwmain32.def<br>
+psi/dwmain64.def<br>
+psi/dwsetup.def<br>
+psi/dwuninst.def<br>
+psi/gsdll32.def<br>
+psi/gsdll32metro.def<br>
+psi/gsdll64.def<br>
+psi/gsdll64metro.def<br>
+psi/gsdllARM32metro.def<br>
+psi/gsos2.def<br>
+toolbin/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-30 13:58: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=a1cf59357b6945fdac87afa76e2afd56bb3c1206">a1cf59357b6945fdac87afa76e2afd56bb3c1206</a>
+<blockquote>
+<p>
+ Slight tweak to the FAPI API<br>
+<br>
+ The previous Font API update had a slight mistake: for non-CID fonts, we'd pass<br>
+ GS_NO_GLYPH in place of the actually CID/GID into the &quot;fapi_set_cache&quot; call<br>
+ back.<br>
+<br>
+ That worked fine because, for Postscript (and currrent PDF) non-CID fonts use<br>
+ the glyph name, not a character code, and the other interpreters do not<br>
+ need a character for that callback.<br>
+<br>
+ We'll now pass the glyph index for non-CID fonts, and the<br>
+ glyph index + GS_MIN_CID_GLYPH (as is conventional for gs) - and that allows<br>
+ the fapi_set_cache call back to differentiate between CID and non-CID fonts.<br>
+<br>
+ For the new PDF interpreter (pdfi) we actually do need the character code, to<br>
+ correctly handle Truetype fonts. So fixing the graphics lib and associated code<br>
+ on master, so the pdfi branch can also work.<br>
+<br>
+base/gxfapi.c<br>
+psi/zfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-30 09:27: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=71d0b343a3f20d298b9abbe6261bcb01ecb48dcb">71d0b343a3f20d298b9abbe6261bcb01ecb48dcb</a>
+<blockquote>
+<p>
+ Improve eps2write<br>
+<br>
+ Bug #702521 &quot;eps2write hygiene enhancements&quot;<br>
+<br>
+ If processing a multi-page input file, throw an error on the second<br>
+ page and write a message explaining the problem.<br>
+<br>
+ Encapsulate the 'global configuration' switches which affect the prolog<br>
+ processing, and are written from the ps2write device, in a dictionary<br>
+ because EPS files should not affect the current dictionary. Read those<br>
+ parameters back from the dictionary when establishing the EPS file's<br>
+ own dictionary, ensuring that a dictionary is actually present.<br>
+<br>
+ Use the global configuration to determine whether to install a custom<br>
+ error handler. If its an EPS file, then don't.<br>
+<br>
+devices/vector/gdevpdf.c<br>
+devices/vector/gdevpdfu.c<br>
+devices/vector/opdfread.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-29 12:04:05 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d286e365c298b30fc8f0d74979779c18cf4d28f5">d286e365c298b30fc8f0d74979779c18cf4d28f5</a>
+<blockquote>
+<p>
+ A few more changes to the API.htm docs.<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-29 10:51: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=50a60d8421f3e64828790ec4588727fdc41c4d58">50a60d8421f3e64828790ec4588727fdc41c4d58</a>
+<blockquote>
+<p>
+ Fix minor issues in API.htm<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-29 13:15:35 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=95e5e879c3a3fea42a97e942b53a6914ed7ccfc2">95e5e879c3a3fea42a97e942b53a6914ed7ccfc2</a>
+<blockquote>
+<p>
+ int_gstate_alloc() error handling<br>
+<br>
+ If we fail to allocate even the graphics libaray graphics state, bail out<br>
+ immediately.<br>
+<br>
+psi/zgstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-23 09:22: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=ea7818b8bb62b1df4f81e4dc752ccda54cc3d59c">ea7818b8bb62b1df4f81e4dc752ccda54cc3d59c</a>
+<blockquote>
+<p>
+ UMR fix: parameters for overprint compositor<br>
+<br>
+ Discovered while investigating (red herring) indeterminacy problems with<br>
+ eci_altona-test-suite-v2_technical2_x4.pdf<br>
+<br>
+ Reported by both valgrind and MSAN.<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-26 20:05: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=71962c6ed1e0bdf41e604a8014b93889f9d07ee5">71962c6ed1e0bdf41e604a8014b93889f9d07ee5</a>
+<blockquote>
+<p>
+ Squash warnings seen in Windows 64 bit build.<br>
+<br>
+base/gp_msprn.c<br>
+base/gp_mswin.c<br>
+base/gp_winfs.c<br>
+base/gsalloc.c<br>
+base/gsmemory.c<br>
+base/gxclist.c<br>
+base/gxi12bit.c<br>
+base/gxicolor.c<br>
+devices/gdevcdj.c<br>
+devices/gdevupd.c<br>
+devices/vector/gdevpdtb.c<br>
+ijs/ijs_exec_win.c<br>
+psi/idict.c<br>
+psi/inamedef.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-26 19:11: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=b68604731130f5493d2ecd5ae627b1bae9624c64">b68604731130f5493d2ecd5ae627b1bae9624c64</a>
+<blockquote>
+<p>
+ Update Makefile for new version of tesseract.<br>
+<br>
+base/tesseract.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-26 19:08: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=ad2418e6dc8afa7c7278d6687c77791026f98228">ad2418e6dc8afa7c7278d6687c77791026f98228</a>
+<blockquote>
+<p>
+ Fix callouts being allocated/deallocated with the wrong gs_memory_t.<br>
+<br>
+ This didn't matter for gs, but for gpdl, it could cause problems<br>
+ on shutdown.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-02 16:29:32 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=135f2ceaa84fb0a058ba781a451c65b95230e49a">135f2ceaa84fb0a058ba781a451c65b95230e49a</a>
+<blockquote>
+<p>
+ Have bmpcmp return EXIT_FAILURE if it can not compare<br>
+<br>
+toolbin/bmpcmp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-26 16:15: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=c022554c30f680c464f1026dc96c2450867da73c">c022554c30f680c464f1026dc96c2450867da73c</a>
+<blockquote>
+<p>
+ Remove displaydev_test project from GhostPDL.sln.<br>
+<br>
+ It should never have been added in git. I added it locally and<br>
+ then it slipped through and got committed by accidently.<br>
+<br>
+windows/GhostPDL.sln<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-26 16:12: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=622f4ea8ecc9b677165121d0c093632b9ea00c67">622f4ea8ecc9b677165121d0c093632b9ea00c67</a>
+<blockquote>
+<p>
+ Don't let psapi_new_instance trample libctx-&gt;stdio functions.<br>
+<br>
+ For GS builds this doesn't matter, as psapi_new_instance is called<br>
+ before users of the API get to set their own versions. With GPDL<br>
+ builds, the call to psapi_new_instance is deferred to the point<br>
+ where the API user may have already set their own functions.<br>
+<br>
+psi/psapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-26 16:10:42 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f886898e23483e82866148d6b564faf281490ba">4f886898e23483e82866148d6b564faf281490ba</a>
+<blockquote>
+<p>
+ Avoid using bool in gslibctx.h.<br>
+<br>
+ Ghostscript relies on bool being 'int'. Unfortunately, this header<br>
+ is included from various C++ files that use bool as char. Accordingly<br>
+ the easiest fix is to avoid using bool in these structure definitions.<br>
+<br>
+base/gslibctx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 12:29:01 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=969370ba1dbcf767bae97fda6a3c066b04439c76">969370ba1dbcf767bae97fda6a3c066b04439c76</a>
+<blockquote>
+<p>
+ Fix refcnt's on the colorspace in clist<br>
+<br>
+ In the case where the colorspace was modified (read_set_color_space)<br>
+ there was a memory leak.<br>
+<br>
+ This was because the old code just freed pcs, but if the color had<br>
+ changed, then gs_state.color[0].color_space and [1].color_space are no<br>
+ longer the same. This way we track the references to them separately<br>
+ and free them separately.<br>
+<br>
+ pcs doesn't get its own ref, because it is always the same as<br>
+ gs_gstate.color[0].color_space.<br>
+<br>
+ This fixes memory leaks that only show up in the case that the memory<br>
+ is not garbage-collected, such as in pdfi.<br>
+<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 19:15: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=305b9fa7334fc0cd1f45585b8449b0c2c7517559">305b9fa7334fc0cd1f45585b8449b0c2c7517559</a>
+<blockquote>
+<p>
+ Fix leak of non-deregistered callback handlers on shutdown.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 17:08: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=59bd5d853cec55497486ad4fb2f253a92e4da3cc">59bd5d853cec55497486ad4fb2f253a92e4da3cc</a>
+<blockquote>
+<p>
+ Fix typos in GPDL.htm.<br>
+<br>
+doc/GPDL.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 16:39: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=1615ace33ebb93d8c5faae8a440ab96f06f5f0fe">1615ace33ebb93d8c5faae8a440ab96f06f5f0fe</a>
+<blockquote>
+<p>
+ Add documentation for GPDL.<br>
+<br>
+doc/GPDL.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 15:13: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=35f6a9d9e2838069b5ba250cf26d016bc5ad3635">35f6a9d9e2838069b5ba250cf26d016bc5ad3635</a>
+<blockquote>
+<p>
+ GPDL whitespace fixes.<br>
+<br>
+pcl/pl/pjparsei.c<br>
+pcl/pxl/pxtop.c<br>
+xps/xpstop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 15:12: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=a9bd94535682bd75bbaa18da42129e49046f3838">a9bd94535682bd75bbaa18da42129e49046f3838</a>
+<blockquote>
+<p>
+ Remove unused remnants from gpdl/pngtop.c<br>
+<br>
+gpdl/pngtop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-25 15:12:26 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f5b28fa033b4837f3cc28943f5c022bf48ca39d4">f5b28fa033b4837f3cc28943f5c022bf48ca39d4</a>
+<blockquote>
+<p>
+ GPDL: Remove &quot;min_input_size&quot; from pl_interp_characteristics_t<br>
+<br>
+ Never used.<br>
+<br>
+gpdl/jbig2top.c<br>
+gpdl/jp2ktop.c<br>
+gpdl/jpgtop.c<br>
+gpdl/pngtop.c<br>
+gpdl/psitop.c<br>
+gpdl/pwgtop.c<br>
+gpdl/tifftop.c<br>
+pcl/pcl/pctop.c<br>
+pcl/pl/pjparsei.c<br>
+pcl/pl/pltop.h<br>
+pcl/pxl/pxtop.c<br>
+xps/xpstop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-23 10:56:22 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ae5bcb6df4b9aa4337a93d5ce8c8152ea4494941">ae5bcb6df4b9aa4337a93d5ce8c8152ea4494941</a>
+<blockquote>
+<p>
+ Simple test app for driving the display device.<br>
+<br>
+toolbin/displaydev_test.c<br>
+toolbin/displaydev_test.vcxproj<br>
+toolbin/displaydev_test.vcxproj.filters<br>
+windows/GhostPDL.sln<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-16 14:31: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=eed3bad23510e59278bdaa5f7d0ab01fc1a1c21b">eed3bad23510e59278bdaa5f7d0ab01fc1a1c21b</a>
+<blockquote>
+<p>
+ Display device revamp.<br>
+<br>
+ Move display device over to being based upon a &quot;clist_mutatable&quot;<br>
+ device. Existing claimants won't see any difference.<br>
+<br>
+ New claimants can provide additional callbacks so they can drive<br>
+ it in 'rectangle request' mode.<br>
+<br>
+devices/gdevdsp.c<br>
+devices/gdevdsp.h<br>
+devices/gdevdsp2.h<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-12 13:00: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=04e937862eaa7e66bb9a87109874112cd354bf6f">04e937862eaa7e66bb9a87109874112cd354bf6f</a>
+<blockquote>
+<p>
+ Remove clist &quot;is_printer&quot; field.<br>
+<br>
+ Currently, the clist has an &quot;is_printer&quot; field, which is used to<br>
+ tell it how to forward dev_spec_op calls. This seems evil to me;<br>
+ a base class should not really need to know what class is being<br>
+ derived from it to know how to behave.<br>
+<br>
+ Instead, introduce a function pointer that says where<br>
+ dev_spec_ops should be forwarded to.<br>
+<br>
+base/gdevprn.c<br>
+base/gxclist.c<br>
+base/gxclist.h<br>
+base/gxclrect.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-11 12:47: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=f697ed393a3f0cfffbf82b1f679cf6667b06611c">f697ed393a3f0cfffbf82b1f679cf6667b06611c</a>
+<blockquote>
+<p>
+ Refactor 'clist mutatable devices' from prn ones.<br>
+<br>
+ Devices that have to mutate to be clist ones need to be setup<br>
+ in a particular way. After the standard gx_device header, they<br>
+ are padded out to a large enough size that the clist header<br>
+ fields can fit in. Then the device specific fields follow.<br>
+<br>
+ gdev_prn devices are the standard example of this. In order<br>
+ to more easily allow other devices to work in the same way,<br>
+ we refactor the padding/clist specific fields out into new<br>
+ macros.<br>
+<br>
+base/gdevprn.c<br>
+base/gdevprn.h<br>
+base/gxclist.c<br>
+base/gxclist.h<br>
+devices/gdevbit.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-11 12:04: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=aae141b7849700a3b99a9222e09ed6ebaff5c61b">aae141b7849700a3b99a9222e09ed6ebaff5c61b</a>
+<blockquote>
+<p>
+ Refactor gdev_space_params slightly.<br>
+<br>
+ The gdev_space_params structure is also known as gdev_prn_space_params,<br>
+ which is slightly misleading as there is nothing prn specific about<br>
+ it.<br>
+<br>
+ Rename all uses of gdev_prn_space_params within the code to be<br>
+ gdev_space_params. Leave gdev_prn_space_params defined as a typedef<br>
+ so that any customer code will not be affected.<br>
+<br>
+ Rename compare_gdev_prn_space_params to be gdev_space_params_cmp<br>
+ to better reflect its non-prn-specific nature. Make it non-static<br>
+ and move it to gsdevice.c.<br>
+<br>
+base/gdevprn.c<br>
+base/gdevprn.h<br>
+base/gsdevice.c<br>
+base/gxdevcli.h<br>
+cups/gdevcups.c<br>
+devices/gdevcdj.c<br>
+devices/gdevijs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-22 10:06: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=8f40f4b1aca7a7f75ecf83469892478311ca21e1">8f40f4b1aca7a7f75ecf83469892478311ca21e1</a>
+<blockquote>
+<p>
+ Update Planar device to allow for easy &quot;interleaved&quot; operation.<br>
+<br>
+base/gdevmem.c<br>
+base/gdevmpla.c<br>
+base/gdevmpla.h<br>
+base/gxdevmem.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-19 19:04:53 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=22f5f898d49443df82c13bd683fbff61005485c2">22f5f898d49443df82c13bd683fbff61005485c2</a>
+<blockquote>
+<p>
+ Improve get_bits_rectangle for planar case.<br>
+<br>
+ The implementation of get_bits_rectangle to read planar data from<br>
+ a planar device, only implements GB_RETURN_POINTER. If this isn't<br>
+ in the request (i.e. the caller uses GB_RETURN_COPY to get a copy<br>
+ of the data in its own buffers), then it cannot cope.<br>
+<br>
+ Here we extend the routine to try to use a GB_RETURN_POINTER<br>
+ request internally, and to copy the returned data into the<br>
+ callers buffers.<br>
+<br>
+ Callers are of course already free to do this operation themselves,<br>
+ but this avoids the needless repetition of the code in every<br>
+ caller.<br>
+<br>
+base/gdevmpla.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-04 19:27: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=4438e3e5bc4dfc9e46fc86d86d912171ec582a4e">4438e3e5bc4dfc9e46fc86d86d912171ec582a4e</a>
+<blockquote>
+<p>
+ Rework display device &quot;DisplayHandle&quot; passing.<br>
+<br>
+ Add gsapi_{,de}register_callout API. This allows integrators<br>
+ to register handlers for &quot;callouts&quot; from gs devices.<br>
+<br>
+ The first example of such a callout is the display device.<br>
+ Previously, this has relied on the gsapi_set_display_callback<br>
+ API to pass a pointer to a structure into the core, from where<br>
+ it was hackily poked into the display device structure.<br>
+<br>
+ Instead, we now have the display device &quot;callout&quot; to registered<br>
+ handlers to get the structure and the handle to use.<br>
+<br>
+ The legacy API is maintained by the API level implementing<br>
+ a handler to return the display callback in response to the<br>
+ devices callout.<br>
+<br>
+ The code to do the 'poking' of the display device has therefore<br>
+ been removed, and replaced by code that checks to see if an<br>
+ opened device needs reopening after init, if so, opens/closes it.<br>
+<br>
+base/gsdevice.c<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+base/gxdevcli.h<br>
+base/gxdevsop.h<br>
+devices/gdevdsp.c<br>
+devices/gdevdsp.h<br>
+devices/gdevdsp2.h<br>
+doc/API.htm<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.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>
+psi/idisp.c<br>
+psi/idisp.h<br>
+psi/imain.c<br>
+psi/int.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-22 17:04: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=7e427246abb151cde9154783775acfaa776b502e">7e427246abb151cde9154783775acfaa776b502e</a>
+<blockquote>
+<p>
+ Simple Spot color test file.<br>
+<br>
+examples/spots.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-19 15:05: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=63d4ce589086609178160857452dbe3ca6ec0361">63d4ce589086609178160857452dbe3ca6ec0361</a>
+<blockquote>
+<p>
+ Tweak mem device; use NULL rather than 0.<br>
+<br>
+base/gdevmem.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-20 19:08: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=5123260e329a44db83edf4b1378cb7101632f7eb">5123260e329a44db83edf4b1378cb7101632f7eb</a>
+<blockquote>
+<p>
+ Fix Bug 701852. Problems with the plane_extract device.<br>
+<br>
+ First, the plane_begin_typed_image function used the gs_gstate_copy_temp,<br>
+ but since this was allocated as a st_gs_gstate, and the reference counts<br>
+ were not handled (as the comment describes), freeing that object would<br>
+ decrement the ref_counts, causing premature free of objects.<br>
+<br>
+ Remove this dangerous function.<br>
+<br>
+ Change to use gs_gstate_copy so we have a proper gs_gstate structure.<br>
+<br>
+ Using gs_gstate_copy from a clist playback gstate requires that we have<br>
+ client colors and device colors in the color[0] and color[1] elements.<br>
+ Allocate, and initialize these, then free upon exit from clist_playback.<br>
+<br>
+ Also, the mem device underlying the plane_extract device needs to be<br>
+ retained so that it is not prematurely freed.<br>
+<br>
+base/gdevplnx.c<br>
+base/gsgstate.c<br>
+base/gxclrast.c<br>
+base/gxgstate.h<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-24 15:57: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=2d69b876807bb66889e7d89ad39649aded72901e">2d69b876807bb66889e7d89ad39649aded72901e</a>
+<blockquote>
+<p>
+ Tweak gpdl parameter handling.<br>
+<br>
+ Reorder some bits (to make checking against gs easier).<br>
+<br>
+ Add handling for --help (same as -h).<br>
+<br>
+ Add handling for -v. List languages supported in version<br>
+ and usage output.<br>
+<br>
+ Add handling for -q. Rely on the fact that -q is the same as -dQUIET.<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-24 13:45:30 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8433ecd5c9bee10a767293c886644fc91f6d7d4d">8433ecd5c9bee10a767293c886644fc91f6d7d4d</a>
+<blockquote>
+<p>
+ Fix gs command line parsing to handle --unknown<br>
+<br>
+ Previously &quot;--unknown&quot; would have been treated like &quot;--&quot;.<br>
+<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-23 16:34:14 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a50c9e8d1819c5273a5f6d46137dc527382fabb1">a50c9e8d1819c5273a5f6d46137dc527382fabb1</a>
+<blockquote>
+<p>
+ Typo: ps2weite -&gt; ps2write<br>
+<br>
+doc/VectorDevices.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-23 01:36:02 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ea495beece2c461d6561e3d5780d40e77603abc9">ea495beece2c461d6561e3d5780d40e77603abc9</a>
+<blockquote>
+<p>
+ jbig2dec: Free result object upon error allocating referred to segments.<br>
+<br>
+jbig2dec/jbig2_segment.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-23 01:27:25 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e0c1b3c8162898eaa46640cae98be34642704e3c">e0c1b3c8162898eaa46640cae98be34642704e3c</a>
+<blockquote>
+<p>
+ jbig2dec: Fix memory leak caused by failing to allocate arithmetic coding context.<br>
+<br>
+jbig2dec/jbig2_text.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-18 22:02:27 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=554b67a6f3ba5e6c78b35f94ab3f57e96b1a3dee">554b67a6f3ba5e6c78b35f94ab3f57e96b1a3dee</a>
+<blockquote>
+<p>
+ Bug 702505. Annotations with BlendMode (/BM) failed as PDF is opened.<br>
+<br>
+ The check for transparency in the page would fail with 'typecheck' because<br>
+ the operand stack was not properly cleaned once the /BM was detected.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-19 07:55: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=c287d823671769a45c3b0c4a7f16a10fc5e7cb5a">c287d823671769a45c3b0c4a7f16a10fc5e7cb5a</a>
+<blockquote>
+<p>
+ Coverity 359871, 359872: un-init variable and conditional always true<br>
+<br>
+ A return code could remain unset in an otherwise successful completion of the<br>
+ function.<br>
+<br>
+ The new FAPI interface switch from using a signed value of -1 to the &quot;standard&quot;<br>
+ special value of GS_NO_CHAR, and I missed a case of that - since GS_NO_CHAR is<br>
+ positive, the existing test of &gt;= 0 was flagged as always true.<br>
+<br>
+psi/zfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-18 19:34:33 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=57885b1ab496d12d4b6e7ee6a98144e5b040afa1">57885b1ab496d12d4b6e7ee6a98144e5b040afa1</a>
+<blockquote>
+<p>
+ Allow the First/LastPage device page count to be reset<br>
+<br>
+ If we get a DisablePageHandler parameter setting to &quot;false&quot; (i.e. enabling the<br>
+ filtering) then start counting pages from there.<br>
+<br>
+ This allows more intuitive control over extracting specific pages from multiple<br>
+ input files.<br>
+<br>
+base/gdevflp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-18 19:26: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=99d5046ebd2998eb550a66677142186b00071b73">99d5046ebd2998eb550a66677142186b00071b73</a>
+<blockquote>
+<p>
+ Improve PageList device param handling<br>
+<br>
+ The error handing when reading the PageList parameter did not match the rest of<br>
+ the code in gx_default_put_params() - record the error, but carry on.<br>
+<br>
+ Secondly, the original implementation never accounted for the possibility of<br>
+ &quot;unsetting&quot; the PageList. This is possible by sending an empty string.<br>
+<br>
+base/gsdparam.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-16 19:01:25 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e21dc926e2a2214ab8ae830b984057994d139a1c">e21dc926e2a2214ab8ae830b984057994d139a1c</a>
+<blockquote>
+<p>
+ toolbin/gsapi.py: python version of psi/iapi.h, using ctypes.<br>
+<br>
+toolbin/gsapi.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-25 12:50:32 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=74d47eada1e07862c3af7bbb214edd6cf94e0164">74d47eada1e07862c3af7bbb214edd6cf94e0164</a>
+<blockquote>
+<p>
+ In clusterpush, exclude sodebugobj and /build.<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 11:41:30 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e29a4c0affe3e7b66ff19d70e0d2abbc1e7fdf21">e29a4c0affe3e7b66ff19d70e0d2abbc1e7fdf21</a>
+<blockquote>
+<p>
+ Added experimental swig wrapper for gsapi.<br>
+<br>
+toolbin/gsapiwrap.py<br>
+toolbin/jlib.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-21 18:16:28 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=31157290172feea1817d6e69c5064d025a9ab45c">31157290172feea1817d6e69c5064d025a9ab45c</a>
+<blockquote>
+<p>
+ Changed gsapi_set_default_device_list() to take const char* arg, not char*.<br>
+<br>
+ This allows SWIG to work, and also tightens up the API.<br>
+<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-21 14:48:12 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9b953e588fb74a73b997d11412a2878f4cdfcdfb">9b953e588fb74a73b997d11412a2878f4cdfcdfb</a>
+<blockquote>
+<p>
+ Improve test for error in s_stdout_write_process().<br>
+<br>
+ Detect error case where outwrite() incorrectly returns &gt; count, so we can avoid<br>
+ incrementing pr-&gt;ptr beyond bounds of array.<br>
+<br>
+psi/ziodevsc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-09 19:17:55 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fcd9967f93151c49cefe437f6f0bdb1f047d68cc">fcd9967f93151c49cefe437f6f0bdb1f047d68cc</a>
+<blockquote>
+<p>
+ Avoid leak in pcl_process() by calling pcl_complete_raster() if returning error.<br>
+<br>
+ Fixes:<br>
+<br>
+ MEMENTO_FAILAT=18536 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ../tests_private/pcl/pcl5cfts/fts.2180<br>
+<br>
+ pcl/pcl/pcparse.c<br>
+<br>
+pcl/pcl/pcparse.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-04 16:14:20 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0a4f6d6cb3efda8f0b334c0b04457362b00dac1b">0a4f6d6cb3efda8f0b334c0b04457362b00dac1b</a>
+<blockquote>
+<p>
+ Revisions to FAPI (error handling etc).<br>
+<br>
+ A lot of the FAPI methods made no account for errors (i.e. a call to return an<br>
+ unsigned 16 bit value would return an unsigned short int). In various places<br>
+ that meant we ended up using unlikely (in practice, impossible, yet still<br>
+ &quot;valid&quot;) values to indicate an error condition.<br>
+<br>
+ This commit changes those calls to have a conventional Ghostscript &quot;int&quot;<br>
+ return value and (mostly) take pointer to the storage into which they should<br>
+ write their value. We can now return meaninful error codes.<br>
+<br>
+ Secondly, in several places, the FAPI methods and code used integers to store<br>
+ character codes, cids, gids etc. This is less than ideal because we potentially<br>
+ have to handle 4 byte codes (especially for gids), and we also use some<br>
+ special 64 bit values (when available) for specific meanings. There were<br>
+ several workarounds for that, in various places.<br>
+<br>
+ This commit also changes the FAPI API and code to the gs_glyph type for all<br>
+ such values, removing the need for those workarounds<br>
+<br>
+base/fapi_ft.c<br>
+base/fapibstm.c<br>
+base/fapiufst.c<br>
+base/gxfapi.c<br>
+base/gxfapi.h<br>
+base/write_t1.c<br>
+base/write_t2.c<br>
+pcl/pl/plfapi.c<br>
+psi/zfapi.c<br>
+xps/xpsfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-28 11:04:24 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8384e88e02cefa3de112546838a752d7f0a7a5c1">8384e88e02cefa3de112546838a752d7f0a7a5c1</a>
+<blockquote>
+<p>
+ Make gs_char and gs_glyph explicitly 64 bit types<br>
+<br>
+base/gsccode.h<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-16 16:50: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=0339cbecea80d8a835b316b56d1c75a6fb850e52">0339cbecea80d8a835b316b56d1c75a6fb850e52</a>
+<blockquote>
+<p>
+ oss-fuzz 23440: check string lengths for PDF decryption<br>
+<br>
+ to avoid Use-of-uninitialized-value problems.<br>
+<br>
+psi/zpdf_r6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-11 11:54: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=889df15d7c69e1fc90c6491f574352cacf9bc065">889df15d7c69e1fc90c6491f574352cacf9bc065</a>
+<blockquote>
+<p>
+ oss-fuzz 22182: validate glyph offset/length values<br>
+<br>
+ Check if the glyph offset and offset + length are larger than the size of the<br>
+ font stream before we can use it.<br>
+<br>
+psi/zfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-11 11:53:13 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e61000344e40930aa229be5aa5cb9d31958bcb6d">e61000344e40930aa229be5aa5cb9d31958bcb6d</a>
+<blockquote>
+<p>
+ Truetype: Tweak a conditional for signed/unsigned compare<br>
+<br>
+base/gstype42.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-16 14:14:33 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0e50ac9dfcff795ec69cb646eea151bd57f0dd1c">0e50ac9dfcff795ec69cb646eea151bd57f0dd1c</a>
+<blockquote>
+<p>
+ Fix letter `te` in in Nimbus Sans Bold(Italic)<br>
+<br>
+ Update from URW++ (2020/05/26).<br>
+<br>
+ See:<br>
+ https://github.com/ArtifexSoftware/urw-base35-fonts/issues/28<br>
+ https://bugs.launchpad.net/ubuntu/+source/fonts-urw-base35/+bug/1871377<br>
+<br>
+ The glyph outline was much too wide, as well as the advance width being too<br>
+ large.<br>
+<br>
+ Note: a number of test files show tiny rounding differences - this is normal<br>
+ when these fonts get regenerated.<br>
+<br>
+Resource/Font/NimbusSans-BoldItalic<br>
+Resource/Font/NimbusSans-Italic<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-15 18:37:57 +0200
+</strong>
+<br>Till Kamppeter &lt;till.kamppeter@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a189c020b1eb34a043c086b89bbb1caa86cc01f5">a189c020b1eb34a043c086b89bbb1caa86cc01f5</a>
+<blockquote>
+<p>
+ When building on arm64 with gcc, disable libpng's neon optimizations.<br>
+<br>
+ Bug 702486 - Ghostscript 9.52 does not build on arm64<br>
+<br>
+ Ghostscript 9.52 with the libraries which it is including builds<br>
+ perfectly on i386, amd64, s390x, and armhf, but not on ppc64el<br>
+ and arm64. Problem are internal optimizations in the libpng<br>
+ shipped with Ghostscript.<br>
+<br>
+ For ppc64el the problem was already solved after the 9.52<br>
+ release:<br>
+<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1c9bd8e0aa4<br>
+ https://bugs.ghostscript.com/show_bug.cgi?id=702236<br>
+<br>
+ This fix is for arm64 is Based on this and on a similar fix for<br>
+ arm64 on another free software project<br>
+<br>
+ https://github.com/imagemin/optipng-bin/issues/97<br>
+<br>
+ This makes it also build on arm64, but it is not tested whether<br>
+ it still correctly works on arm64 after the fix.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-13 12:11: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=9984b482e5c41427f69be32752b649d44eccd3cd">9984b482e5c41427f69be32752b649d44eccd3cd</a>
+<blockquote>
+<p>
+ More work on gs_get_colorname_string<br>
+<br>
+ Commit 14c70d4e9 was, unfortunately, insufficient for the new PDF<br>
+ interpreter. The gs_lib_ctx pointer does not give us access back to the<br>
+ interpreter context, only to the *PostScript* interpreter name table.<br>
+<br>
+ So instead we now pass a graphics state pointer to<br>
+ gs_get_colorname_string(). This is only used for halftones currently,<br>
+ and even future use seems likely to be limited to objects like colour<br>
+ spaces, which are of course contained in a graphics state, so this<br>
+ seems relatviely future proof.<br>
+<br>
+ For PostScript the graphics state contains a memory_t pointer which we<br>
+ can use to get to the PostScript name table. For the PDF interpreter<br>
+ we already store some state in the 'client_data' of the graphics state<br>
+ and we will extend that to include a pointer to the interpreter context<br>
+ which will allow us to get the string from its name table.<br>
+<br>
+base/gscspace.h<br>
+base/gsncdummy.c<br>
+base/gxht.h<br>
+devices/vector/gdevpdfg.c<br>
+psi/zht2.c<br>
+psi/zht2.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-12 10:37:00 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=14c70d4e91db4b13273a48004fada094e8f8090d">14c70d4e91db4b13273a48004fada094e8f8090d</a>
+<blockquote>
+<p>
+ Improve usage of 'get_colorname_string'<br>
+<br>
+ This function is supplied to a couple of places, and stored. Its<br>
+ purpose is to retrieve a string for a colour plane, given an 'index'.<br>
+ The index is an entry in the interpreter's name table.<br>
+<br>
+ The implementations of get_colorname_string take a memory_t pointer<br>
+ and then use that to get a pointer to the interpreter, which they need<br>
+ because the interpreter context is where the name table is stored.<br>
+<br>
+ The problem with the existing usage is that we were supplying the<br>
+ device's memory_t pointer. However, if the halftone or colour space had<br>
+ been created by a different interpreter to the device (which can happen<br>
+ if we are running the PDF interpreter inside the PostScript interpreter)<br>
+ then the interpreter context would be incorrect.<br>
+<br>
+ We can solve this easily enough by using the colour space or halftone<br>
+ memory pointer. This is much safer since we can reasonably assume that<br>
+ the interpreter which created the object is the same one which stored<br>
+ the colour name in its name table.<br>
+<br>
+base/gsncdummy.c<br>
+devices/vector/gdevpdfg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-10 10:38: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=825d6807a72b68a2faf11fc37f89b1b75967d727">825d6807a72b68a2faf11fc37f89b1b75967d727</a>
+<blockquote>
+<p>
+ Bug 702476: Don't rely on null terminated strings<br>
+<br>
+ gs strings are not necessarily null terminted (especially so when created by the<br>
+ Postscript interpreter). So, when parsing a file name and deciding whether it's<br>
+ a &quot;device&quot; (e.g. &quot;%ram%&quot;) or a device + file name/path, don't rely on the string<br>
+ being null terminate.<br>
+<br>
+base/gsfname.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-08 09:25: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=0ae681ab1fd3475995418d00da1ccfe374f069cc">0ae681ab1fd3475995418d00da1ccfe374f069cc</a>
+<blockquote>
+<p>
+ oss-fuzz 22752: handle broken loca table.<br>
+<br>
+ Previously, the code did not differentiate between an empty loca table, a<br>
+ missing loca table and a broken loca table.<br>
+<br>
+ We'll now do so and, in particular, with a broken loca table (in this case,<br>
+ one with only 1 entry) we'll initialize the single entry to avoid later code<br>
+ accessing unitialized memory.<br>
+<br>
+base/gstype42.c<br>
+base/gxfont42.h<br>
+psi/zfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-08 14:49: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=9e85e7a9518aa19964f1f8d30d3175ef8c3b950f">9e85e7a9518aa19964f1f8d30d3175ef8c3b950f</a>
+<blockquote>
+<p>
+ oss-fuzz 21643: Bounds check a pointer before accessing it.<br>
+<br>
+ In this case, immediately after a buffer refill, (as is &quot;normal&quot; for gs stream<br>
+ buffers) the pointers starts one byte *before* the actual buffer, the state on<br>
+ reentry meant we'd drop straight to trying dereference the pointer.<br>
+<br>
+ This just ensures the pointer gets moved on before we try to use it.<br>
+<br>
+base/seexec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-10 10:16:10 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a4edd8320a5076bb52d1be7c061910b3b78718e0">a4edd8320a5076bb52d1be7c061910b3b78718e0</a>
+<blockquote>
+<p>
+ pdfwrite - don't error out on skipped images<br>
+<br>
+ Bug #702471 &quot;eps to pdf OK in 9.50, but failed in 9.51 and 9.52&quot;<br>
+<br>
+ Some encode filters, in this case DCTEncode, can throw an error on exit<br>
+ (premature EOD) if we never write any data to them. This can happen<br>
+ when pdfwrite sets up to write an image to the output file, but we<br>
+ never actually write the image, because it is being 'skipped'.<br>
+<br>
+ Images can be skipped because they are fully clipped out, unfortunately<br>
+ we can't detect this before we execute begin_typed_image or we could<br>
+ avoid a lot of setup.<br>
+<br>
+ Anyway, when we get to end_image, if we skipped the image then don't<br>
+ take any notice of errors when closing the filters used to write the<br>
+ image data to the PDF file.<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-09 15:14: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=d68f56e25110ba3baf03553c2d1839febc02dbdb">d68f56e25110ba3baf03553c2d1839febc02dbdb</a>
+<blockquote>
+<p>
+ Add docs for missing parts of gsapi.<br>
+<br>
+ Add docs for gsapi_set_param (and update the code to cope with<br>
+ long/int64_t/size_t's in line with the core code).<br>
+<br>
+ Add docs for path control functions.<br>
+<br>
+doc/API.htm<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plmain.c<br>
+pcl/pl/pltop.h<br>
+psi/iapi.h<br>
+psi/psapi.c<br>
+psi/psapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-08 20: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=b9a4616cdf710c79f575adb33b331cb495461d93">b9a4616cdf710c79f575adb33b331cb495461d93</a>
+<blockquote>
+<p>
+ Add documentation for gsapi_set_{stdio,poll}_with_handle.<br>
+<br>
+ Missed from earlier commit.<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-07 09:45:57 -0700
+</strong>
+<br>ray &lt;Ray.Johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=748edd2fd75c684d63486eded71ad20254de6f4c">748edd2fd75c684d63486eded71ad20254de6f4c</a>
+<blockquote>
+<p>
+ Fix Bug 702383 - Segfault due to mis-use of PostScript transparency.<br>
+<br>
+ The fix for Bug 698306 fixed that case, but this case showed that the double<br>
+ calls to .pushpdf14devicefilter still could cause problems. Another patch<br>
+ already resolved calling transparency operations WITHOUT pushing the pdf14<br>
+ device (for Bug 702327).<br>
+<br>
+ Also undefine the PostScript transparency operators to (maybe) prevent<br>
+ misuse if -dALLOWPSTRANSPARENCY is not specified.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+psi/ztrans.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-05 14:51:00 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=560ff82b0bc782465aa4591b2953954d7cf5608c">560ff82b0bc782465aa4591b2953954d7cf5608c</a>
+<blockquote>
+<p>
+ Fix a bounds check in FAPI<br>
+<br>
+ Using less than or equal to should have been less than.<br>
+<br>
+ Found while investigating an oss-fuzz issue.<br>
+<br>
+psi/zfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-04 16:57: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=7502a26f082e71e05df33dcd1dff66655f088673">7502a26f082e71e05df33dcd1dff66655f088673</a>
+<blockquote>
+<p>
+ Add documentation for OCR devices.<br>
+<br>
+doc/Devices.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-25 13:32:26 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eb492c353084600d94877f7157840d24dd7f9301">eb492c353084600d94877f7157840d24dd7f9301</a>
+<blockquote>
+<p>
+ Update lcms2mt to lcms2-2.10rc2.<br>
+<br>
+lcms2mt/AUTHORS<br>
+lcms2mt/COPYING<br>
+lcms2mt/ChangeLog<br>
+lcms2mt/Lib/MS/lcms2_fast_float_plugin.lib<br>
+lcms2mt/Lib/MS/lcms2_static.lib<br>
+lcms2mt/Lib/MS/lcms2mt_fast_float_plugin.lib<br>
+lcms2mt/Lib/MS/lcms2mt_static.lib<br>
+lcms2mt/Makefile.am<br>
+lcms2mt/Makefile.in<br>
+lcms2mt/Projects/BorlandC_5.5/lcms2mt.rc<br>
+lcms2mt/Projects/BorlandC_5.5/lcmsdll.lk<br>
+lcms2mt/Projects/VC2013/lcms2mt.rc<br>
+lcms2mt/Projects/VC2013/lcms2mt.sln<br>
+lcms2mt/Projects/VC2013/lcms2mt_DLL/lcms2mt_DLL.vcxproj<br>
+lcms2mt/Projects/VC2015/lcms2mt.rc<br>
+lcms2mt/Projects/VC2015/lcms2mt.sln<br>
+lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj<br>
+lcms2mt/Projects/VC2015/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters<br>
+lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj<br>
+lcms2mt/Projects/VC2015/lcms2mt_static/lcms2mt_static.vcxproj.filters<br>
+lcms2mt/Projects/VC2017/lcms2mt.rc<br>
+lcms2mt/Projects/VC2017/lcms2mt.sln<br>
+lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj<br>
+lcms2mt/Projects/VC2017/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters<br>
+lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj<br>
+lcms2mt/Projects/VC2017/lcms2mt_static/lcms2mt_static.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/jpegicc/jpegicc.vcxproj<br>
+lcms2mt/Projects/VC2019/jpegicc/jpegicc.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/lcms2mt.rc<br>
+lcms2mt/Projects/VC2019/lcms2mt.sln<br>
+lcms2mt/Projects/VC2019/lcms2mt_DLL/lcms2mt_DLL.vcxproj<br>
+lcms2mt/Projects/VC2019/lcms2mt_DLL/lcms2mt_DLL.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/lcms2mt_static/lcms2mt_static.vcxproj<br>
+lcms2mt/Projects/VC2019/lcms2mt_static/lcms2mt_static.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/linkicc/linkicc.vcxproj<br>
+lcms2mt/Projects/VC2019/linkicc/linkicc.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/psicc/psicc.vcxproj<br>
+lcms2mt/Projects/VC2019/psicc/psicc.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/resource.h<br>
+lcms2mt/Projects/VC2019/testbed/testbed.vcxproj<br>
+lcms2mt/Projects/VC2019/testbed/testbed.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/tiffdiff/tiffdiff.vcxproj<br>
+lcms2mt/Projects/VC2019/tiffdiff/tiffdiff.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/tifficc/tifficc.vcxproj<br>
+lcms2mt/Projects/VC2019/tifficc/tifficc.vcxproj.filters<br>
+lcms2mt/Projects/VC2019/transicc/transicc.vcxproj<br>
+lcms2mt/Projects/VC2019/transicc/transicc.vcxproj.filters<br>
+lcms2mt/Projects/cppcheck/lcms2mt.cppcheck<br>
+lcms2mt/Projects/mac/LittleCMS/LittleCMS.xcodeproj/project.pbxproj<br>
+lcms2mt/README.1ST<br>
+lcms2mt/aclocal.m4<br>
+lcms2mt/config.guess<br>
+lcms2mt/configure<br>
+lcms2mt/configure.ac<br>
+lcms2mt/doc/LittleCMS2.10 API.pdf<br>
+lcms2mt/doc/LittleCMS2.10 Plugin API.pdf<br>
+lcms2mt/doc/LittleCMS2.10 tutorial.pdf<br>
+lcms2mt/doc/LittleCMS2.9 API.pdf<br>
+lcms2mt/doc/LittleCMS2.9 Plugin API.pdf<br>
+lcms2mt/doc/LittleCMS2.9 tutorial.pdf<br>
+lcms2mt/doc/WhyThisFork.txt<br>
+lcms2mt/include/Makefile.in<br>
+lcms2mt/include/lcms2mt.h<br>
+lcms2mt/include/lcms2mt_plugin.h<br>
+lcms2mt/plugins/README.1ST<br>
+lcms2mt/plugins/fast_float/COPYING.GPL3<br>
+lcms2mt/plugins/fast_float/Makefile<br>
+lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj<br>
+lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj.filters<br>
+lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin.vcxproj.user<br>
+lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj<br>
+lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj.filters<br>
+lcms2mt/plugins/fast_float/Projects/VC2019/lcms2mt_fast_float_plugin_testbed.vcxproj.user<br>
+lcms2mt/plugins/fast_float/doc/LittleCMS fast float extensions 1.0.pdf<br>
+lcms2mt/plugins/fast_float/include/Makefile.am<br>
+lcms2mt/plugins/fast_float/include/lcms2mt_fast_float.h<br>
+lcms2mt/plugins/fast_float/src/Makefile.am<br>
+lcms2mt/plugins/fast_float/src/fast_16_tethra.c<br>
+lcms2mt/plugins/fast_float/src/fast_8_curves.c<br>
+lcms2mt/plugins/fast_float/src/fast_8_matsh.c<br>
+lcms2mt/plugins/fast_float/src/fast_8_tethra.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_15bits.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_15mats.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_cmyk.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_curves.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_internal.h<br>
+lcms2mt/plugins/fast_float/src/fast_float_matsh.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_separate.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_sup.c<br>
+lcms2mt/plugins/fast_float/src/fast_float_tethra.c<br>
+lcms2mt/plugins/fast_float/testbed/Makefile.am<br>
+lcms2mt/plugins/fast_float/testbed/fast_float_testbed.c<br>
+lcms2mt/plugins/fast_float/testbed/test0.icc<br>
+lcms2mt/plugins/fast_float/testbed/test1.icc<br>
+lcms2mt/plugins/fast_float/testbed/test2.icc<br>
+lcms2mt/plugins/fast_float/testbed/test3.icc<br>
+lcms2mt/plugins/fast_float/testbed/test5.icc<br>
+lcms2mt/src/Makefile.am<br>
+lcms2mt/src/Makefile.in<br>
+lcms2mt/src/cmsalpha.c<br>
+lcms2mt/src/cmscam02.c<br>
+lcms2mt/src/cmscgats.c<br>
+lcms2mt/src/cmscnvrt.c<br>
+lcms2mt/src/cmserr.c<br>
+lcms2mt/src/cmsgamma.c<br>
+lcms2mt/src/cmsgmt.c<br>
+lcms2mt/src/cmshalf.c<br>
+lcms2mt/src/cmsintrp.c<br>
+lcms2mt/src/cmsio0.c<br>
+lcms2mt/src/cmsio1.c<br>
+lcms2mt/src/cmslut.c<br>
+lcms2mt/src/cmsmd5.c<br>
+lcms2mt/src/cmsmtrx.c<br>
+lcms2mt/src/cmsnamed.c<br>
+lcms2mt/src/cmsopt.c<br>
+lcms2mt/src/cmspack.c<br>
+lcms2mt/src/cmspcs.c<br>
+lcms2mt/src/cmsplugin.c<br>
+lcms2mt/src/cmsps2.c<br>
+lcms2mt/src/cmssamp.c<br>
+lcms2mt/src/cmssm.c<br>
+lcms2mt/src/cmstypes.c<br>
+lcms2mt/src/cmsvirt.c<br>
+lcms2mt/src/cmswtpnt.c<br>
+lcms2mt/src/cmsxform.c<br>
+lcms2mt/src/lcms2_internal.h<br>
+lcms2mt/src/lcms2mt.def<br>
+lcms2mt/testbed/Makefile.am<br>
+lcms2mt/testbed/Makefile.in<br>
+lcms2mt/testbed/new.icc<br>
+lcms2mt/testbed/testcms2.c<br>
+lcms2mt/testbed/testcms2.h<br>
+lcms2mt/testbed/testplugin.c<br>
+lcms2mt/testbed/zoo_icc.c<br>
+lcms2mt/utils/common/utils.h<br>
+lcms2mt/utils/common/vprf.c<br>
+lcms2mt/utils/jpgicc/Makefile.am<br>
+lcms2mt/utils/jpgicc/Makefile.in<br>
+lcms2mt/utils/jpgicc/jpgicc.c<br>
+lcms2mt/utils/linkicc/Makefile.am<br>
+lcms2mt/utils/linkicc/Makefile.in<br>
+lcms2mt/utils/linkicc/linkicc.c<br>
+lcms2mt/utils/psicc/Makefile.am<br>
+lcms2mt/utils/psicc/Makefile.in<br>
+lcms2mt/utils/psicc/psicc.c<br>
+lcms2mt/utils/samples/Makefile.am<br>
+lcms2mt/utils/tificc/Makefile.am<br>
+lcms2mt/utils/tificc/Makefile.in<br>
+lcms2mt/utils/tificc/tifdiff.c<br>
+lcms2mt/utils/tificc/tificc.c<br>
+lcms2mt/utils/transicc/Makefile.am<br>
+lcms2mt/utils/transicc/Makefile.in<br>
+lcms2mt/utils/transicc/transicc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-03 19:41: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=a83716a1657df0a63aafa6582f47a93315aa61a6">a83716a1657df0a63aafa6582f47a93315aa61a6</a>
+<blockquote>
+<p>
+ Add skew detection/correction to downscaler.<br>
+<br>
+base/cal.mak<br>
+base/gxdownscale.c<br>
+base/gxdownscale.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-04 14:21:24 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7867660a69bcc8624f0524ab56d86001d79e5b8d">7867660a69bcc8624f0524ab56d86001d79e5b8d</a>
+<blockquote>
+<p>
+ Update doc/gdevds32.c to track updated downscaler API.<br>
+<br>
+doc/gdevds32.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-04 13:20:40 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1db215120db50db418b199ff364e17feba681f14">1db215120db50db418b199ff364e17feba681f14</a>
+<blockquote>
+<p>
+ Fix a couple of benign compiler warnings<br>
+<br>
+ Firstly a missing include file.<br>
+<br>
+ Secondly we were using a utility function from pdfwrite, and obviously<br>
+ not including the .h file. We really shouldn't be hauling in bits of<br>
+ pdfwrite, so instead duplicate the (miniscule) bit of functionality we<br>
+ want.<br>
+<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-25 17:36: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=278f9a53ed507f9109380ee4210fb860b35b1811">278f9a53ed507f9109380ee4210fb860b35b1811</a>
+<blockquote>
+<p>
+ txtwrite - better processing of text in type 3 fonts<br>
+<br>
+ Previously we were not able to accumulate the widths of text in a type<br>
+ 3 font. This code leverages (again) off the code in pdfwrite to exit<br>
+ to the interpreter, run the type 3 CharProc, and pick up the glyph<br>
+ advance width in setcachedevice.<br>
+<br>
+ This gives us better output for type 3 fonts, as we no longer<br>
+ think that consecutive text is in the same position.<br>
+<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-03 16:54:41 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=feee7e6afd34ff3c1fa0c30ec024be25f1a61c1e">feee7e6afd34ff3c1fa0c30ec024be25f1a61c1e</a>
+<blockquote>
+<p>
+ Rework downscaler initialisation.<br>
+<br>
+ Pass the downscaler parameters into the downscaler init routines,<br>
+ rather than explicit values.<br>
+<br>
+ This reduces the size of the API, and means that future additions<br>
+ to the structure will automatically be passed through.<br>
+<br>
+base/gxdownscale.c<br>
+base/gxdownscale.h<br>
+devices/gdevchameleon.c<br>
+devices/gdevjpeg.c<br>
+devices/gdevocr.c<br>
+devices/gdevpdfimg.c<br>
+devices/gdevpng.c<br>
+devices/gdevpsd.c<br>
+devices/gdevtifs.c<br>
+devices/gdevtifs.h<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-24 14:13: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=7322ef87546c55b29056c1d96d8bdbb7f3ba53ef">7322ef87546c55b29056c1d96d8bdbb7f3ba53ef</a>
+<blockquote>
+<p>
+ Tesseract based OCR devices.<br>
+<br>
+ pdfocr8/24/32, ocr and hocr devices.<br>
+<br>
+ Use OCRLanguage to set languages to use (&quot;eng&quot; by default).<br>
+<br>
+Makefile.in<br>
+base/endianness.h<br>
+base/gsiorom.c<br>
+base/gxiodev.h<br>
+base/leptonica.mak<br>
+base/lib.mak<br>
+base/msvccmd.mak<br>
+base/ocr.mak<br>
+base/tess_version.h<br>
+base/tesseract.mak<br>
+base/tessocr.cpp<br>
+base/tessocr.h<br>
+base/unix-gcc.mak<br>
+base/winlib.mak<br>
+configure.ac<br>
+devices/devs.mak<br>
+devices/gdevocr.c<br>
+devices/gdevpdfimg.c<br>
+devices/gdevpdfimg.h<br>
+devices/gdevpdfocr.c<br>
+psi/msvc.mak<br>
+windows/ghostscript.vcxproj<br>
+windows/ghostscript.vcxproj.filters<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-03 18:32: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=ff02973645a9aff2caf1bcd3032f119995e0d63f">ff02973645a9aff2caf1bcd3032f119995e0d63f</a>
+<blockquote>
+<p>
+ Fix coverity 359151.<br>
+<br>
+ Check ds-&gt;dev is non NULL before dereferencing it.<br>
+<br>
+base/gxdownscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-02 19:24:50 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=89f3dba59d801dd7c586d81d996ea8d641e1018a">89f3dba59d801dd7c586d81d996ea8d641e1018a</a>
+<blockquote>
+<p>
+ Add yet another version of nmake to makefile.<br>
+<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-02 19:23:30 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=df31667a82d8320d25c15f9eaf14fbb33a4ba0a1">df31667a82d8320d25c15f9eaf14fbb33a4ba0a1</a>
+<blockquote>
+<p>
+ Bug 702446: Fix CAL halftoning.<br>
+<br>
+ Looks like cal was interpretting halftone X phase in the wrong<br>
+ direction.<br>
+<br>
+base/gximono.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-02 12:09:53 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0006f8715f5f5d83a7823dc9f41c76a1bdf9b0f7">0006f8715f5f5d83a7823dc9f41c76a1bdf9b0f7</a>
+<blockquote>
+<p>
+ Add lcms2mt files into build_bmpcmp.sh<br>
+<br>
+toolbin/build_bmpcmp.sh<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-02 11:59:44 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b9916ac2feec23b6c91e4c5d425dde0a73b1462d">b9916ac2feec23b6c91e4c5d425dde0a73b1462d</a>
+<blockquote>
+<p>
+ Add missing line feeds on error messages in bmpcmp<br>
+<br>
+toolbin/bmpcmp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-06-01 22:47:36 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e3bbb3b93bcdade889b36641508f25929968089e">e3bbb3b93bcdade889b36641508f25929968089e</a>
+<blockquote>
+<p>
+ Add CIELAB comparison to bmpcmp<br>
+<br>
+ Adding the option -l will perform the difference in CIELAB<br>
+ color space, provided the application was built with a CMM and<br>
+ the source files were tiff files that had embedded ICC profiles.<br>
+<br>
+ It is necessary to use a threshold &gt; 0 and a window &gt; 1.<br>
+<br>
+ The threshold should be interpreted as dE^2 (a Euclidean norm squared<br>
+ term is used as opposed to the L infinity norm used for the other<br>
+ color spaces)<br>
+<br>
+ As a rule of thumb, dE^2 = 9 is barely noticeable in a side by side<br>
+ solid color. Colors in complex images are going to require a larger<br>
+ threshold.<br>
+<br>
+ This adds lcms2mt to the visual studio project. COLOR_MANAGED<br>
+<br>
+toolbin/bmpcmp.c<br>
+toolbin/bmpcmp.vcxproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-29 17:30: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=bb9959b60a9b3947c091ab867616385ac3fc7794">bb9959b60a9b3947c091ab867616385ac3fc7794</a>
+<blockquote>
+<p>
+ Refactor downscaler.<br>
+<br>
+ Originally the downscaler would just get the bits it wanted from<br>
+ either get_bits or get_bits_rectangle.<br>
+<br>
+ Then we extended the downscaler to integrate ClapTrap, which means<br>
+ it may have to get its scanlines from that. This was done hackily.<br>
+<br>
+ Now, we are pondering integrating scan/skew, which means there will<br>
+ be a third possible source, and they might be used in different<br>
+ combinations.<br>
+<br>
+ To simplify everything we introduce a &quot;gx_downscaler_liner&quot; mechanism<br>
+ which wraps up getting a single line of data, and move to using<br>
+ that everywhere. Adding scan/skew should then plug in using this<br>
+ much more neatly.<br>
+<br>
+base/gxdownscale.c<br>
+base/gxdownscale.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-29 17:22: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=ba2fdf5517af3bcd8a613fda84c532307d1e7024">ba2fdf5517af3bcd8a613fda84c532307d1e7024</a>
+<blockquote>
+<p>
+ Fix memory leaks in tiffsep.<br>
+<br>
+ Calling TIFFCleanup doesn't close the underlying tiffio. Call<br>
+ TIFFClose instead.<br>
+<br>
+ Now the tiff io close handler is actually called, be careful<br>
+ not to close the underlying file twice.<br>
+<br>
+ Finally, actually remember to close the comp file.<br>
+<br>
+base/gstiffio.c<br>
+devices/gdevtifs.c<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-29 17:16: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=052a91b91d3d339dca3ce69bcb81faee9b8ff647">052a91b91d3d339dca3ce69bcb81faee9b8ff647</a>
+<blockquote>
+<p>
+ Claptrap: Fix us overrunning components in the planar case.<br>
+<br>
+base/claptrap-planar.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-30 19:38: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=2e4f5bdc708eaceecbce264184bc31f9b5fec107">2e4f5bdc708eaceecbce264184bc31f9b5fec107</a>
+<blockquote>
+<p>
+ Coverity ID 359131 and 359130<br>
+<br>
+ Remove some dead code after the commit which removed the ancient<br>
+ Acrobat 4 &amp; 5 compatibility hacks.<br>
+<br>
+devices/vector/gdevpdfd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-27 11:50:08 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a608d40b2d6d4a062857e23060c243a4b10aac69">a608d40b2d6d4a062857e23060c243a4b10aac69</a>
+<blockquote>
+<p>
+ Hacky fix for Memento leak in pcl_execute_macro().<br>
+<br>
+ Fixes the six remaining leaks after prev commit in:<br>
+ MEMENTO_FAILAT=15796 ./ghostpdl/membin/gpcl6 -sDEVICE=pbmraw -o /dev/null tests_private/pcl/pcl5cfts/fts.2180<br>
+<br>
+pcl/pcl/pcmacros.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-29 16:19:46 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=be333874ffd55024ce640bf8d4347dabff162be1">be333874ffd55024ce640bf8d4347dabff162be1</a>
+<blockquote>
+<p>
+ Improvements to pcl_do_resets().<br>
+<br>
+ From Henry; we now do pcl_reset_permanent on all items if we get an error.<br>
+<br>
+ This fixes all but 6 of the memento leaks in:<br>
+ MEMENTO_FAILAT=15796 ./ghostpdl/membin/gpcl6 -sDEVICE=pbmraw -o /dev/null tests_private/pcl/pcl5cfts/fts.2180<br>
+<br>
+pcl/pcl/pcommand.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-28 13:07: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=3156b0aa8ac4e9ef440c169799658da249eb41c9">3156b0aa8ac4e9ef440c169799658da249eb41c9</a>
+<blockquote>
+<p>
+ pdfwrite - remove Acrobat 4 &amp; 5 work arounds<br>
+<br>
+ Acrobat 4 had a limit of around =/- 16,320 on real numbers (despite the<br>
+ reference stating it was +/- 32,7670, Acrobat 5 had a limit of 32,767.<br>
+ These are implementation limits, not architectural limits, and since<br>
+ co-ordinates are expressed as real numbers they place limits on the<br>
+ position of objects on the page.<br>
+<br>
+ Its clear from Bug #702436 that the clamping used by pdfwrite is not<br>
+ comprehensive; several paths are emitted that use co-ordinates outside<br>
+ the permitted range.<br>
+<br>
+ Since the implementation is flawed, and the newest of the 2 versions<br>
+ (Acrobat 5) has been obselete for 15 years, it seems pointless to try<br>
+ and improve this clamping. Instead this commit removes it entirely.<br>
+<br>
+ This removes a number of places where we test values and do some<br>
+ multiplication, so there should be a (probably immeasurable) performance<br>
+ gain from this. In addition the accuracy should be (very slightly)<br>
+ improved because there should be less problems with rounding errors.<br>
+<br>
+ This causes a large number of files to demonstrate single pixel shifts<br>
+ of a few glyphs, due to changes in rounding. In general these are very<br>
+ minor progressions, though a few could be seen to be equally minor<br>
+ regressions. Since these mostly (and in the case of regressions,<br>
+ entirely) occur at low resolution I believe this is acceptable.<br>
+<br>
+ One file, Bug694385, when sent to ps2write, exhibits a marked<br>
+ progression. This is because the clamping wasn't limited to the pdfwrite<br>
+ device, even though it was inappropriate to limit the ps2write output<br>
+ this way. A good deal of content is now included, where it was previously<br>
+ elided.<br>
+<br>
+devices/vector/gdevpdfd.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfi.c<br>
+devices/vector/gdevpdfx.h<br>
+devices/vector/gdevpdts.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-27 16:53: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=f8a0afa4029b33d3174a31fd562a0102644c9c9e">f8a0afa4029b33d3174a31fd562a0102644c9c9e</a>
+<blockquote>
+<p>
+ pdfwrite - fix clamping for Acrobat 4 and 5 limits<br>
+<br>
+ Bug #702436 &quot;With -dCompatibilityLevel=1.4, gs -sDEVICE=pdfwrite corrupts the contents&quot;<br>
+<br>
+ This isn't 'corruption'. Acrobat 4 and 5 have some serious limitations<br>
+ on the maximum value a real number can take. Since co-ordinates are real<br>
+ numbers this limits the area which can be addressed on the media.<br>
+<br>
+ The example file is very large and, using the default resolution of 720<br>
+ dpi, some of the content has co-ordinates outside the region which can<br>
+ be addressed by old versions of Acrobat.<br>
+<br>
+ In practice we can see that many parts of our output no longer limit<br>
+ themselves to these values anyway, so we shjould remove this archaic<br>
+ limitation.<br>
+<br>
+ In the meantime we can work around this specific case by noting that the<br>
+ clip is rectangular, and will be emitted as a 're' operation, so<br>
+ clamping all 4 co-ordinates is inappropriate. We need to clamp the llx<br>
+ and lly co-ordinates, but then its the width and height we need to limit<br>
+ rather than the urx and ury co-ordinates.<br>
+<br>
+devices/vector/gdevpdfd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-26 18:57:30 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b53ad834b8cddfc55e2297e3d34ff834926a25ff">b53ad834b8cddfc55e2297e3d34ff834926a25ff</a>
+<blockquote>
+<p>
+ documentation - update man/ps2pdf.1<br>
+<br>
+ Replace reference to ps2pdf.htm with VectorDevices.htm<br>
+<br>
+man/ps2pdf.1<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-26 13:04:09 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6667495f56bc670322f607de419fe7e48434d3c6">6667495f56bc670322f607de419fe7e48434d3c6</a>
+<blockquote>
+<p>
+ Fix memento leak in hpgl_process_buffer().<br>
+<br>
+ The fix is to make hpgl_free_stick_fonts() call<br>
+ pl_font_glyph_width_cache_remove_nodes().<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=22007 ./ghostpdl/membin/gpcl6 -sDEVICE=pbmraw -o /dev/null tests_private/pcl/pcl5cfts/fts.1640<br>
+<br>
+ Also fixes many later leaks.<br>
+<br>
+pcl/pcl/pglabel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-25 18:41:24 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1e8dd08e6c9e721c993d28bb36e107f81d16ce0a">1e8dd08e6c9e721c993d28bb36e107f81d16ce0a</a>
+<blockquote>
+<p>
+ Fix leak after error in accum_fill_rectangle()<br>
+<br>
+ Fixes:<br>
+ ./ghostpdl/membin/gpcl6 -sDEVICE=pbmraw -o /dev/null tests_private/pcl/pcl5cfts/fts.1552<br>
+<br>
+base/gxacpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-25 11:59:52 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=776cf430dd1a96a7da33c0d33af9a6dd42bffec0">776cf430dd1a96a7da33c0d33af9a6dd42bffec0</a>
+<blockquote>
+<p>
+ Fix memory leak on error in bitmap_paint() and its callers.<br>
+<br>
+ Previously, bitmap_paint() would free its 'gs_image_enum * pen' arg, but caller<br>
+ image_PaintProc() could also attempt to free this in one error path.<br>
+<br>
+ So have changed bitmap_paint() to only free what it allocates - call<br>
+ gs_image_cleanup() instead of gs_image_cleanup_and_free_enum(); and patched<br>
+ its two callers, mask_PaintProc() and image_PaintProc(), to add calls to<br>
+ gs_free_object(pen).<br>
+<br>
+ Fixes leak in:<br>
+ MEMENTO_FAILAT=15601 ./ghostpdl/membin/gpcl6 -sDEVICE=pbmraw -o /dev/null tests_private/pcl/pcl5cfts/fts.0954<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-25 11:59:19 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=815cbc244257f224eca799413ee64b17b62ffb4a">815cbc244257f224eca799413ee64b17b62ffb4a</a>
+<blockquote>
+<p>
+ Fix error handling in image_render_interpolate_icc().<br>
+<br>
+ Need to return gs_error_VMerror if gs_alloc_bytes() returns NULL.<br>
+<br>
+ Fixes segv in:<br>
+ MEMENTO_FAILAT=15601 ./ghostpdl/membin/gpcl6 -sDEVICE=pbmraw -o /dev/null tests_private/pcl/pcl5cfts/fts.0954<br>
+<br>
+base/gxiscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-22 08:26:34 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3227677f842a1060d29acc53465c6a9c76f7d48b">3227677f842a1060d29acc53465c6a9c76f7d48b</a>
+<blockquote>
+<p>
+ Fix Bug702327: PS transparency operations before PUSH_DEVICE causes problems.<br>
+<br>
+ Add check to make sure PUSH_DEVICE is the first pdf14 compositor action<br>
+ before allowing any other operation for page mode and clist mode.<br>
+<br>
+base/gdevp14.c<br>
+base/gxclist.c<br>
+base/gxclist.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-23 14:16: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=b4310ff9719fdafb840972649a4eb94a88165e66">b4310ff9719fdafb840972649a4eb94a88165e66</a>
+<blockquote>
+<p>
+ ps2write - ignore (most) text rendering modes with type 3 fonts<br>
+<br>
+ Bug #702233 &quot;ps2 stroked text mitre problem&quot;<br>
+<br>
+ The PDF specification says that Tr (text rendering modes) are not<br>
+ applied to type 3 fonts.<br>
+<br>
+ The PDF interpreter normally caters for this by not converting the<br>
+ glyphs to paths and applying the operation(s) but simply rendering the<br>
+ text.<br>
+<br>
+ However, when the destination is pdfwrite or ps2write, we don't apply<br>
+ the text rendering mode operations, we simply leave it up to the device<br>
+ to deal with. Ordinarily this works well, but ps2write had no provision<br>
+ for the special handling of type 3 fonts, and so was applying the text<br>
+ rendering mode to those fonts too, resulting in incorrect output.<br>
+<br>
+ This commit adds code to the PostScript output of ps2write; this checks<br>
+ the font type and does not apply the text rendering mode if the font<br>
+ type is 3. With one exception; if the text rendering mode is 3 (neither<br>
+ stroke nor fill) then we *do* apply it, because Acrobat does and if we<br>
+ don't apply it then we draw text that Acrobat does not.<br>
+<br>
+devices/vector/opdfread.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-22 11:25:43 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4d3ca982177aff19331b72a226664e281feede2c">4d3ca982177aff19331b72a226664e281feede2c</a>
+<blockquote>
+<p>
+ Fix tiff bmpcmp to organize image data upside right for windows<br>
+<br>
+toolbin/bmpcmp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-22 13:38:23 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e1354dbd1cfc7692b7559a3f4c7f86900e513edc">e1354dbd1cfc7692b7559a3f4c7f86900e513edc</a>
+<blockquote>
+<p>
+ Bug 702431: Don't cast a unsigned long to an unsigned int<br>
+<br>
+ When allocating the pixmap for a display device, we were casting the unsigned<br>
+ long bitmap size to an unsigned int, meaning on LP64 (where a long is 64 bits)<br>
+ we could end up truncating the value.<br>
+<br>
+ Change it to cast to a size_t.<br>
+<br>
+ Ultimately, we'll want to change the display device structure to store a size_t<br>
+ rather than unsigned long, but that will mean changing the display device's<br>
+ public API.<br>
+<br>
+devices/gdevdsp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-21 11:12:14 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b4cda2ee4cbdf045e05b9832fd93f6a1a5cc3bb6">b4cda2ee4cbdf045e05b9832fd93f6a1a5cc3bb6</a>
+<blockquote>
+<p>
+ Remove the last of TURBO C support.<br>
+<br>
+ Most of the TURBO C support went away years ago, and we've had no complaints,<br>
+ so remove the rest.<br>
+<br>
+base/malloc_.h<br>
+base/memory_.h<br>
+base/stdpre.h<br>
+psi/store.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-22 14:24:39 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7d6d69ff17c43664482fe0dc34676a46ba551d93">7d6d69ff17c43664482fe0dc34676a46ba551d93</a>
+<blockquote>
+<p>
+ pdfwrite - rewrite the PSPageOptions code to use non-GC memory<br>
+<br>
+ Bug #702370 &quot;PSPageOption injecting unwanted characters&quot;<br>
+<br>
+ As Peter rightly comments in the bug this is due to the contents of the<br>
+ param_string_array not being enumerated when the array pointer is<br>
+ enumerated.<br>
+<br>
+ This seems to be a general problem, but we seem to get away with it for<br>
+ NeverEmbed and AlwaysEmbed (which are handled in a much more complex<br>
+ fashion) so I've chosen to leave those alone for now.<br>
+<br>
+ For PSPageOptions this commit creates a new gs_param_string_array and<br>
+ new strings for each of the strings in the param_list. These are<br>
+ allocated in non-GC memory and the pdfwrite device has complete control<br>
+ over their lifetime now.<br>
+<br>
+ We no longer numerate the member for GC (because it should not be GC'ed)<br>
+ and we free the array and its contents when we close the device.<br>
+<br>
+ This resolves the problem for me.<br>
+<br>
+devices/vector/gdevpdf.c<br>
+devices/vector/gdevpsdf.h<br>
+devices/vector/gdevpsdp.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-21 16:24: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=548fa474def31ddeb2864554ad0698bd53b13ea0">548fa474def31ddeb2864554ad0698bd53b13ea0</a>
+<blockquote>
+<p>
+ Add shell script to build bmpcmp with tiff and png support<br>
+<br>
+toolbin/build_bmpcmp.sh<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 18:15: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=6955a325826e84c77723bab03046c801930801df">6955a325826e84c77723bab03046c801930801df</a>
+<blockquote>
+<p>
+ Extend gsapi interface with _with_handle variants for callbacks.<br>
+<br>
+ This allows us to specify specific caller_handles for each<br>
+ callback type rather than using a default one specified at<br>
+ gs instance creation time. The old functions still work.<br>
+<br>
+base/gp_mspol.c<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+base/strmio.c<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<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>
+psi/psapi.c<br>
+psi/ziodevsc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-21 08:21: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=b0d2c264eb53c1838957151f1e18abfd1f17dd54">b0d2c264eb53c1838957151f1e18abfd1f17dd54</a>
+<blockquote>
+<p>
+ Bug 702225(pt2): Check fontconfig is new enough.<br>
+<br>
+ Turns out FC_VARIABLE is a fairly new addition to fontconfig's search<br>
+ parameters (&lt;= 2.12.6 doesn't have it &gt;=2.13.1 does), so add preprocessor<br>
+ conditions so we'll only use when fontconfig is new enough.<br>
+<br>
+base/gp_unix.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 16:23: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=627942b74af81c1b9b76b07dba6e4ce6234a4ab6">627942b74af81c1b9b76b07dba6e4ce6234a4ab6</a>
+<blockquote>
+<p>
+ Fix the Windows top makefile when using UFST<br>
+<br>
+ If the user chose to specify the build flags for using UFST directly on the<br>
+ nmake command line (rather than using the predefined UFST build target), we'd<br>
+ end up disabling Freetype, which has not been supported for some time.<br>
+<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 15:17:10 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=619e7f46c9c760879409f9efaa4b3e798986538e">619e7f46c9c760879409f9efaa4b3e798986538e</a>
+<blockquote>
+<p>
+ lgtm.com fixes: float * float -&gt; double.<br>
+<br>
+ Make casting explicit. Ideally we'd cast one of the floats to a<br>
+ double to start with, so the multiplication happens in doubles,<br>
+ but that produces lots of diffs.<br>
+<br>
+base/gspaint.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 11:39:08 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e27d7babcbbbee07fe9c458228d941ce3b4f8890">e27d7babcbbbee07fe9c458228d941ce3b4f8890</a>
+<blockquote>
+<p>
+ Fix typo introduced in copy/paste<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-19 12:18: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=c9142412c3ec52e2fcb42053706352a9ee5d9a74">c9142412c3ec52e2fcb42053706352a9ee5d9a74</a>
+<blockquote>
+<p>
+ Add tiff to bmpcmp<br>
+<br>
+ This upgrades the VS solution to 2019 for the bmpcmp project. Fixes a couple<br>
+ minor issues that existed with some of the project configurations and add<br>
+ tiff support.<br>
+<br>
+toolbin/bmpcmp.c<br>
+toolbin/bmpcmp.sln<br>
+toolbin/bmpcmp.vcproj<br>
+toolbin/bmpcmp.vcxproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 14:45: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=cf15813c35a75067e828608c665dae30999f8dd5">cf15813c35a75067e828608c665dae30999f8dd5</a>
+<blockquote>
+<p>
+ Update Acrobat2Tiff to VS2019<br>
+<br>
+toolbin/Acrobat2Tiff/Acrobat2Tiff.sln<br>
+toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vb<br>
+toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff.vbproj<br>
+toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Application.Designer.vb<br>
+toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Resources.Designer.vb<br>
+toolbin/Acrobat2Tiff/Acrobat2Tiff/Acrobat2Tiff/Settings.Designer.vb<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 16:02:07 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8c7bd787defa071c96289b7da9397f673fddb874">8c7bd787defa071c96289b7da9397f673fddb874</a>
+<blockquote>
+<p>
+ txtwrite - address memory problems<br>
+<br>
+ Bug #702229 &quot; txtwrite: use after free in 9.51 on some files (regression from 9.50)&quot;<br>
+ Also bug #702346 and the earlier report #701877.<br>
+<br>
+ The problems occur because its possible for a single character code in<br>
+ a PDF file to map to more than a single Unicode code point. In the case<br>
+ of the file for 701877 the character code maps to 'f' and 'i' (it is an<br>
+ fi ligature).<br>
+<br>
+ The code should deal with this, but we need to ensure we are using the<br>
+ correct index. In addition, if we do get more Unicode code points than<br>
+ we expected, we need to set the widths of the 'extra' code points to<br>
+ zero (we only want to consider the width of the original character).<br>
+<br>
+ This does mean increasing the size of the Widths array to cater for<br>
+ the possibility of more entries on output than there were on input.<br>
+<br>
+ While working on it I noticed that the Unicode remapping on little-<br>
+ endian machines was reversing the order of the Unicode values, when<br>
+ there was more than a single code point returned, so fixed that at<br>
+ the same time.<br>
+<br>
+devices/vector/gdevtxtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 12:44: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=be741930a01176ba8cfea1310866a1a1c69fa71c">be741930a01176ba8cfea1310866a1a1c69fa71c</a>
+<blockquote>
+<p>
+ Add yet another nmake version to the MSVC makefile.<br>
+<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 11:23: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=a10a03a4c9713b38c4cfcd07f0ba3c722778aae0">a10a03a4c9713b38c4cfcd07f0ba3c722778aae0</a>
+<blockquote>
+<p>
+ Rejig plftable.h<br>
+<br>
+ Rather than repeatedly including the same header to get multiple<br>
+ versions of the font table built in, build the font table just<br>
+ once with all the information in it.<br>
+<br>
+ This should be smaller (fractionally), and stop lgtm.com complaining.<br>
+<br>
+pcl/pcl/pcfontpg.c<br>
+pcl/pcl/pcfsel.c<br>
+pcl/pl/plftable.c<br>
+pcl/pl/plftable.h<br>
+pcl/pl/pllfont.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-20 12:15: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=ffbaace78bacb0421ae11c5a8fdef51cbd829218">ffbaace78bacb0421ae11c5a8fdef51cbd829218</a>
+<blockquote>
+<p>
+ Tweak fapiufst code to build with UFST 7.1.x<br>
+<br>
+base/fapiufst.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-19 16:20: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=7e7fa21f9e378303df8d8529cc3a94676e433f40">7e7fa21f9e378303df8d8529cc3a94676e433f40</a>
+<blockquote>
+<p>
+ Exclude &quot;variable fonts&quot; from fontconfig search<br>
+<br>
+ Since we cannot used (and later skip over errors caused by) TTF variable<br>
+ fonts (a sort of illigitimate offspring of Multiple Master and TTF!) we<br>
+ may as well filter them out of our fontconfig search criteria.<br>
+<br>
+ Patch suggested by zdohnal@redhat.com<br>
+<br>
+base/gp_unix.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-19 18:43: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=9f1b19d0634ad611dc73a8c05c13c88f42cb8730">9f1b19d0634ad611dc73a8c05c13c88f42cb8730</a>
+<blockquote>
+<p>
+ lgtm fixes: float * float -&gt; double<br>
+<br>
+ When we do float * float, and then use the result in a context<br>
+ where a double is expected, we implicitly cast the result of the<br>
+ multiplication to be a double. This means we can overflow<br>
+ the range of floats during the initial multiplication, when the<br>
+ result would quite easily fit into a float.<br>
+<br>
+ It's better to cast to double to start with, then do the<br>
+ multiplication (at the cost of potentially being slower - but<br>
+ not really that much slower these days).<br>
+<br>
+ In some cases I've opted NOT to change the operations (merely to<br>
+ make the casting explicit) so as to minimise diffs.<br>
+<br>
+base/gdevp14.c<br>
+base/gshtscr.c<br>
+base/gxshade.c<br>
+base/gxstroke.c<br>
+pcl/pxl/pxpaint.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-19 19:45: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=173e301c9908cf4656c462a89a146f7f1f5664f8">173e301c9908cf4656c462a89a146f7f1f5664f8</a>
+<blockquote>
+<p>
+ Fix &quot;integer constant overflow&quot; warning.<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-18 13:16:20 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ef0bc2a843783af2e5d76dadf801063ab6c785ef">ef0bc2a843783af2e5d76dadf801063ab6c785ef</a>
+<blockquote>
+<p>
+ Improve font copying for new PDF interpeter with pdfwrite<br>
+<br>
+ Since this commit:<br>
+<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=12c071547d<br>
+<br>
+ The 'copied font' stored by pdfwrite has maintained a pointer to the<br>
+ interpreter's 'dir' (FontDirectory) and used it to mark the names in<br>
+ the interpreter name table during GC pointer enumeration.<br>
+<br>
+ This doesn't work if the interpreter is pdfi and its working inside<br>
+ the Ghostscript PostScript interpreter, because the enumeration can<br>
+ take place after the pdfi interpreter has been destroyed. Its also not<br>
+ necessary in this case, because the pdfi name table can't be relocated.<br>
+<br>
+ But for complex reasons (see the lengthy comment in the code) it has a<br>
+ small but useful benefit when pdfwrite is being driven directly by the<br>
+ PostScript interpreter.<br>
+<br>
+ In order to avoid losing that benefit, we now only store a pointer to<br>
+ the interpreter's 'dir' member, and only mark the names during<br>
+ enumeration, if the memory allocator of the font is a garbage-collecting<br>
+ allocator.<br>
+<br>
+devices/gxfcopy.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-18 13:20:10 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=63df5adcad39572f94a0448c09598641c89f58db">63df5adcad39572f94a0448c09598641c89f58db</a>
+<blockquote>
+<p>
+ lgtm.com fix: int * int may overflow before being converted to size_t.<br>
+<br>
+base/gxdownscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 13:06:19 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c170fa2fc7dfe79dced44d7b628129e5bc7dd045">c170fa2fc7dfe79dced44d7b628129e5bc7dd045</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Don't define external functions in local scope.<br>
+<br>
+base/gxpcmap.c<br>
+pcl/pxl/pxfont.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 12:54:35 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f8529a27e1c1768bd79ff19dfa7a29790ce9e275">f8529a27e1c1768bd79ff19dfa7a29790ce9e275</a>
+<blockquote>
+<p>
+ lgtm.com: Add comment to empty conditional block to stop warning.<br>
+<br>
+base/mkromfs.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 12:36: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=53b712ea02903910a19980b28fbf8ae6fc5bdade">53b712ea02903910a19980b28fbf8ae6fc5bdade</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Avoid shadowing params with local vars.<br>
+<br>
+base/ets.c<br>
+base/gdevmem.c<br>
+base/gsfcmap1.c<br>
+pcl/pcl/rtraster.c<br>
+pcl/pl/pjparse.c<br>
+psi/imain.c<br>
+psi/zchar.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 11:43:13 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8d9df30a48ac272e92666d52fef62580aacabfd7">8d9df30a48ac272e92666d52fef62580aacabfd7</a>
+<blockquote>
+<p>
+ Bug 702248: Spelling problem in error message.<br>
+<br>
+Resource/Init/pdf_rbld.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 11:48: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=349d37844880567be4630e07c0518f6671300fc6">349d37844880567be4630e07c0518f6671300fc6</a>
+<blockquote>
+<p>
+ lgtm.com: Fix &quot;comparison is always false&quot; warning.<br>
+<br>
+psi/ziodev.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-15 11: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=2f768243df42031a3f37f256678e34c1ac97fdde">2f768243df42031a3f37f256678e34c1ac97fdde</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Multiplication of narrow type in wider context.<br>
+<br>
+base/claptrap-init.c<br>
+base/gdevdrop.c<br>
+base/gdevprn.c<br>
+base/gsfunc.c<br>
+base/gsicc_monitorcm.c<br>
+base/gxccache.c<br>
+base/gxclip2.c<br>
+base/gxclipm.c<br>
+base/gxclread.c<br>
+base/gxclrect.c<br>
+base/gxdownscale.c<br>
+base/gxfapi.c<br>
+base/gxhtbit.c<br>
+base/gxidata.c<br>
+base/gxipixel.c<br>
+base/gxshade4.c<br>
+base/sjbig2.c<br>
+base/sjbig2.h<br>
+pcl/pcl/pcsfont.c<br>
+pcl/pl/plchar.c<br>
+pcl/pxl/pximage.c<br>
+psi/zfapi.c<br>
+xps/xpsimage.c<br>
+xps/xpsjxr.c<br>
+xps/xpspng.c<br>
+xps/xpszip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-14 21:00: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=b380ebb41878645d0d7bb2b07155667acac4fa99">b380ebb41878645d0d7bb2b07155667acac4fa99</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Fix cases where comparisons are constant.<br>
+<br>
+base/gdevdflt.c<br>
+base/gdevp14.c<br>
+base/gen_ordered.c<br>
+base/gscsepr.c<br>
+base/gsmisc.c<br>
+base/gstiffio.c<br>
+base/gxcmap.c<br>
+base/gxdownscale.c<br>
+base/mkromfs.c<br>
+base/ttfmain.c<br>
+pcl/pl/realmain.c<br>
+pcl/pxl/pxfont.c<br>
+pcl/pxl/pxink.c<br>
+psi/imain.c<br>
+psi/ireclaim.c<br>
+psi/iscannum.c<br>
+psi/zcolor.c<br>
+psi/zfont.c<br>
+psi/zfsample.c<br>
+psi/zfunc4.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-13 16:52:42 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d578f2517bbc6261a0cf31f8e2e88b2990241c0a">d578f2517bbc6261a0cf31f8e2e88b2990241c0a</a>
+<blockquote>
+<p>
+ Fix 702400: Indeterminate SEGV due to GC confusion.<br>
+<br>
+ The GC 'clump_locate' macro relied on PTR_BETWEEN (yes, also a macro)<br>
+ but on Windows MSC_VER caused pointers to be compared using only the<br>
+ low 32-bits (unsigned long is 32-bits on Windows, even 64-bit).<br>
+<br>
+ Depending on addresses, and when the GC ran, this could result in the<br>
+ GC logic being confused about addresses. This change works with 32-bit<br>
+ Windows as well as 64-bit (and may not work with TURBOC on an OLD<br>
+ CPU with segment+offset addresses, but so what?).<br>
+<br>
+base/stdpre.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-13 10:20:29 -0700
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d703f355af5292e61dcd641332e249873ab5fb8a">d703f355af5292e61dcd641332e249873ab5fb8a</a>
+<blockquote>
+<p>
+ Bug702398 -- Fix several annotation w/no AP bugs<br>
+<br>
+ 1) In the case of an annotation with no BS or Border, the code was simply<br>
+ incorrect, causing an error that meant the annotation didn't render.<br>
+<br>
+ 2) annotation wasn't rendering if atan got error<br>
+<br>
+ Found this for a PolyLine case, but also fixed it for Line, just in case.<br>
+<br>
+ 3) Fix 1st LE in Polyline<br>
+<br>
+ It was calculating dx,dy backwards, so the angle was off by 180 degrees.<br>
+<br>
+ 4) Set the color for PolyLine annotation<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-13 11:31: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=d767c9e3297623e6708fe1c6dcab0583989ef63c">d767c9e3297623e6708fe1c6dcab0583989ef63c</a>
+<blockquote>
+<p>
+ Assuage C++'s demands for whitespace in string literal concats.<br>
+<br>
+base/stdint_.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-11 18:05:50 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0ccf0e77b1ee8e10335c2a80ddb180c9b5a4f5b6">0ccf0e77b1ee8e10335c2a80ddb180c9b5a4f5b6</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Narrow multiply -&gt; wider result.<br>
+<br>
+base/gsfcmap.c<br>
+base/gxhintn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-12 13:58:30 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bad9f11895cbb4c0f53b7b0ef8f3502789d81315">bad9f11895cbb4c0f53b7b0ef8f3502789d81315</a>
+<blockquote>
+<p>
+ graphics library - improve gx_cpath_copy<br>
+<br>
+ This function does not, currently, appear to be called from anywhere.<br>
+ For the new PDF interpreter we'd like to use it to copy the clip path(s)<br>
+ from the PostScript environment to the PDF environment, but there's a<br>
+ problem.<br>
+<br>
+ The problem is that the structures defining the list of rectangles are<br>
+ allocated using the same memory allocator as the source clip path, but<br>
+ when we come to free them, the destructor uses the memory allocator of<br>
+ the clip list. So if the destination clip path was using a different<br>
+ allocator from the source clip path, we will use the wrong allocator to<br>
+ try and free the memory.<br>
+<br>
+ Chris thinks this may be an attempt to cope with stack-based allocations<br>
+ of the clip path where the allocator is NULL. So to cope with that<br>
+ we use the existing code (allocator from the source clip path) if the<br>
+ destination clip path's allocator is NULL (stack based) and we use the<br>
+ destination clip path's allocator otherwise.<br>
+<br>
+base/gxcpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-11 11:08:26 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ae6b0b0e768f618728f66580227fffc92896903c">ae6b0b0e768f618728f66580227fffc92896903c</a>
+<blockquote>
+<p>
+ Remove &quot;magic numbers&quot; from profile type selection<br>
+<br>
+base/gdevp14.c<br>
+base/gscms.h<br>
+base/gsequivc.c<br>
+base/gsicc.c<br>
+base/gsicc_cache.c<br>
+base/gsicc_manage.c<br>
+base/gstext.c<br>
+base/gxclthrd.c<br>
+base/gxcmap.c<br>
+base/gxiscale.c<br>
+devices/gdevjpeg.c<br>
+devices/gdevpdfimg.c<br>
+devices/gdevpng.c<br>
+devices/gdevtfnx.c<br>
+devices/gdevtifs.c<br>
+devices/gdevtsep.c<br>
+devices/vector/gdevxps.c<br>
+psi/zicc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-07 10:43:54 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2bb52bc877645068977c17c8a433e5b959b51eba">2bb52bc877645068977c17c8a433e5b959b51eba</a>
+<blockquote>
+<p>
+ Spot overprint in RGB Blend color spaces<br>
+<br>
+ If the blending color space is RGB based,<br>
+ special consideration must be made for doing<br>
+ overprint with separation and devicen color spaces.<br>
+<br>
+ In particular if we are going out to a separation<br>
+ device we could have RGB+spot support but not<br>
+ if the separation color was a process name like<br>
+ Cyan.<br>
+<br>
+ Also implement the missing gxdso_pdf14_sep_device<br>
+ special operation.<br>
+<br>
+base/gdevdflt.c<br>
+base/gdevp14.c<br>
+base/gscdevn.c<br>
+base/gscspace.h<br>
+base/gsstate.c<br>
+base/gstext.c<br>
+base/gxblend.c<br>
+base/lib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-11 15:41: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=a7def309186f123008dcedfc0a6b07b6328c9c13">a7def309186f123008dcedfc0a6b07b6328c9c13</a>
+<blockquote>
+<p>
+ lgtm.com: configuration file fixes.<br>
+<br>
+.lgtm.yml<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-11 00:57: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=4f03b3f51957fcaab6b953ba79bb32d2096ad49b">4f03b3f51957fcaab6b953ba79bb32d2096ad49b</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Avoid narrow mult cast to longer type.<br>
+<br>
+ Avoid masking overflows through relying on implicit casting.<br>
+<br>
+base/gdevabuf.c<br>
+base/gdevdflt.c<br>
+base/gdevp14.c<br>
+base/gen_ordered.c<br>
+base/gsfcmap.c<br>
+base/gsfunc0.c<br>
+base/gsht.c<br>
+base/gshtscr.c<br>
+base/gsicc_create.c<br>
+base/gsptype1.c<br>
+base/gxblend1.c<br>
+base/gxdownscale.c<br>
+base/gxht_thresh.c<br>
+base/gxicolor.c<br>
+base/gximono.c<br>
+base/gxiscale.c<br>
+base/gxpcmap.c<br>
+base/sidscale.c<br>
+base/siscale.c<br>
+base/sjpx_openjpeg.c<br>
+devices/gdevdm24.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpsds.c<br>
+pcl/pcl/pglfill.c<br>
+pcl/pxl/pxpaint.c<br>
+xps/xpstiff.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-10 12:31: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=4c305cb14b76bebfe0e147bcd90f4cc2ec7482ac">4c305cb14b76bebfe0e147bcd90f4cc2ec7482ac</a>
+<blockquote>
+<p>
+ Add lgtm configuration file.<br>
+<br>
+.lgtm.yml<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-10 12:19: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=9b89ef860f52a6ca9696559c39104feba41e1de8">9b89ef860f52a6ca9696559c39104feba41e1de8</a>
+<blockquote>
+<p>
+ lgtm.com fixes: gpdl tweaks.<br>
+<br>
+gpdl/jpgtop.c<br>
+gpdl/pngtop.c<br>
+gpdl/psitop.c<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-09 17:42:37 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b778f827810b9f14c758334dd94f3f8df4d27bd4">b778f827810b9f14c758334dd94f3f8df4d27bd4</a>
+<blockquote>
+<p>
+ lgtm.com fix: Use | not || when combining bitflags.<br>
+<br>
+base/gxclpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-09 17:49: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=c2dbf6acdc8b86cc0d74ff74d222720558ceb397">c2dbf6acdc8b86cc0d74ff74d222720558ceb397</a>
+<blockquote>
+<p>
+ lgtm.com fix: Remove code for duplicated &quot;if&quot; condition.<br>
+<br>
+toolbin/halftone/ETS/ipview.html<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-09 17:45: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=d9b37029db10bdeaf5eaee00bac2eb0653644c77">d9b37029db10bdeaf5eaee00bac2eb0653644c77</a>
+<blockquote>
+<p>
+ lgtm.com tweak: Make it clear that something isn't a typo.<br>
+<br>
+ Use &quot;INTERPATCH_PADDING != 0&quot; rather than &quot;INTERPATCH_PADDING&quot; to<br>
+ avoid the appearance of a typo.<br>
+<br>
+base/gxshade6.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-09 17:38:24 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8836aca9a03b99fc6f0ceb3994dbb78d442d634a">8836aca9a03b99fc6f0ceb3994dbb78d442d634a</a>
+<blockquote>
+<p>
+ lgtm.com: Miscellaneous fixes in support scripts.<br>
+<br>
+ Remove unused local variables, correct semicolon usage. Avoid<br>
+ &quot;return fn()&quot; where fn always returns None.<br>
+<br>
+pcl/tools/check_deps.py<br>
+pcl/tools/makeromttf.py<br>
+pcl/tools/pxlasm.py<br>
+pcl/tools/pxldis.py<br>
+pcl/tools/revlist.py<br>
+psi/msvc.mak<br>
+toolbin/gitlog2changelog.py<br>
+toolbin/halftone/ETS/ipview.html<br>
+toolbin/ocheck.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-09 12:35:27 +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=8620f18686d3350590894590264f4cd71ef3dccb">8620f18686d3350590894590264f4cd71ef3dccb</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent SEGV during pjl_set_init_from_defaults.<br>
+<br>
+ Prevent SEGV by propagating all error codes.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=25933 ./membin/gpcl6 -sDEVICE=pbmraw -dMaxBitmap=2000 -o /dev/null ./tests_private/pcl/pcl5efts/fts.0051<br>
+<br>
+pcl/pl/pjparse.c<br>
+pcl/pl/pjparse.h<br>
+pcl/pl/pjparsei.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-08 21:50: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=9e553991e4c99814eb342d83b4fb42b5af457390">9e553991e4c99814eb342d83b4fb42b5af457390</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent numerous memory leaks.<br>
+<br>
+ Prevent memory leaks by propagating error codes and freeing loose objects.<br>
+<br>
+ Also resolve some compiler warnings.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=19484 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5efts/fts.0051<br>
+<br>
+base/gscspace.c<br>
+base/gxclrast.c<br>
+base/gxcpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-08 14: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=a0a3ac239e990a76e937710dce75f3ace1e25be7">a0a3ac239e990a76e937710dce75f3ace1e25be7</a>
+<blockquote>
+<p>
+ lgtm.com issue: Add some missing &quot;repeat include&quot; guards.<br>
+<br>
+base/gximdecode.h<br>
+contrib/lips4/gdevlips.h<br>
+contrib/lips4/gdevlprn.h<br>
+devices/rinkj/evenbetter-rll.h<br>
+devices/rinkj/rinkj-byte-stream.h<br>
+devices/rinkj/rinkj-config.h<br>
+devices/rinkj/rinkj-device.h<br>
+devices/rinkj/rinkj-dither.h<br>
+devices/rinkj/rinkj-epson870.h<br>
+devices/rinkj/rinkj-screen-eb.h<br>
+devices/vector/gdevagl.h<br>
+devices/vector/gdevpdfg.h<br>
+ijs/ijs.h<br>
+ijs/ijs_client.h<br>
+jbig2dec/jbig2.h<br>
+lcms2mt/include/lcms2mt.h<br>
+lcms2mt/include/lcms2mt_plugin.h<br>
+lcms2mt/src/lcms2_internal.h<br>
+pcl/pcl/pgfdata.h<br>
+pcl/pl/plfapi.h<br>
+pcl/pl/plparams.h<br>
+pcl/pl/plufstlp.h<br>
+pcl/pl/plvocab.h<br>
+pcl/pxl/pxbfont.h<br>
+xps/ghostxps.h<br>
+xps/xpsfapi.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-08 12:23:26 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1883e1010c35da56bc47ad439b9e45401a3060da">1883e1010c35da56bc47ad439b9e45401a3060da</a>
+<blockquote>
+<p>
+ lgtm.com fix: Remove duplicate keys from enumeration.<br>
+<br>
+pcl/tools/pxlasm.py<br>
+pcl/tools/pxldis.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-07 18: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=95fe80c3c670f1f5200c21ea8df3e6139b711acc">95fe80c3c670f1f5200c21ea8df3e6139b711acc</a>
+<blockquote>
+<p>
+ lgtm.com fixes: Fix comparison of narrow loop var with wider limit.<br>
+<br>
+base/gxcmap.c<br>
+base/ttfmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-07 18:14: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=7592dd988af75e40f0e449e17905751a5117e4f5">7592dd988af75e40f0e449e17905751a5117e4f5</a>
+<blockquote>
+<p>
+ Fix implicit declaration of var in ETS support script.<br>
+<br>
+toolbin/halftone/ETS/ipview.html<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-07 18:12:30 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=de1f4bc1918fe1a972c3e8119f3c24266aff4cc4">de1f4bc1918fe1a972c3e8119f3c24266aff4cc4</a>
+<blockquote>
+<p>
+ Fix missing comma in pxlasm.py<br>
+<br>
+pcl/tools/pxlasm.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-07 17:48: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=fa4eb803adf41c0353fd7efbb4b45321eb2dec06">fa4eb803adf41c0353fd7efbb4b45321eb2dec06</a>
+<blockquote>
+<p>
+ Tweak stream.h to avoid the use of &quot;template&quot;.<br>
+<br>
+ &quot;template&quot; is a reserved word in C++, and so this header won't<br>
+ compile when included from a .cpp file.<br>
+<br>
+base/stream.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-06 18:01:07 +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=efd0b47fe66a99097e200d76be1a4846ae2ef692">efd0b47fe66a99097e200d76be1a4846ae2ef692</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leak in gx_path_assign_free.<br>
+<br>
+ Prevent memory leak by freeing path on all errors.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=16246 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.2120<br>
+<br>
+base/gxpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-06 12:11:05 +0100
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6d7c22dd453515d3f3f74af695a08abed26f657b">6d7c22dd453515d3f3f74af695a08abed26f657b</a>
+<blockquote>
+<p>
+ lgtm.com fixes for ghostscript.<br>
+<br>
+ Avoid using the same header include guard in more than one file.<br>
+<br>
+ Use the correct format specifier in a printf-like error string<br>
+ in lcms2mt.<br>
+<br>
+contrib/gdevbjc_.h<br>
+lcms2mt/src/cmsio0.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-03 19:04:42 +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=1ad7ac685aa07b1dceb0bf9e28e68a47492fb920">1ad7ac685aa07b1dceb0bf9e28e68a47492fb920</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent SEGV in hpgl_LB.<br>
+<br>
+ Prevent SEGV by cleanly freeing stick fonts on all errors.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15422 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1920<br>
+<br>
+pcl/pcl/pglabel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-04 10:29:06 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c34c60394ebf68356866c6160fd0f7dfa1c4d0ce">c34c60394ebf68356866c6160fd0f7dfa1c4d0ce</a>
+<blockquote>
+<p>
+ Coverity 957905<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-04 08:31:43 +0100
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=54e26f03a7403112463ad69874be9ab66cc4c863">54e26f03a7403112463ad69874be9ab66cc4c863</a>
+<blockquote>
+<p>
+ PDF interpreter - minor fixes<br>
+<br>
+ Remove what looks like a left-over debugging print, make a couple of<br>
+ indenting fixes.<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-02 23:31: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=92dc0f411477a0b920eea64ab305e60d2755ac9d">92dc0f411477a0b920eea64ab305e60d2755ac9d</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks in hpgl_fill_polyfill_background.<br>
+<br>
+ The code has been refactored to always call grestore to balance the gsave.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=19724 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1890<br>
+<br>
+pcl/pcl/pgdraw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-02 12:58:21 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=160d2d57ebbe610b770206f6f9773d9300ca97f9">160d2d57ebbe610b770206f6f9773d9300ca97f9</a>
+<blockquote>
+<p>
+ Coverity 357907<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-02 12:25:59 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5b96425e2414dfb130490bf0da2a5e03da099951">5b96425e2414dfb130490bf0da2a5e03da099951</a>
+<blockquote>
+<p>
+ Fix mistake in debug print variable count<br>
+<br>
+base/gstrans.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-02 09:26:05 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1407aa54f6c2df62d432a9b895a0001e62defcd8">1407aa54f6c2df62d432a9b895a0001e62defcd8</a>
+<blockquote>
+<p>
+ Coverity 357906<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-02 13:33:04 +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=339ddd9dba998b82d4b71bdaee456ee80408c24f">339ddd9dba998b82d4b71bdaee456ee80408c24f</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent memory leaks in hpgl_print_symbol_mode_char.<br>
+<br>
+ The code has been refactored to always call grestore to balance the gsave. The label buffer must<br>
+ always be destroyed if it was successfully initialised.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=18349 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1850<br>
+<br>
+pcl/pcl/pglabel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-01 16:24: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=8c432810d36e24613b84f8506ab3929f9d13e612">8c432810d36e24613b84f8506ab3929f9d13e612</a>
+<blockquote>
+<p>
+ Squashed commit of the page_group branch<br>
+<br>
+ The issue this branch is trying to solve is to ensure<br>
+ that the alpha blending occurs in the proper page group<br>
+ color space. If the page group is CMYK and the device is<br>
+ RGB then the final alpha blend must occur prior to the<br>
+ color conversion. Currently with the head code this is<br>
+ not the case. This work required a significant rework<br>
+ of how the transparency group pop occurred since if it<br>
+ is the final group, the blend will not occur until the<br>
+ put_image operation. The group color handling was<br>
+ completely reworked and simplified. The reworked code<br>
+ now maintains a group_color object that is related to<br>
+ its own color rather than the parent as before.<br>
+<br>
+ In addition, during the push_device operation, a buffer<br>
+ is not created. Previously an entire page buffer was<br>
+ created. If we have a page group that is smaller than<br>
+ the whole page, this will save us in space. The downside<br>
+ of this is that we need to ensure we have a buffer in place<br>
+ when the first drawing operation occurs.<br>
+<br>
+ There were several issues with the bitrgbtags devices as<br>
+ well as the pngalpha and psdcmyk16 devices that had to<br>
+ be considered during the put_image operation.<br>
+ operation<br>
+<br>
+base/gdevdflt.c<br>
+base/gdevp14.c<br>
+base/gdevp14.h<br>
+base/gsicc_cache.c<br>
+base/gstparam.h<br>
+base/gstrans.c<br>
+base/gstrans.h<br>
+base/gxblend.h<br>
+base/gxblend1.c<br>
+base/gxdevsop.h<br>
+devices/devs.mak<br>
+devices/gdevpng.c<br>
+devices/vector/gdevpdft.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-05-01 12:17:18 +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=d41990615baaee9bba6ce7ae3e5a025a71744c51">d41990615baaee9bba6ce7ae3e5a025a71744c51</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent SEGV in pcl_pattern_RF.<br>
+<br>
+ The call to pl_dict_put will free the pattern if an error occurs so the pcl_pattern_free_pattern<br>
+ is not required. Freeing the pattern data is now handled here to prevent leaks and also to<br>
+ prevent double freeing.<br>
+<br>
+ Two typos were also cleared up.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=15000 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1816<br>
+<br>
+pcl/pcl/pcuptrn.c<br>
+pcl/pcl/pglfill.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-29 20:43:17 +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=8ba1ead91f1c051df75302dc49531d9f2497ef51">8ba1ead91f1c051df75302dc49531d9f2497ef51</a>
+<blockquote>
+<p>
+ Bug 697545 : Prevent SEGV in hpgl_LB.<br>
+<br>
+ Update code to propagate error codes correctly and and clean up stick fonts.<br>
+<br>
+ Error created using :-<br>
+ MEMENTO_FAILAT=17298 ./membin/gpcl6 -sDEVICE=pbmraw -o /dev/null ./tests_private/pcl/pcl5cfts/fts.1640<br>
+<br>
+pcl/pcl/pglabel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-30 08:33: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=2844006034232cb95fdd295d7fedf5fed8390a8e">2844006034232cb95fdd295d7fedf5fed8390a8e</a>
+<blockquote>
+<p>
+ PDF interpreter Ignore non-array Annots<br>
+<br>
+ Yet another customer file, so no bug report.<br>
+<br>
+ The supplied file is badly broken in several different ways. Most of<br>
+ these Ghostscript already coped with but the file contains a new fault<br>
+ we haven't seen before. The same object is referenced by different pages<br>
+ once as a Font dictionary and once as an Annots array.<br>
+<br>
+ Since the object is actually a font dictionary, the page referencing it<br>
+ as an array fails with an error, because it has the wrong type.<br>
+<br>
+ This commit simply ignores such errors and carries on, emitting the<br>
+ usual warning. Its a little involved as there are several places where<br>
+ we need to check the type of the object.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-28 14:49:14 +0100
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=45920485627a943f07eea0c5b1243b5eb540b498">45920485627a943f07eea0c5b1243b5eb540b498</a>
+<blockquote>
+<p>
+ clusterpush.pl: added excludes for mupdf's mupdfwrap.py.<br>
+<br>
+ Also add mudrawpy product.<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-27 11:04: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=1b4c3669a20cb2b63e49300b03082b189acfe347">1b4c3669a20cb2b63e49300b03082b189acfe347</a>
+<blockquote>
+<p>
+ Bug 702364: Fix missing echogs dependencies<br>
+<br>
+contrib/contrib.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-27 10:36: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=9d2de2ee4c3858095d8dfb05cc7d113bf40d81c1">9d2de2ee4c3858095d8dfb05cc7d113bf40d81c1</a>
+<blockquote>
+<p>
+ Rename devices/contrib.mak to devices/dcontrib.mak<br>
+<br>
+ because we also have contrib/contrib.mak<br>
+<br>
+Makefile.in<br>
+base/unix-gcc.mak<br>
+base/winlib.mak<br>
+devices/dcontrib.mak<br>
+toolbin/headercompile.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-27 10:20:00 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f210e4c009f7d401767336a264c2e4b9cf668216">f210e4c009f7d401767336a264c2e4b9cf668216</a>
+<blockquote>
+<p>
+ Bug 702349: Fix symbol clash between lcms2mt and lcms2<br>
+<br>
+ Shared library (libgs) with lcms2mt could clash if the calling app also<br>
+ included lcms2.<br>
+<br>
+ Using gcc (or compatible) this builds lcms2mt using the -fvisibility=hidden<br>
+ option, so symbols are not exported.<br>
+<br>
+Makefile.in<br>
+base/lcms2mt.mak<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-23 18:23:17 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7c96228899ea05b40cdb31dc5a4c3f61aa0d39e6">7c96228899ea05b40cdb31dc5a4c3f61aa0d39e6</a>
+<blockquote>
+<p>
+ Fix Bug 702014: ps2epsi problems (regression?).<br>
+<br>
+ The ps2epsi and ps2epsi.ps were quite a mess, and relied on non-standard<br>
+ operators only available with -dNOSAFER since we made SAFER the default.<br>
+ Even running ps2epsi with -dNOSAFER (by export GS_OPTIONS=-dNOSAFER)<br>
+ had problems -- it could not even convert examples/colorcir.ps to EPSI<br>
+ (throwing an error about colorcirsave). Both of the aforementioned<br>
+ files are replaced with this commit, and the ps2epsi.bat and ps2epsi.cmd<br>
+ are updated to use the new ps2epsi.ps file<br>
+<br>
+ Also, input files with multiple pages were never correct since the preview<br>
+ was derived only from the first page. The ps2epsi.ps checks if the file is<br>
+ already an EPSF, then don't use eps2write on the input, but warn if the<br>
+ %%Pages comment indicates that there is more than a single page.<br>
+<br>
+ Note that -dNOOUTERSAVE is needed in the invocation so that if we use<br>
+ eps2write, the 'restore' will close the device and write the tempfile<br>
+ with the EPSF.<br>
+<br>
+ Then ps2epsi.ps reads the input file, capturing the BBox, stops after<br>
+ %%EndComments, removes any existing preview, constructs a new preview<br>
+ using the 'bit' device with appropriate parameters, writes the preview<br>
+ in the EPSI Preview format (using writehexstring) and then copies the<br>
+ remainder of the EPSF file to the output.<br>
+<br>
+ The ps2epsi.ps has some checking for valid invocation, since someone<br>
+ may try to use it without the scripts.<br>
+<br>
+ Since all of the actual conversion is done by the ps2epsi.ps, this change<br>
+ makes windows and linux produce equivalent files.<br>
+<br>
+lib/ps2epsi<br>
+lib/ps2epsi.bat<br>
+lib/ps2epsi.cmd<br>
+lib/ps2epsi.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-23 18:22:15 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=01b1eb1ef43952026ed8bf8728744522abfbfc19">01b1eb1ef43952026ed8bf8728744522abfbfc19</a>
+<blockquote>
+<p>
+ Fix gssetgs.bat to use either 32 or 64 bit executables (64-bit preferred).<br>
+<br>
+lib/gssetgs.bat<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-24 14:13: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=f69f7a2c8b05c3f8a4e14d30453dcb599ca8b64d">f69f7a2c8b05c3f8a4e14d30453dcb599ca8b64d</a>
+<blockquote>
+<p>
+ Update msvc.mak to allow for new nmake version.<br>
+<br>
+psi/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-23 11:42: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=6a46e31d5005cf136679ac7c54cb91d91654710d">6a46e31d5005cf136679ac7c54cb91d91654710d</a>
+<blockquote>
+<p>
+ Document that gsapi_set_stdio doesn't affect devices<br>
+<br>
+ Using -sOutputFile=%stdout (counterintuitively) does not direct device output<br>
+ to the stdout handler callback set by gsapi_set_stdio().<br>
+<br>
+doc/API.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-17 16:22:06 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=60a535f9f49fece2761a1c0c8069f87f7514182c">60a535f9f49fece2761a1c0c8069f87f7514182c</a>
+<blockquote>
+<p>
+ Bug 702335: jbig2dec: Refill input buffer upon failure to parse segment header.<br>
+<br>
+ Before commit 2b2dcf4ccf401ed210f03c858b304994749fd2b3 there was<br>
+ a debug message when attempting to parse a a segment header and<br>
+ the data supplied to jbig2dec was not enough. Commit 2b2dcf4<br>
+ incorrectly changed the debug message into a fatal error message,<br>
+ due misinterpreting the message text as something that warranted<br>
+ a fatal error.<br>
+<br>
+ When data was supplied in chunks to jbig2_data_in() in repeated<br>
+ calls such that a segment header's referred-to segment numbers<br>
+ field straddled a chunk boundary then jbig2dec would indicate a<br>
+ fatal error. The file in bug 702335 caused this to happen.<br>
+<br>
+ Instead jbig2dec should be asking the caller for more data so<br>
+ that the entire segment header can be parsed during a single call<br>
+ to jbig2_data_in().<br>
+<br>
+ By convering the fatal error back to a a debug message the problem<br>
+ is resolved. The message itself is also rewored to clearly<br>
+ indicate that the situation is non-fatal and that the caller will<br>
+ be asked to provide more data.<br>
+<br>
+jbig2dec/jbig2_segment.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-16 05:05: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=85b1119bb3493608b1e84acfaa7b27a6e5259b43">85b1119bb3493608b1e84acfaa7b27a6e5259b43</a>
+<blockquote>
+<p>
+ Fix URF filter configuration code.<br>
+<br>
+ I was missing some quoting.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-15 10:22: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=d845756b28a9cdadaf5374cc4fa130963ea65adc">d845756b28a9cdadaf5374cc4fa130963ea65adc</a>
+<blockquote>
+<p>
+ PDF interpreter - reject insane Tc values early<br>
+<br>
+ No bug report, the file is from a customer and confidential.<br>
+<br>
+ The file has been created by a bfo.com product, but then additionally<br>
+ modified by an unknown application. The problem is that the file<br>
+ contains this sequence:<br>
+<br>
+ 1 0 0 0.999999 21.6 9.900086 cm<br>
+ /R3 9 Tf -2147483647 Tc -0.39301 Tw<br>
+ 4.8 -21.95 Td<br>
+ [( )]TJ<br>
+<br>
+ The parameter supplied to Tc is clearly mad. Not invalid but it attempts<br>
+ to move the current point (after drawing the space) by 2,147,483,647<br>
+ unscaled text units. This works out at around 471 miles. Given that this<br>
+ value is the maximum negative 32-bit integer (0xFFFFFFFF) I doubt this<br>
+ is actually intentional.<br>
+<br>
+ The scaling by the CTM causes a limitcheck error when trying to draw<br>
+ the text. We could fix this by running the TJ in a stopped context<br>
+ but that would be expensive performance-wise because TJ is a very common<br>
+ operator.<br>
+<br>
+ Instead this commit checks that the result of Tc, when scaled by the<br>
+ CTM, will fit into our fixed-point representation. If it does not then<br>
+ we throw an error there and then. The PDF interpreter then catches that<br>
+ during the Tc operator (which is less commonly used than TJ) and emits<br>
+ a warning, while ignoring the Tc value.<br>
+<br>
+ This may, of course, result in incorrect output, though it seems<br>
+ unlikely given the size of the numbers involved, which is why we give<br>
+ the user a warning.<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-10 15:35:02 -0700
+</strong>
+<br>ray &lt;Ray.Johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b503c46c124cf5aaa82a71e28f624f2ef2b71e71">b503c46c124cf5aaa82a71e28f624f2ef2b71e71</a>
+<blockquote>
+<p>
+ Bug 702320: Valgrind complains about UMR.<br>
+<br>
+ The file for this bug does show that the stroke_color stack based struct<br>
+ in not initialized. Init fill_color and stroke_color. This is probably a<br>
+ bug tail from the fill_stroke commit.<br>
+<br>
+ Also explicitly set 'zeros' to 0 to clarify the expected contents.<br>
+<br>
+base/gxclbits.c<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-10 18:04:14 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1b08043d16bb10d939e858ea8d650807301d6e05">1b08043d16bb10d939e858ea8d650807301d6e05</a>
+<blockquote>
+<p>
+ Remove some errant remains of Google analytics<br>
+<br>
+ The GA runes are now added by Apache when files are served from casper.<br>
+<br>
+doc/API.htm<br>
+doc/C-style.htm<br>
+doc/Commprod.htm<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/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-10 11:11: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=8f52736b546329ae2e3ad760f722eac0dec6994e">8f52736b546329ae2e3ad760f722eac0dec6994e</a>
+<blockquote>
+<p>
+ Update/augment ETS source copyrights<br>
+<br>
+base/ets.c<br>
+base/ets.h<br>
+base/ets_tm.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-09 18:07: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=cbb82ba4baaa2a9da11c603d742a58a51c4e50e1">cbb82ba4baaa2a9da11c603d742a58a51c4e50e1</a>
+<blockquote>
+<p>
+ Update copyright to 2020<br>
+<br>
+Resource/CIDFont/ArtifexBullet<br>
+Resource/ColorSpace/DefaultCMYK<br>
+Resource/ColorSpace/DefaultGray<br>
+Resource/ColorSpace/DefaultRGB<br>
+Resource/ColorSpace/TrivialCMYK<br>
+Resource/ColorSpace/sGray<br>
+Resource/ColorSpace/sRGB<br>
+Resource/Decoding/FCO_Dingbats<br>
+Resource/Decoding/FCO_Symbol<br>
+Resource/Decoding/FCO_Unicode<br>
+Resource/Decoding/FCO_Wingdings<br>
+Resource/Decoding/Latin1<br>
+Resource/Decoding/StandardEncoding<br>
+Resource/Decoding/Unicode<br>
+Resource/Encoding/CEEncoding<br>
+Resource/Encoding/ExpertEncoding<br>
+Resource/Encoding/ExpertSubsetEncoding<br>
+Resource/Encoding/NotDefEncoding<br>
+Resource/Encoding/Wingdings<br>
+Resource/Init/FCOfontmap-PCLPS2<br>
+Resource/Init/Fontmap.GS<br>
+Resource/Init/gs_agl.ps<br>
+Resource/Init/gs_btokn.ps<br>
+Resource/Init/gs_cff.ps<br>
+Resource/Init/gs_cidcm.ps<br>
+Resource/Init/gs_ciddc.ps<br>
+Resource/Init/gs_cidfm.ps<br>
+Resource/Init/gs_cidfn.ps<br>
+Resource/Init/gs_cidtt.ps<br>
+Resource/Init/gs_cmap.ps<br>
+Resource/Init/gs_cspace.ps<br>
+Resource/Init/gs_dbt_e.ps<br>
+Resource/Init/gs_diskn.ps<br>
+Resource/Init/gs_dps1.ps<br>
+Resource/Init/gs_dps2.ps<br>
+Resource/Init/gs_dscp.ps<br>
+Resource/Init/gs_epsf.ps<br>
+Resource/Init/gs_fapi.ps<br>
+Resource/Init/gs_fntem.ps<br>
+Resource/Init/gs_fonts.ps<br>
+Resource/Init/gs_frsd.ps<br>
+Resource/Init/gs_icc.ps<br>
+Resource/Init/gs_il1_e.ps<br>
+Resource/Init/gs_init.ps<br>
+Resource/Init/gs_lev2.ps<br>
+Resource/Init/gs_ll3.ps<br>
+Resource/Init/gs_mex_e.ps<br>
+Resource/Init/gs_mgl_e.ps<br>
+Resource/Init/gs_mro_e.ps<br>
+Resource/Init/gs_pdf_e.ps<br>
+Resource/Init/gs_pdfwr.ps<br>
+Resource/Init/gs_res.ps<br>
+Resource/Init/gs_resmp.ps<br>
+Resource/Init/gs_setpd.ps<br>
+Resource/Init/gs_statd.ps<br>
+Resource/Init/gs_std_e.ps<br>
+Resource/Init/gs_sym_e.ps<br>
+Resource/Init/gs_trap.ps<br>
+Resource/Init/gs_ttf.ps<br>
+Resource/Init/gs_typ32.ps<br>
+Resource/Init/gs_typ42.ps<br>
+Resource/Init/gs_type1.ps<br>
+Resource/Init/gs_wan_e.ps<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>
+Resource/Init/pdf_rbld.ps<br>
+Resource/Init/pdf_sec.ps<br>
+Resource/SubstCID/CNS1-WMode<br>
+Resource/SubstCID/GB1-WMode<br>
+Resource/SubstCID/Japan1-WMode<br>
+Resource/SubstCID/Korea1-WMode<br>
+arch/arch_autoconf.h.in<br>
+arch/windows-arm-msvc.h<br>
+arch/windows-x64-msvc.h<br>
+arch/windows-x86-msvc.h<br>
+base/all-arch.mak<br>
+base/assert_.h<br>
+base/bench.c<br>
+base/bobbin.c<br>
+base/bobbin.h<br>
+base/claptrap-impl.h<br>
+base/claptrap.c<br>
+base/claptrap.h<br>
+base/ctype_.h<br>
+base/dirent_.h<br>
+base/dos_.h<br>
+base/echogs.c<br>
+base/errno_.h<br>
+base/ets.h<br>
+base/ets_tm.h<br>
+base/expat.mak<br>
+base/fapi_bs.mak<br>
+base/fapi_ft.c<br>
+base/fapibstm.c<br>
+base/fapiufst.c<br>
+base/fcntl_.h<br>
+base/freetype.mak<br>
+base/gconf.c<br>
+base/gconf.h<br>
+base/gdbflags.h<br>
+base/gdebug.h<br>
+base/gdevabuf.c<br>
+base/gdevbbox.c<br>
+base/gdevbbox.h<br>
+base/gdevdbit.c<br>
+base/gdevdcrd.c<br>
+base/gdevdcrd.h<br>
+base/gdevddrw.c<br>
+base/gdevddrw.h<br>
+base/gdevdevn.c<br>
+base/gdevdevn.h<br>
+base/gdevdevnprn.h<br>
+base/gdevdflt.c<br>
+base/gdevdgbr.c<br>
+base/gdevdrop.c<br>
+base/gdevdsha.c<br>
+base/gdevemap.c<br>
+base/gdevepo.c<br>
+base/gdevepo.h<br>
+base/gdevflp.c<br>
+base/gdevflp.h<br>
+base/gdevhit.c<br>
+base/gdevkrnlsclass.c<br>
+base/gdevkrnlsclass.h<br>
+base/gdevm1.c<br>
+base/gdevm16.c<br>
+base/gdevm2.c<br>
+base/gdevm24.c<br>
+base/gdevm32.c<br>
+base/gdevm4.c<br>
+base/gdevm40.c<br>
+base/gdevm48.c<br>
+base/gdevm56.c<br>
+base/gdevm64.c<br>
+base/gdevm8.c<br>
+base/gdevmem.c<br>
+base/gdevmem.h<br>
+base/gdevmpla.c<br>
+base/gdevmpla.h<br>
+base/gdevmplt.c<br>
+base/gdevmplt.h<br>
+base/gdevmr1.c<br>
+base/gdevmr2n.c<br>
+base/gdevmr8n.c<br>
+base/gdevmrop.h<br>
+base/gdevmrun.c<br>
+base/gdevmrun.h<br>
+base/gdevmx.c<br>
+base/gdevnfwd.c<br>
+base/gdevoflt.c<br>
+base/gdevoflt.h<br>
+base/gdevp14.c<br>
+base/gdevp14.h<br>
+base/gdevpccm.c<br>
+base/gdevpccm.h<br>
+base/gdevpipe.c<br>
+base/gdevplnx.c<br>
+base/gdevplnx.h<br>
+base/gdevppla.c<br>
+base/gdevppla.h<br>
+base/gdevprn.c<br>
+base/gdevprn.h<br>
+base/gdevpxat.h<br>
+base/gdevpxen.h<br>
+base/gdevpxop.h<br>
+base/gdevrops.c<br>
+base/gdevsclass.c<br>
+base/gdevsclass.h<br>
+base/gdevvec.c<br>
+base/gdevvec.h<br>
+base/gen_ordered.c<br>
+base/gen_ordered.h<br>
+base/genarch.c<br>
+base/genconf.c<br>
+base/gendev.c<br>
+base/genht.c<br>
+base/gp.h<br>
+base/gp_dosfe.c<br>
+base/gp_dosfs.c<br>
+base/gp_dvx.c<br>
+base/gp_getnv.c<br>
+base/gp_mktmp.c<br>
+base/gp_msdll.c<br>
+base/gp_msdos.c<br>
+base/gp_mshdl.c<br>
+base/gp_mslib.c<br>
+base/gp_mspol.c<br>
+base/gp_msprn.c<br>
+base/gp_mswin.c<br>
+base/gp_mswin.h<br>
+base/gp_nsync.c<br>
+base/gp_ntfs.c<br>
+base/gp_nxpsprn.c<br>
+base/gp_os2.c<br>
+base/gp_os2.h<br>
+base/gp_os2fs.c<br>
+base/gp_os2pr.c<br>
+base/gp_os9.c<br>
+base/gp_paper.c<br>
+base/gp_psync.c<br>
+base/gp_stdia.c<br>
+base/gp_stdin.c<br>
+base/gp_strdl.c<br>
+base/gp_unifn.c<br>
+base/gp_unifs.c<br>
+base/gp_unix.c<br>
+base/gp_upapr.c<br>
+base/gp_vms.c<br>
+base/gp_wgetv.c<br>
+base/gp_win32.c<br>
+base/gp_winfs.c<br>
+base/gp_winfs2.c<br>
+base/gp_wpapr.c<br>
+base/gp_wsync.c<br>
+base/gp_wutf8.c<br>
+base/gp_wxpsprn.cpp<br>
+base/gpcheck.h<br>
+base/gpgetenv.h<br>
+base/gpmisc.c<br>
+base/gpmisc.h<br>
+base/gpsync.h<br>
+base/gs.mak<br>
+base/gs_dll_call.h<br>
+base/gs_mgl_e.h<br>
+base/gs_mro_e.h<br>
+base/gsalloc.c<br>
+base/gsalloc.h<br>
+base/gsargs.c<br>
+base/gsargs.h<br>
+base/gsbitcom.c<br>
+base/gsbitmap.h<br>
+base/gsbitops.c<br>
+base/gsbitops.h<br>
+base/gsbittab.c<br>
+base/gsbittab.h<br>
+base/gsccode.h<br>
+base/gsccolor.h<br>
+base/gscdef.c<br>
+base/gscdefs.h<br>
+base/gscdevn.c<br>
+base/gscdevn.h<br>
+base/gscedata.c<br>
+base/gscedata.h<br>
+base/gscencs.c<br>
+base/gscencs.h<br>
+base/gschar.c<br>
+base/gschar.h<br>
+base/gschar0.c<br>
+base/gscicach.c<br>
+base/gscicach.h<br>
+base/gscie.c<br>
+base/gscie.h<br>
+base/gsciemap.c<br>
+base/gscindex.h<br>
+base/gsclipsr.c<br>
+base/gsclipsr.h<br>
+base/gscms.h<br>
+base/gscolor.c<br>
+base/gscolor.h<br>
+base/gscolor1.c<br>
+base/gscolor1.h<br>
+base/gscolor2.c<br>
+base/gscolor2.h<br>
+base/gscolor3.c<br>
+base/gscolor3.h<br>
+base/gscompt.h<br>
+base/gscoord.c<br>
+base/gscoord.h<br>
+base/gscparam.c<br>
+base/gscpixel.c<br>
+base/gscpixel.h<br>
+base/gscpm.h<br>
+base/gscrd.c<br>
+base/gscrd.h<br>
+base/gscrdp.c<br>
+base/gscrdp.h<br>
+base/gscrypt1.c<br>
+base/gscrypt1.h<br>
+base/gscscie.c<br>
+base/gscsel.h<br>
+base/gscsepr.c<br>
+base/gscsepr.h<br>
+base/gscspace.c<br>
+base/gscspace.h<br>
+base/gscssub.c<br>
+base/gscssub.h<br>
+base/gsdcolor.h<br>
+base/gsdevice.c<br>
+base/gsdevice.h<br>
+base/gsdevmem.c<br>
+base/gsdll.h<br>
+base/gsdllwin.h<br>
+base/gsdparam.c<br>
+base/gsdps1.c<br>
+base/gsdsrc.c<br>
+base/gsdsrc.h<br>
+base/gsequivc.c<br>
+base/gsequivc.h<br>
+base/gserrors.h<br>
+base/gsexit.h<br>
+base/gsfcid.c<br>
+base/gsfcid2.c<br>
+base/gsfcmap.c<br>
+base/gsfcmap.h<br>
+base/gsfcmap1.c<br>
+base/gsflip.c<br>
+base/gsflip.h<br>
+base/gsfname.c<br>
+base/gsfname.h<br>
+base/gsfont.c<br>
+base/gsfont.h<br>
+base/gsfont0.c<br>
+base/gsfont0c.c<br>
+base/gsform1.h<br>
+base/gsftopts.h<br>
+base/gsfunc.c<br>
+base/gsfunc.h<br>
+base/gsfunc0.c<br>
+base/gsfunc0.h<br>
+base/gsfunc3.c<br>
+base/gsfunc3.h<br>
+base/gsfunc4.c<br>
+base/gsfunc4.h<br>
+base/gsgc.h<br>
+base/gsgcache.c<br>
+base/gsgcache.h<br>
+base/gsgdata.c<br>
+base/gsgdata.h<br>
+base/gsgstate.c<br>
+base/gsgstate.h<br>
+base/gshsb.c<br>
+base/gshsb.h<br>
+base/gsht.c<br>
+base/gsht.h<br>
+base/gsht1.c<br>
+base/gsht1.h<br>
+base/gshtscr.c<br>
+base/gshtx.c<br>
+base/gshtx.h<br>
+base/gsicc.c<br>
+base/gsicc.h<br>
+base/gsicc_cache.c<br>
+base/gsicc_cache.h<br>
+base/gsicc_cms.h<br>
+base/gsicc_create.c<br>
+base/gsicc_create.h<br>
+base/gsicc_lcms2.c<br>
+base/gsicc_lcms2mt.c<br>
+base/gsicc_manage.c<br>
+base/gsicc_manage.h<br>
+base/gsicc_monitorcm.c<br>
+base/gsicc_nocm.c<br>
+base/gsicc_profilecache.c<br>
+base/gsicc_profilecache.h<br>
+base/gsicc_replacecm.c<br>
+base/gsimage.c<br>
+base/gsimage.h<br>
+base/gsimpath.c<br>
+base/gsinit.c<br>
+base/gsio.h<br>
+base/gsiodev.c<br>
+base/gsiodevs.c<br>
+base/gsiodisk.c<br>
+base/gsioram.c<br>
+base/gsiorom.c<br>
+base/gsiorom.h<br>
+base/gsipar3x.h<br>
+base/gsiparam.h<br>
+base/gsiparm3.h<br>
+base/gsiparm4.h<br>
+base/gsjconf.h<br>
+base/gsjmorec.h<br>
+base/gslib.c<br>
+base/gslib.h<br>
+base/gslibctx.c<br>
+base/gslibctx.h<br>
+base/gsline.c<br>
+base/gsline.h<br>
+base/gslparam.h<br>
+base/gsmalloc.c<br>
+base/gsmalloc.h<br>
+base/gsmatrix.c<br>
+base/gsmatrix.h<br>
+base/gsmchunk.c<br>
+base/gsmchunk.h<br>
+base/gsmd5.c<br>
+base/gsmd5.h<br>
+base/gsmdebug.h<br>
+base/gsmemory.c<br>
+base/gsmemory.h<br>
+base/gsmemraw.h<br>
+base/gsmemret.c<br>
+base/gsmemret.h<br>
+base/gsmisc.c<br>
+base/gsnamecl.c<br>
+base/gsnamecl.h<br>
+base/gsncdummy.c<br>
+base/gsncdummy.h<br>
+base/gsnogc.c<br>
+base/gsnogc.h<br>
+base/gsnotify.c<br>
+base/gsnotify.h<br>
+base/gsovrc.c<br>
+base/gsovrc.h<br>
+base/gspaint.c<br>
+base/gspaint.h<br>
+base/gsparam.c<br>
+base/gsparam.h<br>
+base/gsparam2.c<br>
+base/gsparams.c<br>
+base/gsparams.h<br>
+base/gsparamx.c<br>
+base/gsparamx.h<br>
+base/gspath.c<br>
+base/gspath.h<br>
+base/gspath1.c<br>
+base/gspath2.h<br>
+base/gspcolor.c<br>
+base/gspcolor.h<br>
+base/gspenum.h<br>
+base/gspmdrv.c<br>
+base/gspmdrv.h<br>
+base/gspmdrv.rc<br>
+base/gsptype1.c<br>
+base/gsptype1.h<br>
+base/gsptype2.c<br>
+base/gsptype2.h<br>
+base/gsrect.h<br>
+base/gsrefct.h<br>
+base/gsromfs0.c<br>
+base/gsrop.c<br>
+base/gsrop.h<br>
+base/gsroprun.c<br>
+base/gsroprun1.h<br>
+base/gsroprun24.h<br>
+base/gsroprun8.h<br>
+base/gsropt.h<br>
+base/gsroptab.c<br>
+base/gsserial.c<br>
+base/gsserial.h<br>
+base/gsshade.c<br>
+base/gsshade.h<br>
+base/gssprintf.h<br>
+base/gsstate.c<br>
+base/gsstate.h<br>
+base/gsstrl.h<br>
+base/gsstrtok.h<br>
+base/gsstruct.h<br>
+base/gsstype.h<br>
+base/gstext.c<br>
+base/gstext.h<br>
+base/gstiffio.c<br>
+base/gstiffio.h<br>
+base/gstparam.h<br>
+base/gstrans.c<br>
+base/gstrans.h<br>
+base/gstrap.c<br>
+base/gstrap.h<br>
+base/gstype1.c<br>
+base/gstype1.h<br>
+base/gstype2.c<br>
+base/gstype42.c<br>
+base/gstypes.h<br>
+base/gsuid.h<br>
+base/gsutil.c<br>
+base/gsutil.h<br>
+base/gswin.rc<br>
+base/gsxfont.h<br>
+base/gx.h<br>
+base/gxacpath.c<br>
+base/gxalloc.h<br>
+base/gxalpha.h<br>
+base/gxarith.h<br>
+base/gxband.h<br>
+base/gxbcache.c<br>
+base/gxbcache.h<br>
+base/gxbitfmt.h<br>
+base/gxbitmap.h<br>
+base/gxbitops.h<br>
+base/gxblend.c<br>
+base/gxblend.h<br>
+base/gxblend1.c<br>
+base/gxccache.c<br>
+base/gxccman.c<br>
+base/gxcdevn.h<br>
+base/gxchar.c<br>
+base/gxchar.h<br>
+base/gxchrout.c<br>
+base/gxchrout.h<br>
+base/gxcht.c<br>
+base/gxcid.h<br>
+base/gxcie.h<br>
+base/gxcindex.h<br>
+base/gxclbits.c<br>
+base/gxcldev.h<br>
+base/gxclfile.c<br>
+base/gxclimag.c<br>
+base/gxclio.h<br>
+base/gxclip.c<br>
+base/gxclip.h<br>
+base/gxclip2.c<br>
+base/gxclip2.h<br>
+base/gxclipm.c<br>
+base/gxclipm.h<br>
+base/gxclipsr.h<br>
+base/gxclist.c<br>
+base/gxclist.h<br>
+base/gxcllzw.c<br>
+base/gxclmem.c<br>
+base/gxclmem.h<br>
+base/gxclpage.c<br>
+base/gxclpage.h<br>
+base/gxclpath.c<br>
+base/gxclpath.h<br>
+base/gxclrast.c<br>
+base/gxclread.c<br>
+base/gxclrect.c<br>
+base/gxclthrd.c<br>
+base/gxclthrd.h<br>
+base/gxclutil.c<br>
+base/gxclzlib.c<br>
+base/gxcmap.c<br>
+base/gxcmap.h<br>
+base/gxcolor2.h<br>
+base/gxcomp.h<br>
+base/gxcoord.h<br>
+base/gxcpath.c<br>
+base/gxcpath.h<br>
+base/gxcspace.h<br>
+base/gxctable.c<br>
+base/gxctable.h<br>
+base/gxcvalue.h<br>
+base/gxdcconv.c<br>
+base/gxdcconv.h<br>
+base/gxdcolor.c<br>
+base/gxdcolor.h<br>
+base/gxdda.h<br>
+base/gxdevbuf.h<br>
+base/gxdevcli.h<br>
+base/gxdevice.h<br>
+base/gxdevmem.h<br>
+base/gxdevndi.c<br>
+base/gxdevrop.h<br>
+base/gxdevsop.h<br>
+base/gxdht.h<br>
+base/gxdhtres.h<br>
+base/gxdhtserial.c<br>
+base/gxdhtserial.h<br>
+base/gxdither.h<br>
+base/gxdownscale.c<br>
+base/gxdownscale.h<br>
+base/gxdtfill.h<br>
+base/gxfapi.c<br>
+base/gxfapi.h<br>
+base/gxfapiu.c<br>
+base/gxfapiu.h<br>
+base/gxfarith.h<br>
+base/gxfcache.h<br>
+base/gxfcid.h<br>
+base/gxfcmap.h<br>
+base/gxfcmap1.h<br>
+base/gxfill.c<br>
+base/gxfill.h<br>
+base/gxfillsl.h<br>
+base/gxfilltr.h<br>
+base/gxfillts.h<br>
+base/gxfixed.h<br>
+base/gxfmap.h<br>
+base/gxfont.h<br>
+base/gxfont0.h<br>
+base/gxfont0c.h<br>
+base/gxfont1.h<br>
+base/gxfont42.h<br>
+base/gxfrac.h<br>
+base/gxftype.h<br>
+base/gxfunc.h<br>
+base/gxgetbit.h<br>
+base/gxgstate.h<br>
+base/gxhintn.c<br>
+base/gxhintn.h<br>
+base/gxhintn1.c<br>
+base/gxhldevc.c<br>
+base/gxhldevc.h<br>
+base/gxht.c<br>
+base/gxht.h<br>
+base/gxht_thresh.c<br>
+base/gxht_thresh.h<br>
+base/gxhtbit.c<br>
+base/gxhttile.h<br>
+base/gxhttype.h<br>
+base/gxi12bit.c<br>
+base/gxi16bit.c<br>
+base/gxiclass.h<br>
+base/gxicolor.c<br>
+base/gxidata.c<br>
+base/gxifast.c<br>
+base/gximag3x.c<br>
+base/gximag3x.h<br>
+base/gximage.c<br>
+base/gximage.h<br>
+base/gximage1.c<br>
+base/gximage3.c<br>
+base/gximage3.h<br>
+base/gximage4.c<br>
+base/gximask.c<br>
+base/gximask.h<br>
+base/gximdecode.c<br>
+base/gximono.c<br>
+base/gxiodev.h<br>
+base/gxiparam.h<br>
+base/gxipixel.c<br>
+base/gxiscale.c<br>
+base/gxline.h<br>
+base/gxlum.h<br>
+base/gxmatrix.h<br>
+base/gxmclip.c<br>
+base/gxmclip.h<br>
+base/gxobj.h<br>
+base/gxoprect.c<br>
+base/gxoprect.h<br>
+base/gxp1fill.c<br>
+base/gxp1impl.h<br>
+base/gxpaint.c<br>
+base/gxpaint.h<br>
+base/gxpath.c<br>
+base/gxpath.h<br>
+base/gxpath2.c<br>
+base/gxpcache.h<br>
+base/gxpcmap.c<br>
+base/gxpcolor.h<br>
+base/gxpcopy.c<br>
+base/gxpdash.c<br>
+base/gxpflat.c<br>
+base/gxrplane.h<br>
+base/gxsample.c<br>
+base/gxsample.h<br>
+base/gxsamplp.h<br>
+base/gxscanc.c<br>
+base/gxscanc.h<br>
+base/gxshade.c<br>
+base/gxshade.h<br>
+base/gxshade1.c<br>
+base/gxshade4.c<br>
+base/gxshade4.h<br>
+base/gxshade6.c<br>
+base/gxstate.h<br>
+base/gxstdio.h<br>
+base/gxstroke.c<br>
+base/gxsync.c<br>
+base/gxsync.h<br>
+base/gxtext.h<br>
+base/gxtmap.h<br>
+base/gxttf.h<br>
+base/gxttfb.c<br>
+base/gxttfb.h<br>
+base/gxtype1.c<br>
+base/gxtype1.h<br>
+base/gxxfont.h<br>
+base/gzacpath.h<br>
+base/gzcpath.h<br>
+base/gzht.h<br>
+base/gzline.h<br>
+base/gzpath.h<br>
+base/gzspotan.c<br>
+base/gzspotan.h<br>
+base/gzstate.h<br>
+base/ijs.mak<br>
+base/instcopy<br>
+base/jbig2.mak<br>
+base/jerror_.h<br>
+base/jmemcust.c<br>
+base/jmemcust.h<br>
+base/jpeg.mak<br>
+base/jpegxr.mak<br>
+base/lcms2.mak<br>
+base/lcms2mt.mak<br>
+base/lcups.mak<br>
+base/lcupsi.mak<br>
+base/ldf_jb2.mak<br>
+base/lib.mak<br>
+base/locale_.h<br>
+base/lwf_jp2.mak<br>
+base/malloc_.h<br>
+base/math_.h<br>
+base/memento.c<br>
+base/memento.h<br>
+base/memory_.h<br>
+base/mkromfs.c<br>
+base/msvccmd.mak<br>
+base/msvclib.mak<br>
+base/msvctail.mak<br>
+base/openjpeg.mak<br>
+base/openvms.mak<br>
+base/openvms.mmk<br>
+base/pack_ps.c<br>
+base/pcwin.mak<br>
+base/pipe_.h<br>
+base/png.mak<br>
+base/png_.h<br>
+base/ramfs.c<br>
+base/ramfs.h<br>
+base/sa85d.c<br>
+base/sa85d.h<br>
+base/sa85x.h<br>
+base/saes.c<br>
+base/saes.h<br>
+base/sarc4.c<br>
+base/sarc4.h<br>
+base/sbcp.c<br>
+base/sbcp.h<br>
+base/sbtx.h<br>
+base/scanchar.h<br>
+base/scantab.c<br>
+base/scf.h<br>
+base/scfd.c<br>
+base/scfdgen.c<br>
+base/scfdtab.c<br>
+base/scfe.c<br>
+base/scfetab.c<br>
+base/scfparam.c<br>
+base/scfx.h<br>
+base/scommon.h<br>
+base/sdcparam.c<br>
+base/sdcparam.h<br>
+base/sdct.h<br>
+base/sdctc.c<br>
+base/sdctd.c<br>
+base/sdcte.c<br>
+base/sddparam.c<br>
+base/sdeparam.c<br>
+base/seexec.c<br>
+base/setjmp_.h<br>
+base/sfilter.h<br>
+base/sfilter1.c<br>
+base/sfilter2.c<br>
+base/sfxboth.c<br>
+base/sfxcommon.c<br>
+base/sfxfd.c<br>
+base/sfxstdio.c<br>
+base/shc.c<br>
+base/shc.h<br>
+base/sidscale.c<br>
+base/sidscale.h<br>
+base/siinterp.c<br>
+base/siinterp.h<br>
+base/simscale.c<br>
+base/simscale.h<br>
+base/siscale.c<br>
+base/siscale.h<br>
+base/siscale_cal.c<br>
+base/sisparam.h<br>
+base/sjbig2.c<br>
+base/sjbig2.h<br>
+base/sjbig2_luratech.c<br>
+base/sjbig2_luratech.h<br>
+base/sjpeg.h<br>
+base/sjpegc.c<br>
+base/sjpegd.c<br>
+base/sjpege.c<br>
+base/sjpx_luratech.c<br>
+base/sjpx_luratech.h<br>
+base/sjpx_none.c<br>
+base/sjpx_openjpeg.c<br>
+base/sjpx_openjpeg.h<br>
+base/slzwc.c<br>
+base/slzwd.c<br>
+base/slzwe.c<br>
+base/slzwx.h<br>
+base/smd5.c<br>
+base/smd5.h<br>
+base/smtf.h<br>
+base/spdiff.c<br>
+base/spdiffx.h<br>
+base/spngp.c<br>
+base/spngpx.h<br>
+base/spprint.c<br>
+base/spprint.h<br>
+base/spsdf.c<br>
+base/spsdf.h<br>
+base/srdline.h<br>
+base/srld.c<br>
+base/srle.c<br>
+base/srlx.h<br>
+base/ssha2.c<br>
+base/ssha2.h<br>
+base/sstring.c<br>
+base/sstring.h<br>
+base/stat_.h<br>
+base/std.h<br>
+base/stdint_.h<br>
+base/stdio_.h<br>
+base/stdpre.h<br>
+base/stream.c<br>
+base/stream.h<br>
+base/strimpl.h<br>
+base/string_.h<br>
+base/strmio.c<br>
+base/strmio.h<br>
+base/stub.mak<br>
+base/szlibc.c<br>
+base/szlibd.c<br>
+base/szlibe.c<br>
+base/szlibx.h<br>
+base/szlibxx.h<br>
+base/tiff.mak<br>
+base/time_.h<br>
+base/ttcalc.c<br>
+base/ttcalc.h<br>
+base/ttcommon.h<br>
+base/ttconf.h<br>
+base/ttconfig.h<br>
+base/ttfinp.c<br>
+base/ttfinp.h<br>
+base/ttfmain.c<br>
+base/ttfmemd.c<br>
+base/ttfmemd.h<br>
+base/ttfoutl.h<br>
+base/ttfsfnt.h<br>
+base/ttinterp.c<br>
+base/ttinterp.h<br>
+base/ttload.c<br>
+base/ttload.h<br>
+base/ttmisc.h<br>
+base/ttobjs.c<br>
+base/ttobjs.h<br>
+base/tttables.h<br>
+base/tttype.h<br>
+base/tttypes.h<br>
+base/ugcclib.mak<br>
+base/unistd_.h<br>
+base/unix-aux.mak<br>
+base/unix-dll.mak<br>
+base/unix-end.mak<br>
+base/unix-gcc.mak<br>
+base/unixansi.mak<br>
+base/unixhead.mak<br>
+base/unixinst.mak<br>
+base/unixlink.mak<br>
+base/valgrind.h<br>
+base/version.mak<br>
+base/vms_x_fix.h<br>
+base/vmsmath.h<br>
+base/windows_.h<br>
+base/winlib.mak<br>
+base/winplat.mak<br>
+base/winrtsup.cpp<br>
+base/winrtsup.h<br>
+base/wrfont.c<br>
+base/wrfont.h<br>
+base/write_t1.c<br>
+base/write_t1.h<br>
+base/write_t2.c<br>
+base/write_t2.h<br>
+base/x_.h<br>
+base/zlib.mak<br>
+configure.ac<br>
+contrib/gdevadmp.c<br>
+devices/contrib.mak<br>
+devices/devs.mak<br>
+devices/gdev3852.c<br>
+devices/gdev4081.c<br>
+devices/gdev8510.c<br>
+devices/gdev8bcm.c<br>
+devices/gdev8bcm.h<br>
+devices/gdevatx.c<br>
+devices/gdevbit.c<br>
+devices/gdevbj10.c<br>
+devices/gdevbjc.h<br>
+devices/gdevbjcl.c<br>
+devices/gdevbjcl.h<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/gdevdsp.c<br>
+devices/gdevdsp.h<br>
+devices/gdevdsp2.h<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/gdevhl7x.c<br>
+devices/gdevicov.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/gdevmeds.c<br>
+devices/gdevmeds.h<br>
+devices/gdevmgr.c<br>
+devices/gdevmgr.h<br>
+devices/gdevmiff.c<br>
+devices/gdevn533.c<br>
+devices/gdevo182.c<br>
+devices/gdevokii.c<br>
+devices/gdevpbm.c<br>
+devices/gdevpcl.c<br>
+devices/gdevpcl.h<br>
+devices/gdevpcx.c<br>
+devices/gdevpdfimg.c<br>
+devices/gdevpe.c<br>
+devices/gdevperm.c<br>
+devices/gdevphex.c<br>
+devices/gdevpjet.c<br>
+devices/gdevplan.c<br>
+devices/gdevplib.c<br>
+devices/gdevplib.h<br>
+devices/gdevpm.h<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/gdevsnfb.c<br>
+devices/gdevsppr.c<br>
+devices/gdevstc.c<br>
+devices/gdevstc.h<br>
+devices/gdevstc1.c<br>
+devices/gdevstc2.c<br>
+devices/gdevstc3.c<br>
+devices/gdevstc4.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/gdevtrac.c<br>
+devices/gdevtsep.c<br>
+devices/gdevupd.c<br>
+devices/gdevwpr2.c<br>
+devices/gdevx.c<br>
+devices/gdevx.h<br>
+devices/gdevxalt.c<br>
+devices/gdevxcf.c<br>
+devices/gdevxcmp.c<br>
+devices/gdevxcmp.h<br>
+devices/gdevxini.c<br>
+devices/gdevxres.c<br>
+devices/gxfcopy.c<br>
+devices/gxfcopy.h<br>
+devices/minftrsz.c<br>
+devices/minftrsz.h<br>
+devices/rinkj/evenbetter-rll.c<br>
+devices/rinkj/evenbetter-rll.h<br>
+devices/rinkj/rinkj-byte-stream.c<br>
+devices/rinkj/rinkj-byte-stream.h<br>
+devices/rinkj/rinkj-config.c<br>
+devices/rinkj/rinkj-config.h<br>
+devices/rinkj/rinkj-device.c<br>
+devices/rinkj/rinkj-device.h<br>
+devices/rinkj/rinkj-dither.c<br>
+devices/rinkj/rinkj-dither.h<br>
+devices/rinkj/rinkj-epson870.c<br>
+devices/rinkj/rinkj-epson870.h<br>
+devices/rinkj/rinkj-screen-eb.c<br>
+devices/rinkj/rinkj-screen-eb.h<br>
+devices/vector/gdevagl.c<br>
+devices/vector/gdevagl.h<br>
+devices/vector/gdevpdf.c<br>
+devices/vector/gdevpdfb.c<br>
+devices/vector/gdevpdfb.h<br>
+devices/vector/gdevpdfc.c<br>
+devices/vector/gdevpdfc.h<br>
+devices/vector/gdevpdfd.c<br>
+devices/vector/gdevpdfe.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfg.h<br>
+devices/vector/gdevpdfi.c<br>
+devices/vector/gdevpdfj.c<br>
+devices/vector/gdevpdfk.c<br>
+devices/vector/gdevpdfm.c<br>
+devices/vector/gdevpdfo.c<br>
+devices/vector/gdevpdfo.h<br>
+devices/vector/gdevpdfp.c<br>
+devices/vector/gdevpdfr.c<br>
+devices/vector/gdevpdft.c<br>
+devices/vector/gdevpdfu.c<br>
+devices/vector/gdevpdfv.c<br>
+devices/vector/gdevpdfx.h<br>
+devices/vector/gdevpdt.c<br>
+devices/vector/gdevpdt.h<br>
+devices/vector/gdevpdtb.c<br>
+devices/vector/gdevpdtb.h<br>
+devices/vector/gdevpdtc.c<br>
+devices/vector/gdevpdtd.c<br>
+devices/vector/gdevpdtd.h<br>
+devices/vector/gdevpdte.c<br>
+devices/vector/gdevpdtf.c<br>
+devices/vector/gdevpdtf.h<br>
+devices/vector/gdevpdti.c<br>
+devices/vector/gdevpdti.h<br>
+devices/vector/gdevpdts.c<br>
+devices/vector/gdevpdts.h<br>
+devices/vector/gdevpdtt.c<br>
+devices/vector/gdevpdtt.h<br>
+devices/vector/gdevpdtv.c<br>
+devices/vector/gdevpdtv.h<br>
+devices/vector/gdevpdtw.c<br>
+devices/vector/gdevpdtw.h<br>
+devices/vector/gdevpdtx.h<br>
+devices/vector/gdevpsdf.h<br>
+devices/vector/gdevpsdi.c<br>
+devices/vector/gdevpsdp.c<br>
+devices/vector/gdevpsds.c<br>
+devices/vector/gdevpsds.h<br>
+devices/vector/gdevpsdu.c<br>
+devices/vector/gdevpsf.h<br>
+devices/vector/gdevpsf1.c<br>
+devices/vector/gdevpsf2.c<br>
+devices/vector/gdevpsfm.c<br>
+devices/vector/gdevpsft.c<br>
+devices/vector/gdevpsfu.c<br>
+devices/vector/gdevpsfx.c<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>
+devices/vector/opdfread.ps<br>
+devices/vector/whitelst.c<br>
+devices/vector/whitelst.h<br>
+doc/API.htm<br>
+doc/C-style.htm<br>
+doc/Commprod.htm<br>
+doc/DLL.htm<br>
+doc/Deprecated.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/Ps-style.htm<br>
+doc/Ps2epsi.htm<br>
+doc/Psfiles.htm<br>
+doc/Readme.htm<br>
+doc/Release.htm<br>
+doc/Source.htm<br>
+doc/Unix-lpr.htm<br>
+doc/Use.htm<br>
+doc/VectorDevices.htm<br>
+doc/WhatIsGS.htm<br>
+gpdl/gpdl.mak<br>
+gpdl/jbig2top.c<br>
+gpdl/jp2ktop.c<br>
+gpdl/jpgtop.c<br>
+gpdl/pngtop.c<br>
+gpdl/psitop.c<br>
+gpdl/pspcl6_gcc.mak<br>
+gpdl/pspcl6_msvc.mak<br>
+gpdl/pwgtop.c<br>
+gpdl/tifftop.c<br>
+ijs/Makefile.am<br>
+ijs/configure.ac<br>
+ijs/ijs.c<br>
+ijs/ijs.h<br>
+ijs/ijs_client.c<br>
+ijs/ijs_client.h<br>
+ijs/ijs_client_example.c<br>
+ijs/ijs_exec_unix.c<br>
+ijs/ijs_exec_win.c<br>
+ijs/ijs_server.c<br>
+ijs/ijs_server_example.c<br>
+ijs/unistd_.h<br>
+ios/ios_arch-arm.h<br>
+ios/ios_arch-x86.h<br>
+jbig2dec/config_win32.h<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2.h<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_arith.h<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+jbig2dec/jbig2_arith_iaid.h<br>
+jbig2dec/jbig2_arith_int.c<br>
+jbig2dec/jbig2_arith_int.h<br>
+jbig2dec/jbig2_generic.c<br>
+jbig2dec/jbig2_generic.h<br>
+jbig2dec/jbig2_halftone.c<br>
+jbig2dec/jbig2_halftone.h<br>
+jbig2dec/jbig2_huffman.c<br>
+jbig2dec/jbig2_huffman.h<br>
+jbig2dec/jbig2_hufftab.c<br>
+jbig2dec/jbig2_hufftab.h<br>
+jbig2dec/jbig2_image.c<br>
+jbig2dec/jbig2_image.h<br>
+jbig2dec/jbig2_image_pbm.c<br>
+jbig2dec/jbig2_image_png.c<br>
+jbig2dec/jbig2_image_rw.h<br>
+jbig2dec/jbig2_mmr.c<br>
+jbig2dec/jbig2_mmr.h<br>
+jbig2dec/jbig2_page.c<br>
+jbig2dec/jbig2_page.h<br>
+jbig2dec/jbig2_priv.h<br>
+jbig2dec/jbig2_refinement.c<br>
+jbig2dec/jbig2_refinement.h<br>
+jbig2dec/jbig2_segment.c<br>
+jbig2dec/jbig2_segment.h<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+jbig2dec/jbig2_symbol_dict.h<br>
+jbig2dec/jbig2_text.c<br>
+jbig2dec/jbig2_text.h<br>
+jbig2dec/jbig2dec.c<br>
+jbig2dec/memcmp.c<br>
+jbig2dec/os_types.h<br>
+jbig2dec/pbm2png.c<br>
+lib/FCOfontmap-PCLPS3<br>
+lib/FCOfontmap-PS3<br>
+lib/Fontmap.ATB<br>
+lib/Fontmap.ATM<br>
+lib/Fontmap.OS2<br>
+lib/Fontmap.SGI<br>
+lib/Fontmap.Sol<br>
+lib/Fontmap.Ult<br>
+lib/Fontmap.VMS<br>
+lib/align.ps<br>
+lib/caption.ps<br>
+lib/cat.ps<br>
+lib/cid2code.ps<br>
+lib/docie.ps<br>
+lib/font2pcl.ps<br>
+lib/gs_ce_e.ps<br>
+lib/gs_il2_e.ps<br>
+lib/gs_kanji.ps<br>
+lib/gs_ksb_e.ps<br>
+lib/gs_lgo_e.ps<br>
+lib/gs_lgx_e.ps<br>
+lib/gs_wl1_e.ps<br>
+lib/gs_wl2_e.ps<br>
+lib/gs_wl5_e.ps<br>
+lib/gslp.ps<br>
+lib/gsnup.ps<br>
+lib/image-qa.ps<br>
+lib/jispaper.ps<br>
+lib/lines.ps<br>
+lib/mkcidfm.ps<br>
+lib/pdf2dsc.ps<br>
+lib/pdf_info.ps<br>
+lib/pfbtopfa.ps<br>
+lib/ppath.ps<br>
+lib/pphs.ps<br>
+lib/prfont.ps<br>
+lib/ps2ai.ps<br>
+lib/ps2epsi.ps<br>
+lib/rollconv.ps<br>
+lib/stcinfo.ps<br>
+lib/stcolor.ps<br>
+lib/stocht.ps<br>
+lib/traceimg.ps<br>
+lib/traceop.ps<br>
+lib/uninfo.ps<br>
+lib/viewcmyk.ps<br>
+lib/viewgif.ps<br>
+lib/viewmiff.ps<br>
+lib/viewpbm.ps<br>
+lib/viewpcx.ps<br>
+lib/viewps2a.ps<br>
+lib/viewraw.ps<br>
+lib/viewrgb.ps<br>
+lib/winmaps.ps<br>
+lib/zeroline.ps<br>
+pcl/pcl/pcbiptrn.c<br>
+pcl/pcl/pcbiptrn.h<br>
+pcl/pcl/pccid.c<br>
+pcl/pcl/pccid.h<br>
+pcl/pcl/pccolor.c<br>
+pcl/pcl/pccoord.h<br>
+pcl/pcl/pccprint.c<br>
+pcl/pcl/pccsbase.c<br>
+pcl/pcl/pccsbase.h<br>
+pcl/pcl/pcdict.h<br>
+pcl/pcl/pcdither.c<br>
+pcl/pcl/pcdither.h<br>
+pcl/pcl/pcdraw.c<br>
+pcl/pcl/pcdraw.h<br>
+pcl/pcl/pcfont.c<br>
+pcl/pcl/pcfont.h<br>
+pcl/pcl/pcfontpg.c<br>
+pcl/pcl/pcfontst.h<br>
+pcl/pcl/pcfrgrnd.c<br>
+pcl/pcl/pcfrgrnd.h<br>
+pcl/pcl/pcfsel.c<br>
+pcl/pcl/pcfsel.h<br>
+pcl/pcl/pcht.c<br>
+pcl/pcl/pcht.h<br>
+pcl/pcl/pcident.c<br>
+pcl/pcl/pcident.h<br>
+pcl/pcl/pcimpl.c<br>
+pcl/pcl/pcindxed.c<br>
+pcl/pcl/pcindxed.h<br>
+pcl/pcl/pcjob.c<br>
+pcl/pcl/pcl.mak<br>
+pcl/pcl/pcl_top.mak<br>
+pcl/pcl/pclookup.c<br>
+pcl/pcl/pclookup.h<br>
+pcl/pcl/pcmacros.c<br>
+pcl/pcl/pcmisc.c<br>
+pcl/pcl/pcmtx3.c<br>
+pcl/pcl/pcmtx3.h<br>
+pcl/pcl/pcommand.c<br>
+pcl/pcl/pcommand.h<br>
+pcl/pcl/pcpage.c<br>
+pcl/pcl/pcpage.h<br>
+pcl/pcl/pcpalet.c<br>
+pcl/pcl/pcpalet.h<br>
+pcl/pcl/pcparam.h<br>
+pcl/pcl/pcparse.c<br>
+pcl/pcl/pcparse.h<br>
+pcl/pcl/pcpatrn.c<br>
+pcl/pcl/pcpatrn.h<br>
+pcl/pcl/pcpattyp.h<br>
+pcl/pcl/pcpatxfm.c<br>
+pcl/pcl/pcpatxfm.h<br>
+pcl/pcl/pcrect.c<br>
+pcl/pcl/pcsfont.c<br>
+pcl/pcl/pcstate.h<br>
+pcl/pcl/pcstatus.c<br>
+pcl/pcl/pcsymbol.c<br>
+pcl/pcl/pcsymbol.h<br>
+pcl/pcl/pctext.c<br>
+pcl/pcl/pctop.c<br>
+pcl/pcl/pctop.h<br>
+pcl/pcl/pctpm.h<br>
+pcl/pcl/pcuptrn.c<br>
+pcl/pcl/pcuptrn.h<br>
+pcl/pcl/pcursor.c<br>
+pcl/pcl/pcursor.h<br>
+pcl/pcl/pcwhtidx.c<br>
+pcl/pcl/pcwhtidx.h<br>
+pcl/pcl/pcxfmst.h<br>
+pcl/pcl/pgchar.c<br>
+pcl/pcl/pgcolor.c<br>
+pcl/pcl/pgconfig.c<br>
+pcl/pcl/pgdraw.c<br>
+pcl/pcl/pgdraw.h<br>
+pcl/pcl/pgfdata.c<br>
+pcl/pcl/pgfdata.h<br>
+pcl/pcl/pgfont.c<br>
+pcl/pcl/pgfont.h<br>
+pcl/pcl/pgframe.c<br>
+pcl/pcl/pggeom.c<br>
+pcl/pcl/pggeom.h<br>
+pcl/pcl/pginit.c<br>
+pcl/pcl/pginit.h<br>
+pcl/pcl/pglabel.c<br>
+pcl/pcl/pglfill.c<br>
+pcl/pcl/pgmand.h<br>
+pcl/pcl/pgmisc.c<br>
+pcl/pcl/pgmisc.h<br>
+pcl/pcl/pgparse.c<br>
+pcl/pcl/pgpoly.c<br>
+pcl/pcl/pgstate.h<br>
+pcl/pcl/pgvector.c<br>
+pcl/pcl/rtgmode.c<br>
+pcl/pcl/rtgmode.h<br>
+pcl/pcl/rtmisc.c<br>
+pcl/pcl/rtmisc.h<br>
+pcl/pcl/rtraster.c<br>
+pcl/pcl/rtraster.h<br>
+pcl/pcl/rtrstcmp.c<br>
+pcl/pcl/rtrstcmp.h<br>
+pcl/pcl/rtrstst.h<br>
+pcl/pl/pjparse.c<br>
+pcl/pl/pjparse.h<br>
+pcl/pl/pjparsei.c<br>
+pcl/pl/pjtop.c<br>
+pcl/pl/pjtop.h<br>
+pcl/pl/pl.mak<br>
+pcl/pl/plalloc.c<br>
+pcl/pl/plapi.c<br>
+pcl/pl/plapi.h<br>
+pcl/pl/plchar.c<br>
+pcl/pl/plchar.h<br>
+pcl/pl/pldebug.h<br>
+pcl/pl/pldict.c<br>
+pcl/pl/pldict.h<br>
+pcl/pl/pldraw.c<br>
+pcl/pl/pldraw.h<br>
+pcl/pl/plfapi.c<br>
+pcl/pl/plfapi.h<br>
+pcl/pl/plfont.c<br>
+pcl/pl/plfont.h<br>
+pcl/pl/plftable.c<br>
+pcl/pl/plftable.h<br>
+pcl/pl/plht.c<br>
+pcl/pl/plht.h<br>
+pcl/pl/plimpl.c<br>
+pcl/pl/pllfont.c<br>
+pcl/pl/pllfont.h<br>
+pcl/pl/plmain.c<br>
+pcl/pl/plmain.h<br>
+pcl/pl/plparams.c<br>
+pcl/pl/plparams.h<br>
+pcl/pl/plparse.h<br>
+pcl/pl/plromfs.mak<br>
+pcl/pl/plsymbol.c<br>
+pcl/pl/plsymbol.h<br>
+pcl/pl/pltop.c<br>
+pcl/pl/pltop.h<br>
+pcl/pl/pluchar.c<br>
+pcl/pl/plufont.c<br>
+pcl/pl/plufstlp.c<br>
+pcl/pl/plufstlp.h<br>
+pcl/pl/plufstlp1.c<br>
+pcl/pl/plulfont.c<br>
+pcl/pl/plvalue.c<br>
+pcl/pl/plvalue.h<br>
+pcl/pl/plvocab.c<br>
+pcl/pl/plvocab.h<br>
+pcl/pl/plwimg.c<br>
+pcl/pl/plwimg.h<br>
+pcl/pl/plwmainc.c<br>
+pcl/pl/plwreg.c<br>
+pcl/pl/plwreg.h<br>
+pcl/pl/plwres.h<br>
+pcl/pl/realmain.c<br>
+pcl/pxl/pxasm.ps<br>
+pcl/pxl/pxattr.h<br>
+pcl/pxl/pxbfont.c<br>
+pcl/pxl/pxbfont.h<br>
+pcl/pxl/pxbfont.ps<br>
+pcl/pxl/pxcet.txt<br>
+pcl/pxl/pxdict.h<br>
+pcl/pxl/pxdiff.txt<br>
+pcl/pxl/pxenum.h<br>
+pcl/pxl/pxerrors.c<br>
+pcl/pxl/pxerrors.h<br>
+pcl/pxl/pxffont.c<br>
+pcl/pxl/pxfont.c<br>
+pcl/pxl/pxfont.h<br>
+pcl/pxl/pxfts.txt<br>
+pcl/pxl/pxgstate.c<br>
+pcl/pxl/pxgstate.h<br>
+pcl/pxl/pximage.c<br>
+pcl/pxl/pximpl.c<br>
+pcl/pxl/pxink.c<br>
+pcl/pxl/pxl.mak<br>
+pcl/pxl/pxlib.txt<br>
+pcl/pxl/pxoper.h<br>
+pcl/pxl/pxpaint.c<br>
+pcl/pxl/pxparse.c<br>
+pcl/pxl/pxparse.h<br>
+pcl/pxl/pxptable.c<br>
+pcl/pxl/pxptable.h<br>
+pcl/pxl/pxpthr.c<br>
+pcl/pxl/pxpthr.h<br>
+pcl/pxl/pxsessio.c<br>
+pcl/pxl/pxspec.txt<br>
+pcl/pxl/pxstate.c<br>
+pcl/pxl/pxstate.h<br>
+pcl/pxl/pxstream.c<br>
+pcl/pxl/pxsymbol.ps<br>
+pcl/pxl/pxsymbol.psc<br>
+pcl/pxl/pxsymbol.psh<br>
+pcl/pxl/pxtag.h<br>
+pcl/pxl/pxtop.c<br>
+pcl/pxl/pxvalue.c<br>
+pcl/pxl/pxvalue.h<br>
+pcl/tools/pxlasm.py<br>
+pcl/tools/pxldis.py<br>
+pcl/tools/suite.tcl<br>
+psi/bfont.h<br>
+psi/btoken.h<br>
+psi/dmmain.c<br>
+psi/dmmain.r<br>
+psi/dpmain.c<br>
+psi/dscparse.c<br>
+psi/dscparse.h<br>
+psi/dstack.h<br>
+psi/dwdll.c<br>
+psi/dwdll.h<br>
+psi/dwimg.c<br>
+psi/dwimg.h<br>
+psi/dwmain.c<br>
+psi/dwmain.rc<br>
+psi/dwmainc.c<br>
+psi/dwnodll.c<br>
+psi/dwreg.c<br>
+psi/dwreg.h<br>
+psi/dwres.h<br>
+psi/dwtext.c<br>
+psi/dwtext.h<br>
+psi/dwtrace.c<br>
+psi/dwtrace.h<br>
+psi/dxmain.c<br>
+psi/dxmainc.c<br>
+psi/estack.h<br>
+psi/files.h<br>
+psi/ghost.h<br>
+psi/gs.c<br>
+psi/gsdll.c<br>
+psi/gsdll2.rc<br>
+psi/gsdll32.rc<br>
+psi/gserver.c<br>
+psi/gsos2.rc<br>
+psi/ialloc.c<br>
+psi/ialloc.h<br>
+psi/iapi.c<br>
+psi/iapi.h<br>
+psi/iastate.h<br>
+psi/iastruct.h<br>
+psi/ibnum.c<br>
+psi/ibnum.h<br>
+psi/ichar.h<br>
+psi/ichar1.h<br>
+psi/icharout.h<br>
+psi/icid.h<br>
+psi/icie.h<br>
+psi/icolor.h<br>
+psi/iconf.c<br>
+psi/iconf.h<br>
+psi/icontext.c<br>
+psi/icontext.h<br>
+psi/icremap.h<br>
+psi/icsmap.h<br>
+psi/icstate.h<br>
+psi/iddict.h<br>
+psi/iddstack.h<br>
+psi/idebug.c<br>
+psi/idebug.h<br>
+psi/idict.c<br>
+psi/idict.h<br>
+psi/idictdef.h<br>
+psi/idicttpl.h<br>
+psi/idisp.c<br>
+psi/idisp.h<br>
+psi/idosave.h<br>
+psi/idparam.c<br>
+psi/idparam.h<br>
+psi/idsdata.h<br>
+psi/idstack.c<br>
+psi/idstack.h<br>
+psi/ierrors.h<br>
+psi/iesdata.h<br>
+psi/iestack.h<br>
+psi/ifapi.h<br>
+psi/ifcid.h<br>
+psi/ifilter.h<br>
+psi/ifilter2.h<br>
+psi/ifont.h<br>
+psi/ifont1.h<br>
+psi/ifont2.h<br>
+psi/ifont42.h<br>
+psi/ifrpred.h<br>
+psi/ifunc.h<br>
+psi/ifwpred.h<br>
+psi/igc.c<br>
+psi/igc.h<br>
+psi/igcref.c<br>
+psi/igcstr.c<br>
+psi/igcstr.h<br>
+psi/igstate.h<br>
+psi/iht.h<br>
+psi/iimage.h<br>
+psi/iinit.c<br>
+psi/iinit.h<br>
+psi/ilevel.h<br>
+psi/ilocate.c<br>
+psi/imain.c<br>
+psi/imain.h<br>
+psi/imainarg.c<br>
+psi/imainarg.h<br>
+psi/imemory.h<br>
+psi/iminst.h<br>
+psi/iname.c<br>
+psi/iname.h<br>
+psi/inamedef.h<br>
+psi/inameidx.h<br>
+psi/inames.h<br>
+psi/inamestr.h<br>
+psi/inobtokn.c<br>
+psi/inouparm.c<br>
+psi/int.mak<br>
+psi/interp.c<br>
+psi/interp.h<br>
+psi/iosdata.h<br>
+psi/iostack.h<br>
+psi/ipacked.h<br>
+psi/iparam.c<br>
+psi/iparam.h<br>
+psi/iparray.h<br>
+psi/ipcolor.h<br>
+psi/iplugin.c<br>
+psi/iplugin.h<br>
+psi/ireclaim.c<br>
+psi/iref.h<br>
+psi/isave.c<br>
+psi/isave.h<br>
+psi/iscan.c<br>
+psi/iscan.h<br>
+psi/iscanbin.c<br>
+psi/iscanbin.h<br>
+psi/iscannum.c<br>
+psi/iscannum.h<br>
+psi/isdata.h<br>
+psi/isstate.h<br>
+psi/istack.c<br>
+psi/istack.h<br>
+psi/istkparm.h<br>
+psi/istream.h<br>
+psi/istruct.h<br>
+psi/itoken.h<br>
+psi/iutil.c<br>
+psi/iutil.h<br>
+psi/iutil2.c<br>
+psi/iutil2.h<br>
+psi/ivmem2.h<br>
+psi/ivmspace.h<br>
+psi/main.h<br>
+psi/mkfilelt.cpp<br>
+psi/msvc.mak<br>
+psi/msvc32.mak<br>
+psi/msvc64.mak<br>
+psi/nsisinst.nsi<br>
+psi/oparc.h<br>
+psi/opcheck.h<br>
+psi/opdef.h<br>
+psi/oper.h<br>
+psi/opextern.h<br>
+psi/os2.mak<br>
+psi/ostack.h<br>
+psi/psapi.c<br>
+psi/psapi.h<br>
+psi/psromfs.mak<br>
+psi/store.h<br>
+psi/zalg.c<br>
+psi/zarith.c<br>
+psi/zarray.c<br>
+psi/zbfont.c<br>
+psi/zbseq.c<br>
+psi/zcfont.c<br>
+psi/zchar.c<br>
+psi/zchar1.c<br>
+psi/zchar2.c<br>
+psi/zchar32.c<br>
+psi/zchar42.c<br>
+psi/zchar42.h<br>
+psi/zcharout.c<br>
+psi/zcharx.c<br>
+psi/zcid.c<br>
+psi/zcie.c<br>
+psi/zcie.h<br>
+psi/zcolor.c<br>
+psi/zcolor.h<br>
+psi/zcolor1.c<br>
+psi/zcolor2.c<br>
+psi/zcolor3.c<br>
+psi/zcontrol.c<br>
+psi/zcrd.c<br>
+psi/zcsindex.c<br>
+psi/zcspixel.c<br>
+psi/zcssepr.c<br>
+psi/zdevcal.c<br>
+psi/zdevice.c<br>
+psi/zdevice2.c<br>
+psi/zdfilter.c<br>
+psi/zdict.c<br>
+psi/zdouble.c<br>
+psi/zdps1.c<br>
+psi/zdscpars.c<br>
+psi/zfaes.c<br>
+psi/zfapi.c<br>
+psi/zfarc4.c<br>
+psi/zfbcp.c<br>
+psi/zfcid.c<br>
+psi/zfcid0.c<br>
+psi/zfcid1.c<br>
+psi/zfcmap.c<br>
+psi/zfdctd.c<br>
+psi/zfdcte.c<br>
+psi/zfdecode.c<br>
+psi/zfile.c<br>
+psi/zfile.h<br>
+psi/zfile1.c<br>
+psi/zfileio.c<br>
+psi/zfilter.c<br>
+psi/zfilter2.c<br>
+psi/zfimscale.c<br>
+psi/zfjbig2.c<br>
+psi/zfjpx.c<br>
+psi/zfmd5.c<br>
+psi/zfont.c<br>
+psi/zfont0.c<br>
+psi/zfont1.c<br>
+psi/zfont2.c<br>
+psi/zfont32.c<br>
+psi/zfont42.c<br>
+psi/zfontenum.c<br>
+psi/zform.c<br>
+psi/zfproc.c<br>
+psi/zfrsd.c<br>
+psi/zfrsd.h<br>
+psi/zfsample.c<br>
+psi/zfsha2.c<br>
+psi/zfunc.c<br>
+psi/zfunc.h<br>
+psi/zfunc0.c<br>
+psi/zfunc3.c<br>
+psi/zfunc4.c<br>
+psi/zfzlib.c<br>
+psi/zgeneric.c<br>
+psi/zgstate.c<br>
+psi/zht.c<br>
+psi/zht1.c<br>
+psi/zht2.c<br>
+psi/zht2.h<br>
+psi/zicc.c<br>
+psi/zicc.h<br>
+psi/zimage.c<br>
+psi/zimage3.c<br>
+psi/ziodev.c<br>
+psi/ziodev2.c<br>
+psi/ziodevsc.c<br>
+psi/zmath.c<br>
+psi/zmatrix.c<br>
+psi/zmedia2.c<br>
+psi/zmisc.c<br>
+psi/zmisc1.c<br>
+psi/zmisc2.c<br>
+psi/zmisc3.c<br>
+psi/zncdummy.c<br>
+psi/zpacked.c<br>
+psi/zpaint.c<br>
+psi/zpath.c<br>
+psi/zpath1.c<br>
+psi/zpcolor.c<br>
+psi/zpdf_r6.c<br>
+psi/zpdfops.c<br>
+psi/zrelbit.c<br>
+psi/zshade.c<br>
+psi/zstack.c<br>
+psi/zstring.c<br>
+psi/zsysvm.c<br>
+psi/ztoken.c<br>
+psi/ztrans.c<br>
+psi/ztrap.c<br>
+psi/ztype.c<br>
+psi/zupath.c<br>
+psi/zusparam.c<br>
+psi/zutf8.c<br>
+psi/zvmem.c<br>
+psi/zvmem2.c<br>
+psi/zwinutf8.c<br>
+toolbin/GenSubstCID.ps<br>
+toolbin/afmutil.py<br>
+toolbin/color/icc_creator/ICC_Creator/CIELAB.h<br>
+toolbin/color/icc_creator/ICC_Creator/ICC_Creator.cpp<br>
+toolbin/color/icc_creator/ICC_Creator/ICC_Creator.h<br>
+toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.cpp<br>
+toolbin/color/icc_creator/ICC_Creator/ICC_CreatorDlg.h<br>
+toolbin/color/icc_creator/ICC_Creator/icc_create.cpp<br>
+toolbin/color/icc_creator/ICC_Creator/icc_create.h<br>
+toolbin/color/icc_creator/README.txt<br>
+toolbin/encs2c.ps<br>
+toolbin/errlist.tcl<br>
+toolbin/extractFonts.ps<br>
+toolbin/extractICCprofiles.ps<br>
+toolbin/gen_ldf_jb2.py<br>
+toolbin/genfontmap.ps<br>
+toolbin/gitlog2changelog.py<br>
+toolbin/gsmake.tcl<br>
+toolbin/halftone/gen_ordered/gen_ordered_main.c<br>
+toolbin/halftone/gen_stochastic/gen_stochastic.c<br>
+toolbin/headers.tcl<br>
+toolbin/jpxtopdf.c<br>
+toolbin/leaks.tcl<br>
+toolbin/makehist.tcl<br>
+toolbin/memory.py<br>
+toolbin/ocheck.py<br>
+toolbin/pre.tcl<br>
+toolbin/precheck.tcl<br>
+toolbin/split_changelog.py<br>
+toolbin/suite.tcl<br>
+toolbin/tests/build_revision.py<br>
+toolbin/tests/check_all.py<br>
+toolbin/tests/check_comments.py<br>
+toolbin/tests/check_dirs.py<br>
+toolbin/tests/check_docrefs.py<br>
+toolbin/tests/cmpi.py<br>
+toolbin/tests/compare_checksumdb.py<br>
+toolbin/tests/compare_checksums.py<br>
+toolbin/tests/dump_checksum.py<br>
+toolbin/tests/dump_checksum_plus.py<br>
+toolbin/tests/dump_checksum_raw.py<br>
+toolbin/tests/fuzzy.c<br>
+toolbin/tests/get_baseline_log.py<br>
+toolbin/tests/get_baselines.py<br>
+toolbin/tests/gscheck_all.py<br>
+toolbin/tests/gscheck_fuzzypdf.py<br>
+toolbin/tests/gscheck_pdfwrite.py<br>
+toolbin/tests/gscheck_raster.py<br>
+toolbin/tests/gscheck_testfiles.py<br>
+toolbin/tests/gsconf.py<br>
+toolbin/tests/gsparamsets.py<br>
+toolbin/tests/gssum.py<br>
+toolbin/tests/gstestgs.py<br>
+toolbin/tests/gstestutils.py<br>
+toolbin/tests/gsutil.py<br>
+toolbin/tests/make_baselinedb.py<br>
+toolbin/tests/make_testdb.py<br>
+toolbin/tests/make_two_pdfversions<br>
+toolbin/tests/make_two_versions<br>
+toolbin/tests/myoptparse.py<br>
+toolbin/tests/rasterdb.py<br>
+toolbin/tests/revert_baseline<br>
+toolbin/tests/revert_pdfbaseline<br>
+toolbin/tests/run_nightly.py<br>
+toolbin/tests/run_parallel<br>
+toolbin/tests/run_regression.py<br>
+toolbin/tests/testdiff.py<br>
+toolbin/tests/update_baseline.py<br>
+toolbin/tests/update_specific<br>
+toolbin/tmake.tcl<br>
+xps/ghostxps.h<br>
+xps/xps.mak<br>
+xps/xpsanalyze.c<br>
+xps/xpscff.c<br>
+xps/xpscolor.c<br>
+xps/xpscommon.c<br>
+xps/xpscrc.c<br>
+xps/xpsdoc.c<br>
+xps/xpsfapi.c<br>
+xps/xpsfapi.h<br>
+xps/xpsfont.c<br>
+xps/xpsglyphs.c<br>
+xps/xpsgradient.c<br>
+xps/xpshash.c<br>
+xps/xpsimage.c<br>
+xps/xpsjpeg.c<br>
+xps/xpsjxr.c<br>
+xps/xpsmem.c<br>
+xps/xpsopacity.c<br>
+xps/xpspage.c<br>
+xps/xpspath.c<br>
+xps/xpspng.c<br>
+xps/xpsresource.c<br>
+xps/xpsromfs.mak<br>
+xps/xpstiff.c<br>
+xps/xpstile.c<br>
+xps/xpstop.c<br>
+xps/xpsttf.c<br>
+xps/xpsutf.c<br>
+xps/xpsvisual.c<br>
+xps/xpsxml.c<br>
+xps/xpszip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-09 09:40: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=87688cd48fb52c305e159b785bd184232426a766">87688cd48fb52c305e159b785bd184232426a766</a>
+<blockquote>
+<p>
+ Bug 702322: fix uninitalized data reads<br>
+<br>
+ gs_scan_token() keeps a local copy of the scanner state, and copies from and to<br>
+ the scanner state that is passed into it. There are several code paths that<br>
+ can leave some important entries in the structure uninitalized when we copy the<br>
+ local copy to the parameter.<br>
+<br>
+ This just ensures those specific entries are always set to *something* sane.<br>
+<br>
+psi/iscan.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-09 09:07: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=c96962212ed44463b3bd5cf34f3f790e9d14cd0b">c96962212ed44463b3bd5cf34f3f790e9d14cd0b</a>
+<blockquote>
+<p>
+ Clarify path matching for SAFER controls<br>
+<br>
+ Make it explicit that the 'form' of the paths (e.g. absolute vs relative) must<br>
+ match between --permit-file-* paramters and the actual path used to reference<br>
+ the file<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-08 16:06: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=ebabebad34a3811230b7bfe351eface7f5efc8a9">ebabebad34a3811230b7bfe351eface7f5efc8a9</a>
+<blockquote>
+<p>
+ PostScript interpreter - don't leave A85Decode pdf_rules uninitialised<br>
+<br>
+ Bug #702319 &quot;Read of uninitialized value according to valgrind...&quot;<br>
+<br>
+ There are a number of other bugs which relate to this particular problem:<br>
+ 690976, 692983 and 693485. The problem has come about as a cumulative<br>
+ result of working on these bugs.<br>
+<br>
+ Starting with commit :<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=e0ecca32ecd12dae3310fac4b65dc224031c85a2<br>
+ for bug 690976 a new flag 'pdf_rules' was added to the Ascii85Decode<br>
+ state. This is initialised from the dictionary operand in PostScript<br>
+ by zA85D() in zfdecode.c. When this flag is true the ASCII85Decode<br>
+ filter will silently accept just '~' as a valid termination for a string<br>
+ (should be '~&gt;').<br>
+<br>
+ However this is not the only way to initialise an Ascii85Decode filter,<br>
+ the PostScript token scanner can also use s_A85D_init_inline() which<br>
+ does not initialise the flag. From this point we have the potential<br>
+ for testing an unitialised variable in s_A85D_process(), if we get an<br>
+ encoded string which terminates with a '~' and the filter was<br>
+ instantiated from PostScript.<br>
+<br>
+ When fixing bug 692983, this commit:<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d561224d1495321d40012230abbcf835b298f557<br>
+<br>
+ Alex specifically added a comment that pdf_rules must not be initialised<br>
+ in s_A85D_init_inline() but didn't say why! The reason is that the<br>
+ regular stream initialisation code (s_A85D-init) also uses this inline<br>
+ function, so if it altered pdf_rules it would overwrite the value<br>
+ previously set by zA85D().<br>
+<br>
+ Since the initialisation is done in two places, the only way to fix this<br>
+ is to initialise pdf_rules in gs_scan_token() which this commit duly<br>
+ does. I've also added comments in s_A85D_init_inline to explain more<br>
+ clearly *why* pdf_rules must not be initialised here.<br>
+<br>
+base/sa85d.h<br>
+psi/iscan.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-31 08:26:37 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=668917a10e7eada030f7d2dddec9f579fddeed3d">668917a10e7eada030f7d2dddec9f579fddeed3d</a>
+<blockquote>
+<p>
+ Change MaxLocalVM and MaxGlobalVM to be size_t instead of 'long'<br>
+<br>
+ The sizeof long differs between 64-bit Windows and linux, and<br>
+ Robin changed the Max values for other params to be size_t in<br>
+ commit d7961033. This change extends that to the other memory<br>
+ size related params.<br>
+<br>
+ Also fix vm_threshold to be int64_t, not size_t since that<br>
+ corresponds to the parameter setting in zusparam.c. This is<br>
+ also limited to the max signed value that corresponds to<br>
+ size_t (MAX_VM_THRESHOLD) in case size_t is &lt; 64 bits.<br>
+<br>
+base/gsalloc.c<br>
+base/gsalloc.h<br>
+base/std.h<br>
+psi/ireclaim.c<br>
+psi/ivmem2.h<br>
+psi/zusparam.c<br>
+psi/zvmem2.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-05 12:24:36 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d8ed6363166841dcb067d7adc6ad6b52a1b1f90c">d8ed6363166841dcb067d7adc6ad6b52a1b1f90c</a>
+<blockquote>
+<p>
+ jbig2dec: Initiate variable before avoids using uninited data during cleanup.<br>
+<br>
+ Fixes OSS-fuzz issue 21571.<br>
+ Also fixes Coverity CID 355467.<br>
+<br>
+ Thanks to OSS-fuzz for reporting.<br>
+<br>
+jbig2dec/jbig2_text.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-27 05:41:07 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dc6b8098b52db7e1a9b20c1ef6f1006555c04b1b">dc6b8098b52db7e1a9b20c1ef6f1006555c04b1b</a>
+<blockquote>
+<p>
+ jbig2dec: Adjust number of bytes consumed by MMR decoder.<br>
+<br>
+ The MMR decoder pre-buffers up to 32 bits of encoded input data in a word<br>
+ buffer before they are consumed by the MMR decoder. Once bits are consumed, the<br>
+ pre-buffer will be filled up with more input data. When filling up the buffer<br>
+ the decoder would previously stay clear of reading data belonging to succeeding<br>
+ segments, but still indicated that it consumed those bytes it never read. Once<br>
+ finished the MMR decoder lied to the caller by propagating the incorrect number<br>
+ of consumed bytes. The caller subtracted the consumed number of bytes from the<br>
+ size and end up in underflow causing the next MMR decoding to first read input<br>
+ data at the wrong location, later ending up attempting to read outside the MMR<br>
+ encoded input buffer.<br>
+<br>
+ Now, the MMR decoder keeps track of how many bits it has consumed and<br>
+ accurately rounds this number up to a whole number of bytes to the caller.<br>
+<br>
+ Fixes OSS-fuzz issue 17855.<br>
+<br>
+ Thanks to OSS-fuzz for reporting.<br>
+<br>
+jbig2dec/jbig2_mmr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-26 14:20:11 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f14f35c6e3218554cd351b848447cfa83b3c4256">f14f35c6e3218554cd351b848447cfa83b3c4256</a>
+<blockquote>
+<p>
+ jbig2dec: Plug leak of image upon error.<br>
+<br>
+ Fixes OSS-Fuzz issue 17513.<br>
+<br>
+ Thanks to OSS-fuzz for reporting.<br>
+<br>
+jbig2dec/jbig2_text.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-25 01:12:52 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d293095a593f7106e16027fb9782324ee7bb36f8">d293095a593f7106e16027fb9782324ee7bb36f8</a>
+<blockquote>
+<p>
+ jbig2dec: Need to store local copy of error message.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-02 13:06: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=6728387b7f4b803ea5a26eb220ce24e4ff65e710">6728387b7f4b803ea5a26eb220ce24e4ff65e710</a>
+<blockquote>
+<p>
+ PDF interpreter - Fix incorrect CIDFontType2 with Type1C descendants<br>
+<br>
+ Customer bug report. The file contains a CIDFont declared like this:<br>
+<br>
+ 16 0 obj<br>
+ &lt;&lt;<br>
+ ...<br>
+ /Subtype /CIDFontType2<br>
+ ...<br>
+ &gt;&gt;<br>
+<br>
+ The /Subtype /CIDFontType2 means that the font is a CIDFont with<br>
+ TrueType outlines. However the actual font:<br>
+<br>
+ 10 0 obj<br>
+ &lt;&lt;<br>
+ /Subtype /Type1C<br>
+ /Length 49432<br>
+ /Length1 49432<br>
+ &gt;&gt;<br>
+<br>
+ is a Type1C (Compact Font Format) font. The PDF file is, quite simply,<br>
+ incorrect. The Subtype should be /CIDFontType0. Interestingly we already<br>
+ have code in the CIDFontType2 case to handle an incorrect value of<br>
+ Subtype being set to /CIDFontType0 so this is the reverse case.<br>
+<br>
+ If we discover we are reading a Type1C font, and the parent is a CIDFont<br>
+ with a Subtype of CIDFontType2, then change the parent dictionary to<br>
+ have a Subtype of /CIDFOntType0C and read the font as a CIDFont.<br>
+<br>
+Resource/Init/pdf_font.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-01 19:48: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=1c363593d7880b305e5da0cae8964bf090af3e61">1c363593d7880b305e5da0cae8964bf090af3e61</a>
+<blockquote>
+<p>
+ Speed up gx_get_bits_std_to_native.<br>
+<br>
+ We don't need to fetch the color_mapping_procs for every pixel;<br>
+ just once will do.<br>
+<br>
+base/gdevdgbr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-04-01 14:27:33 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=85225cda5e2b2d557942c6ff13887e418eccb6cc">85225cda5e2b2d557942c6ff13887e418eccb6cc</a>
+<blockquote>
+<p>
+ Remove pgs-&gt;alpha<br>
+<br>
+ The alpha value in the graphic state is not used and will<br>
+ only lead to confusion for people working on transparency.<br>
+<br>
+base/gdevp14.c<br>
+base/gsalpha.c<br>
+base/gsalpha.h<br>
+base/gsstate.c<br>
+base/gxclpath.c<br>
+base/gxcmap.c<br>
+base/gxgstate.h<br>
+base/lib.mak<br>
+windows/ghostscript.vcxproj<br>
+windows/ghostscript.vcxproj.filters<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-31 15:17: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=295bcef3b977c12885e30fdbae326f63d0771caa">295bcef3b977c12885e30fdbae326f63d0771caa</a>
+<blockquote>
+<p>
+ Squash 'set but unused' warning in gdevcups.<br>
+<br>
+cups/gdevcups.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-31 14:59: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=a32c6fdce5fab7d5918d02d30a4cf6696af58db3">a32c6fdce5fab7d5918d02d30a4cf6696af58db3</a>
+<blockquote>
+<p>
+ Squash some compiler warnings.<br>
+<br>
+base/gsicc_cache.c<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-31 13:00: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=4dd43e9ca448777bbd585ef3ce97e9cf593f395d">4dd43e9ca448777bbd585ef3ce97e9cf593f395d</a>
+<blockquote>
+<p>
+ Coverity 355259: Avoid &quot;Failure to restore&quot; warning from coverity.<br>
+<br>
+ Coverity complains that pgs-&gt;fillconstantalpha isn't restored<br>
+ before the file exits. While we're not too fussed about what<br>
+ happens to it in an error condition, simply hoisting a couple<br>
+ of lines up a bit solves the problem and should shut it up.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-30 19:01: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=32805b5689be664f9b76502669775baa53f55677">32805b5689be664f9b76502669775baa53f55677</a>
+<blockquote>
+<p>
+ Redefine deprecated .setopacityalpha and .setshapealpha<br>
+<br>
+ .setopacityalpha and .setshapealpha have been replaced with<br>
+ .setfillconstantalpha/.setstrokeconstantalpha and .setalphaisshape, operators<br>
+ which actually do what PDF requires.<br>
+<br>
+ As an interim measure, to allow users that rely on these operators some time<br>
+ to adjust, define versions of .setopacityalpha and .setshapealpha which<br>
+ approximate what the old implementations did.<br>
+<br>
+ As with the rest of the transparency operators they only exist when gs is<br>
+ given the -dALLOWPSTRANSPARENCY option. Also, they are in pdf_main.ps just so<br>
+ they grouped in proximity to where the rest of the ALLOWPSTRANSPARENCY logic is<br>
+ implemented.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-30 09:59:23 +0100
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3ff82b33f24ed54c2d3bb88ec31da7d2f9fd2765">3ff82b33f24ed54c2d3bb88ec31da7d2f9fd2765</a>
+<blockquote>
+<p>
+ Fail configure with unsupported shared tiff/jpeg combo<br>
+<br>
+ With the changes to support consuming the various TIFF input forms, we cannot<br>
+ support all combinations of mixing share and local libtiff and libjpeg.<br>
+<br>
+ For simplicity just reject mixing those configs.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-25 14:00:55 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6756b355c238c319fe66087dece15174e62f9f15">6756b355c238c319fe66087dece15174e62f9f15</a>
+<blockquote>
+<p>
+ Fix shared libtiff and libjpeg build<br>
+<br>
+ When building with shared libs, we should not try to include our custom libjpeg<br>
+ memory management context into the TIFF reader implementation context.<br>
+<br>
+gpdl/gpdl.mak<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-30 14:47: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=b8bda01581b94e9159533460cfe79436f4d5ac21">b8bda01581b94e9159533460cfe79436f4d5ac21</a>
+<blockquote>
+<p>
+ Coverity 94826 Add missing offset to buffer size used for clist cmd.<br>
+<br>
+base/gxclpath.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-29 15:32:36 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b09cbe8e577fb14504932dc8d9096187ec4e0840">b09cbe8e577fb14504932dc8d9096187ec4e0840</a>
+<blockquote>
+<p>
+ Fix infinite loop in PDF interpreter 'pagespotcolors' procedure<br>
+<br>
+ The file tests_private/pdf/uploads/poc1_pdf_gs.pdf has the single page<br>
+ Parent object as itself. This only showed up with &quot;DeviceN&quot; devices that<br>
+ search the PDF for the number of spot colorants on the page.<br>
+<br>
+ Note that this file is broken in other respects since it has a /Count<br>
+ of 9 pages, but only a single page. This change also adds handling for<br>
+ the //null object returned when a page isn't found since there isn't<br>
+ actually a second page, and adds an error message when this is the case.<br>
+<br>
+Resource/Init/pdf_main.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-30 12:24: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=4dde07159da5786570ad4f8d2b7b3c0b828802ab">4dde07159da5786570ad4f8d2b7b3c0b828802ab</a>
+<blockquote>
+<p>
+ Coverity 141130 Initialize shape and alpha of group for image.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-30 19:51: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=baa1a80f7824e26fb31f5f5f782980518b6cbfd9">baa1a80f7824e26fb31f5f5f782980518b6cbfd9</a>
+<blockquote>
+<p>
+ Coverity 355259: Fix precedence of assignment/comparison.<br>
+<br>
+ This was leading to code being thought of as being unreachable.<br>
+<br>
+base/gxstroke.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-30 10:45: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=22a31bda026deb8e3748f25bc2cf3b46263e689c">22a31bda026deb8e3748f25bc2cf3b46263e689c</a>
+<blockquote>
+<p>
+ Update doc to deprecate transparency PS methods<br>
+<br>
+doc/Language.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-27 13:54:02 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6a3c36f8c5e83448f5d1e5f24ee01c0e80a92877">6a3c36f8c5e83448f5d1e5f24ee01c0e80a92877</a>
+<blockquote>
+<p>
+ Fix Bug 702177: VMerrors with some BufferSpace and/or -K limits.<br>
+<br>
+ Interestingly, the two examples given in the bug succeed on Windows 64<br>
+ but don't on linux. The difference is due to an 8 byte difference in the<br>
+ size of gx_clist_state (the per band writer state). In the case of the<br>
+ Bug690546.pdf file, the space left in the BufferSpace area after the<br>
+ logic increased it was only 2,200 bytes on linux, but was 12k bytes on<br>
+ Windows (it made an extra pass through the automatic &quot;increase space&quot;<br>
+ loop in gdev_prn_setup_as_command_list. Fix the calculation in<br>
+ clist_init_states so that the amount of extra space corresponds to the<br>
+ amount expected by clist command writing (data_bits_size + cmd_largest_size)<br>
+ rather than the insufficient and arbitrary &quot;100&quot;.<br>
+<br>
+ Note that although the Bug692057.pdf returned VMerror from cmd_put_list_op, the<br>
+ 'fallback; method of gx_default_strip_tile_rectangle still produces the SAME<br>
+ raster from psdcmyk16 and does not change the performance or clist file size<br>
+ Robin's commit cbee0840 fixed this case.<br>
+<br>
+base/gxclist.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-27 14:46:05 -0700
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d12d2085b5bd08ca1e813d97f3f7f7e630e791a0">d12d2085b5bd08ca1e813d97f3f7f7e630e791a0</a>
+<blockquote>
+<p>
+ Squashed commit of the opacity_shape branch<br>
+<br>
+ This commit removes shape.alpha and opacity.alpha from the<br>
+ graphic state. This involved removal of methods in the<br>
+ postscript based PDF interpreter, changes in the pdf14 device,<br>
+ changes in pdfwrite, the XPS interpreter, and the PS<br>
+ transparency test file that is present in examples and on<br>
+ the cluster. The goal of this commit was to avoid<br>
+ confusion and conflicts between shape.alpha opacity.alpha and<br>
+ the stroke and fill alpha values (CA ca). This change<br>
+ resulted in progressions in the XPS file. There were changes<br>
+ in a couple PDF files that required some investigation. In<br>
+ particular, the change in the dashed lines of Bug694981.pdf. Robin<br>
+ and I looked at this. Robin determined it was due to<br>
+ differences in stroke_add and stroke_fill not giving identical results.<br>
+ In the end, the new output looks closer the what AR provides.<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/gstparam.h<br>
+base/gstrans.c<br>
+base/gstrans.h<br>
+base/gxblend.c<br>
+base/gxclimag.c<br>
+base/gxclpath.c<br>
+base/gxclpath.h<br>
+base/gxclrast.c<br>
+base/gxgstate.h<br>
+devices/vector/gdevpdft.c<br>
+examples/transparency_example.ps<br>
+psi/ztrans.c<br>
+xps/xpscolor.c<br>
+xps/xpsgradient.c<br>
+xps/xpsimage.c<br>
+xps/xpsopacity.c<br>
+xps/xpspath.c<br>
+xps/xpstile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-27 15:28:22 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1241ea6848d254de9a9dbcb8c8edf10a59761d1d">1241ea6848d254de9a9dbcb8c8edf10a59761d1d</a>
+<blockquote>
+<p>
+ PDF interpreter - cope with Form XObjects leaving junk on the stack<br>
+<br>
+ No bug report, customer supplied file. The file has a Form XObject<br>
+ where the stream ends:<br>
+<br>
+ /Image20 Do Q<br>
+ EMC Tendstream<br>
+<br>
+ which is clearly invalid. This leaves a T lying around which gets<br>
+ converted to a name and remains on the stack. When we come to complete<br>
+ the form processing we expect that the stack will be clean, because it<br>
+ isn't we end up corrupting an internal variable, which causes the<br>
+ *next* Form XObject to fail.<br>
+<br>
+ We cope with this here by adding code to check the objects on the stack<br>
+ and remove them one by one until we get back to a dictionary which<br>
+ contains a name we expect to find (because we pushed it on entry to the<br>
+ procedure) or run out of stack objects in which case we will throw an<br>
+ error.<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-26 19:50:51 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f3e37d28f6a76cb7cfc2a291aeb98b8f1c6ba178">f3e37d28f6a76cb7cfc2a291aeb98b8f1c6ba178</a>
+<blockquote>
+<p>
+ Add murun to the list of products for clusterpush.pl<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-26 07:21:57 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3df1313a6ef334d9c6da2fcd78347fb5eb7a3859">3df1313a6ef334d9c6da2fcd78347fb5eb7a3859</a>
+<blockquote>
+<p>
+ Fix CID 355224. Non-zero return code not possible, but Coverity doesn't get it.<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-24 10:15:39 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=748b5c3c86779dc0cf4ccc144530cf37f692375e">748b5c3c86779dc0cf4ccc144530cf37f692375e</a>
+<blockquote>
+<p>
+ Rejig &quot;fast&quot; stroking of miter joins.<br>
+<br>
+ This spins out of Bug 702196, though it's not strictly speaking<br>
+ related. Bug 702196 deals with lines being incorrectly recognised<br>
+ as being &quot;thin&quot;. Thin lines aren't mitred. When we fix the<br>
+ erroneous classification of lines as thin, this causes more<br>
+ lines to be mitre joined than before. This in turn exposes<br>
+ the bug that we (partially) fix here.<br>
+<br>
+ gs -sDEVICE=pdfwrite -o out.pdf tests_private/ps/ps3cet/11-28.PS<br>
+<br>
+ gs -sDEVICE=png16m -o out%d.png -r300 -dMaxBitmap=2G out.pdf<br>
+<br>
+ Page 4 of the output shows strange mitre extrusions from the edge<br>
+ of paths.<br>
+<br>
+ Investigation shows the file is 'strokepath'ing the path (with<br>
+ mitre joins), and the stroking the resultant path (again with<br>
+ mitre joins). The initial 'strokepath' conversion includes little<br>
+ &quot;wedges&quot; of path internally to give the &quot;underjoin&quot; in the path.<br>
+ When restroked, due to the mitre join still being set, these<br>
+ wedges turn into spikes.<br>
+<br>
+ The fix, implemented here, is to revise the way we do mitre joins.<br>
+ For paths stroked using the &quot;fast&quot; code, with miter joins, we<br>
+ perform slightly more complicated calculations at each join. This<br>
+ allows us to do the joins by moving the existing points of the<br>
+ paths 'inline'. This removes the need for the 'wedges', and<br>
+ actually gives us a much cleaner path overall.<br>
+<br>
+ This *should* help with pathological scan conversion cases too,<br>
+ because it means we will have fewer 'sleepers' in the 'train<br>
+ tracks' when strokepath is used.<br>
+<br>
+ This may not kick in in all cases where we'd like it to, because<br>
+ for some files, we use 'traditional' stroking, and so don't<br>
+ execute this code. One way around this would be to change<br>
+ gs_strokepath to disable 'traditional' filling in the presence<br>
+ of mitre joins, but that produces strange effects, so we're<br>
+ leaving it for now.<br>
+<br>
+base/gxstroke.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-18 15:11:01 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9dc0eb31d79bf819c97420aaf2f6fc5cf3a52c10">9dc0eb31d79bf819c97420aaf2f6fc5cf3a52c10</a>
+<blockquote>
+<p>
+ Bug 702196: Fix incorrect detection of &quot;thin&quot; lines while stroking.<br>
+<br>
+ When stroking lines, we spot whether a line is 'thin' (i.e. the<br>
+ perpendicular width of the line is less than 1 pixel), and handle<br>
+ those cases specially by using custom 'thin line' routines. This<br>
+ gives more pleasing results than slavishly following the 'any part<br>
+ of a pixel' rule.<br>
+<br>
+ The current code makes this determination in 2 places. Firstly,<br>
+ we calculate 'always_thin', by scaling the perpendicular vector<br>
+ and seeing if all possible lines will be 'thin'. Secondly, in<br>
+ the case when we aren't 'always_thin', we calculate it for each<br>
+ line segment in turn by calling 'width_is_thin'.<br>
+<br>
+ Unfortunately, the threshold used for the simple early rejection<br>
+ test in 'width_is_thin' is wrong. Rather than checking against<br>
+ 0.5, we should be checking against sqrt(1/8). This causes lines<br>
+ near 45 degrees to be improperly treated as thin. This is a<br>
+ simple fix.<br>
+<br>
+ This gives lots of progressions - so many that you wonder how we<br>
+ never spotted this before.<br>
+<br>
+ Unfortunately, buried in these progressions, there are a few files<br>
+ which, while improved, are still imperfect.<br>
+<br>
+ In some files, that use 'non-uniform' scales, (such as<br>
+ (53 0 0 21 0 0 )) a stroke of constant width can 'pop' between<br>
+ thick and thin as we move around the path; a near vertical<br>
+ line segment may be thin, whereas a near horizontal line segment<br>
+ might be thick due to the difference in scale. This is visually<br>
+ jarring.<br>
+<br>
+ To fix this, therefore, we'd need to modify the width_is_thin<br>
+ testing in non-uniform cases, so that it gives us the same results<br>
+ all the way around. Doing this would be complex, and ultimately<br>
+ actually ends up equivalent to us just relying on &quot;always_thin&quot;<br>
+ (with the exception of strictly vertical and horizontal line<br>
+ segements). We therefore disable the non-orthogonal test in<br>
+ 'width_is_thin' entirely.<br>
+<br>
+base/gxstroke.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-24 16:49:13 -0700
+</strong>
+<br>ray &lt;Ray.Johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d49dbf133ac49d09d626bab08ee92835a50a646a">d49dbf133ac49d09d626bab08ee92835a50a646a</a>
+<blockquote>
+<p>
+ Fix bug 702182: VMerror due to leaks in pattern cache due to locking.<br>
+<br>
+ If the tile being loaded by the clist reader was already in the cache and<br>
+ was locked, the slot would be re-loaded (with the same tile) without freeing<br>
+ up the previously loaded tile. It would be nicer to be able to skip reading<br>
+ the tile in this case, but we need to consume the data from the clist sequence,<br>
+ so just unlock it so it can be freed, then re-load it (presumably setting the<br>
+ lock again).<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-24 18:09:16 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1258814b0532f06217cbfaffc5254c9645f69b42">1258814b0532f06217cbfaffc5254c9645f69b42</a>
+<blockquote>
+<p>
+ Don't delete copied libjpeg source files after use<br>
+<br>
+ For reasons I'm not totally convinced are still valid, we copy the libpeg source<br>
+ files into the build directory (normally 'obj') and compile them from there,<br>
+ then delete them.<br>
+<br>
+ This apparently causes problems with oss-fuzz coverage builds, and it also makes<br>
+ debugging a pain, because the source files don't exist where the debug info<br>
+ thinks they should.<br>
+<br>
+base/jpeg.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-24 15:22:01 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0ec0004cb9366002dbd97f40c32d8da6d33c1904">0ec0004cb9366002dbd97f40c32d8da6d33c1904</a>
+<blockquote>
+<p>
+ Remove unused base/gsalphac.[ch]<br>
+<br>
+ This was the compositing device used for Display Postscript/NeXT specific<br>
+ alpha blending. Since we haven't supported DPS properly for many years, and<br>
+ officially dropped it completely a couple of years ago, and this compositing<br>
+ device has not been included in the build for several years....<br>
+<br>
+ ....just delete the files and remove references to them.<br>
+<br>
+base/gsalphac.c<br>
+base/gsalphac.h<br>
+doc/Develop.htm<br>
+windows/ghostscript.vcproj<br>
+windows/ghostscript.vcxproj<br>
+windows/ghostscript.vcxproj.filters<br>
+windows/ghostscript_rt.vcxproj<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-24 15:19:23 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1c9bd8e0aa41e69c4bd46a6c553320d97af1ce7c">1c9bd8e0aa41e69c4bd46a6c553320d97af1ce7c</a>
+<blockquote>
+<p>
+ Disable PPC optimisations in libpng<br>
+<br>
+ Since we don't include the libpng source file with the PowerPC optimizations<br>
+ in our build, and it only applies to reading, which we don't rely on, just<br>
+ disable calling the optimizations.<br>
+<br>
+ Cures a linker error on PowerPCle platforms<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-23 15:27:37 -0700
+</strong>
+<br>ray &lt;Ray.Johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cca279886b3bbb4d3af5768880565c9f7b372c08">cca279886b3bbb4d3af5768880565c9f7b372c08</a>
+<blockquote>
+<p>
+ Fix Bug 702181: SEGV when BufferSpace is at or above -K alloc limit<br>
+<br>
+ The issue with this file is that one of the pages is done in page mode because<br>
+ it was so small, but the 'resize' call when doing page 2 was not checking the<br>
+ allocation request against the limit, so the malloc would succeed, but the very<br>
+ next (and all subsequent) allocations would fail. The gdev_prn_allocate would<br>
+ capture the ecode, but would still call the clist_enable_multi_thread_render<br>
+ resulting in the SEGV.<br>
+<br>
+ Add the check in the gs_heap_resize_object function, and make sure and leave<br>
+ the 'monitor' after failure, then don't call clist_enable_multi_thread if the<br>
+ resize failed.<br>
+<br>
+base/gdevprn.c<br>
+base/gsmalloc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-20 10:26:17 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=886347337de7e121e3e1ffa348aa74856c8290ed">886347337de7e121e3e1ffa348aa74856c8290ed</a>
+<blockquote>
+<p>
+ Bug 702190: Set CFLAGS and CFLAGSAUX separately in Makefile<br>
+<br>
+ Building with -DGS_NO_FILESYSTEM allows support for environment without a<br>
+ proper file system, by stubbing out the gp_ calls that would normally access<br>
+ the file system.<br>
+<br>
+ Obviously, for Ghostscript to function, that means it requires its resource<br>
+ and initialisation files to be built into the binary in the ROMFS.<br>
+<br>
+ A problem arises if you include the -DGS_NO_FILESYSTEM CFLAG when building the<br>
+ mkromfs utility, which creates the ROMFS, since denying it access to the file<br>
+ system results in an empty ROMFS. Previously, setting CFLAGS to include<br>
+ -DGS_NO_FILESYSTEM when calling configure resulted in that flag being applied to<br>
+ the main build, and the auxiliary tools build (including mkromfs), unless the<br>
+ build specified was a cross-compilation.<br>
+<br>
+ This splits the CFLAGS and CFLAGSAUX so they are set separately in the Makefile<br>
+ so configure can filter out unwanted flags from the auxtools flags.<br>
+<br>
+ Currently, the only one being filtered is -DGS_NO_FILESYSTEM<br>
+<br>
+Makefile.in<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-19 16:19:57 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7710a398e132e13f9e0ff2f83188cbe7d2b59b1f">7710a398e132e13f9e0ff2f83188cbe7d2b59b1f</a>
+<blockquote>
+<p>
+ Bug 702115: use the offical method to detect gcc<br>
+<br>
+ In the early days of autoconf there was no defined way to check if the selected<br>
+ compiler was gcc (or compatible) or not. Projects used the autoconf internal<br>
+ shell variable ac_cv_prog_gcc to get that info.<br>
+<br>
+ autoconf introduced the GCC shell variable as the official way to know (a long<br>
+ time ago), and we never revised our configure.ac to reflect that.<br>
+<br>
+ This does so.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-19 16:12:46 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=66c2469c7d4543f32d6dc93edf1d649e809b8419">66c2469c7d4543f32d6dc93edf1d649e809b8419</a>
+<blockquote>
+<p>
+ Remove deprecated opvp/oprp devices from default build<br>
+<br>
+ They can currently be reinstated with --with-openprinting<br>
+<br>
+ That option does not appear in the --help output because we want people to have<br>
+ to ask us about it, so we know if people actually use opvp/oprp, and still<br>
+ need them.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-23 09:07: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=fedfb0e00755d9529d15751650864d304708f0e1">fedfb0e00755d9529d15751650864d304708f0e1</a>
+<blockquote>
+<p>
+ Remove analytics stuff.<br>
+<br>
+ Analytics and cookie stuff will be added at serve time by Apache.<br>
+<br>
+ See /etc/apache2/sites-available/ghostscript.com-le-ssl.conf for more info<br>
+<br>
+doc/API.htm<br>
+doc/C-style.htm<br>
+doc/Commprod.htm<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/sample_downscale_device.htm<br>
+doc/subclass.htm<br>
+doc/thirdparty.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-21 18:08:43 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d98ab1f82e64e11db6478c4ff3e3bcffcc69836e">d98ab1f82e64e11db6478c4ff3e3bcffcc69836e</a>
+<blockquote>
+<p>
+ jbig2dec: Cast literal to avoid shifting outside of valid range.<br>
+<br>
+ Fixes Coverity CID 355175.<br>
+<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-21 16:49:33 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1677b6c0d7b090ad7691e766d4809f9badeecd20">1677b6c0d7b090ad7691e766d4809f9badeecd20</a>
+<blockquote>
+<p>
+ jbig2dec: Record stream errors in separate struct field.<br>
+<br>
+ Previously the number of remaining bytes in a read word (&gt;= 0) and the error<br>
+ state (&lt; 0) was stored in the same int field. Fixing signedness conversion<br>
+ warnings changed the type of the field to an unsigned field. The error state<br>
+ should have been stored separately at that time but it was overlooked. In this<br>
+ commit the error state is separated out into its own field.<br>
+<br>
+ Fixes Coverity CID 355176.<br>
+<br>
+jbig2dec/jbig2_arith.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-21 15:59:21 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a80f7f12e7a2fb0caa1ea9ac6fa8981cc539a1bc">a80f7f12e7a2fb0caa1ea9ac6fa8981cc539a1bc</a>
+<blockquote>
+<p>
+ jbig2dec: Use correct define for maxium value of type.<br>
+<br>
+ Fixes Coverity CID 355177.<br>
+<br>
+jbig2dec/jbig2_page.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-21 16:20:28 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f0c17451afb66e6fcf3bd453490b4b9d2b06b42">4f0c17451afb66e6fcf3bd453490b4b9d2b06b42</a>
+<blockquote>
+<p>
+ jbig2dec: Fix two overlooked warnings.<br>
+<br>
+ While working to fix all warnings seen when -Wsign-conversion is<br>
+ enabled, these two warnings were accidentally introduced by commit<br>
+ ff53af0d4ff9291aa5039522f5553a2850dd569d and not noticed in the<br>
+ avalanche of warnings emitted due to -Wsign-conversion. This commit<br>
+ changes the indicies to the type of the limit variable, fixing the<br>
+ warnings.<br>
+<br>
+jbig2dec/jbig2_page.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-21 10:00:42 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a45d7217c8c1578475ee9204d1f4ad46520f44d1">a45d7217c8c1578475ee9204d1f4ad46520f44d1</a>
+<blockquote>
+<p>
+ PDF interpreter - swallow errors reading ICC profiles and continue<br>
+<br>
+ Bug #702240 &quot;Invalid ICC profile aborts PDF ineterpretation&quot;<br>
+<br>
+ The file contains an ICCbased space which references an embedded ICC<br>
+ profile, which is Flate compressed. The compressed stream has been<br>
+ corrupted and cannot be decompressed.<br>
+<br>
+ This causes the colour space code to throw an ioerror and terminate<br>
+ interpretation, Acrobat (as usual) doesn't even give a warning.<br>
+<br>
+ This commit checks for an error creating the ReusableStreamDecode and<br>
+ if it fails sets the Data Source in the stream dictionary to null. We<br>
+ will later use the /N value in the stream dictionary to set a reasonable<br>
+ fallback space (in this case CMYK).<br>
+<br>
+Resource/Init/pdf_draw.ps<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-12 02:54:08 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9b2fc96b3ffc1c9d3d39b3d0ce27bf8abba7b8cf">9b2fc96b3ffc1c9d3d39b3d0ce27bf8abba7b8cf</a>
+<blockquote>
+<p>
+ jbig2dec: Fix signedness conversions.<br>
+<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+jbig2dec/jbig2_huffman.c<br>
+jbig2dec/jbig2_priv.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-12 00:27:13 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f2613ed2159e8efc6b5b593e668a00d8bea9ace8">f2613ed2159e8efc6b5b593e668a00d8bea9ace8</a>
+<blockquote>
+<p>
+ jbig2dec: Use uint32_t when counting segments.<br>
+<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2_priv.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-12 00:26:59 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ff53af0d4ff9291aa5039522f5553a2850dd569d">ff53af0d4ff9291aa5039522f5553a2850dd569d</a>
+<blockquote>
+<p>
+ jbig2dec: Always use uint32_t when counting pages.<br>
+<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2_page.c<br>
+jbig2dec/jbig2_priv.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-11 20:56:06 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6073e803bd652cd8fdb17f6be6beea05a13fd4f0">6073e803bd652cd8fdb17f6be6beea05a13fd4f0</a>
+<blockquote>
+<p>
+ jbig2dec: Handle errors from reading jbig2 streams.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-11 20:55:51 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1e9b5185c889266c9a3d6f25c9df558d41335d46">1e9b5185c889266c9a3d6f25c9df558d41335d46</a>
+<blockquote>
+<p>
+ jbig2dec: Use size_t for string length.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-11 18:42:26 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dc3f780ee3c9e43f34ba1c0b1101b41c58b40710">dc3f780ee3c9e43f34ba1c0b1101b41c58b40710</a>
+<blockquote>
+<p>
+ jbig2dec: Avoid formatting error messages twice in error callback.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-11 16:35:53 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9b5008aa2bc1c6a6acb2c6f90d1ef8d6bad9e66a">9b5008aa2bc1c6a6acb2c6f90d1ef8d6bad9e66a</a>
+<blockquote>
+<p>
+ jbig2dec: Pass segment numbers as unsigned values to error callback.<br>
+<br>
+ According to the JBIG2 specification segments numbers are 32 bit unsigned<br>
+ integer. Previously any segment numbers larger than INT32_MAX would be passed<br>
+ as negative numbers.<br>
+<br>
+ Some parts of the decoder do not yet know, or do not have access to the<br>
+ currently decoded segment number, and this needs to be specially indicated.<br>
+ Therefore jbig2dec appropriates the unlikely segment number 0xffffffff to<br>
+ indicate an unknown segment number.<br>
+<br>
+ This is a change of the public API.<br>
+<br>
+base/sjbig2.c<br>
+gpdl/jbig2top.c<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2.h<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+jbig2dec/jbig2_arith_int.c<br>
+jbig2dec/jbig2_halftone.c<br>
+jbig2dec/jbig2_huffman.c<br>
+jbig2dec/jbig2_image.c<br>
+jbig2dec/jbig2_mmr.c<br>
+jbig2dec/jbig2_page.c<br>
+jbig2dec/jbig2_priv.h<br>
+jbig2dec/jbig2_refinement.c<br>
+jbig2dec/jbig2_segment.c<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-17 01:48:00 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ea9b3a676a516a603fabb593085d14a67356db6f">ea9b3a676a516a603fabb593085d14a67356db6f</a>
+<blockquote>
+<p>
+ Bug 701721: jbig2dec: Fix under/overflow handling in arithmetic integer decoder.<br>
+<br>
+ The previous detection logic caused GCC's -Wlogical-op to trip.<br>
+ Not only that, but the detection logic never took into account<br>
+ that underflow is not possible (the worst case is V == INT32_MIN,<br>
+ but offset is always &gt; 0, so underflow cannot happen), nor take<br>
+ varying offset values into account (hardcoded limits meant that<br>
+ the offset was ignored even if it could not cause an overflow),<br>
+ but instead could cause non-clamped values to be emitted.<br>
+<br>
+ This corrected logic adheres to the Annex A. Table A.1 in the specification.<br>
+<br>
+jbig2dec/jbig2_arith_int.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-10-01 18:08:34 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=92faea67b31570e84b978a77b43c8f38bdad7bd4">92faea67b31570e84b978a77b43c8f38bdad7bd4</a>
+<blockquote>
+<p>
+ jbig2dec: Avoid warning by copying bytes instead of characters.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-29 17:10:00 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f20fc43d80e31780935be96393800cc1fac8ac50">f20fc43d80e31780935be96393800cc1fac8ac50</a>
+<blockquote>
+<p>
+ jbig2dec: Enable warnings for signedness in comparisons.<br>
+<br>
+jbig2dec/configure.ac.in<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-29 12:09:40 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5947fb2f1c022982e82406639517ebacae8d5cf6">5947fb2f1c022982e82406639517ebacae8d5cf6</a>
+<blockquote>
+<p>
+ jbig2dec: Address all signedness comparison issues.<br>
+<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+jbig2dec/jbig2_arith_iaid.h<br>
+jbig2dec/jbig2_halftone.c<br>
+jbig2dec/jbig2_halftone.h<br>
+jbig2dec/jbig2_huffman.c<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+jbig2dec/jbig2_text.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-29 12:09:22 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9394be6a45aea026f61900e1cb661a30db192c15">9394be6a45aea026f61900e1cb661a30db192c15</a>
+<blockquote>
+<p>
+ jbig2dec: Remove trailing whitespace.<br>
+<br>
+jbig2dec/CHANGES<br>
+jbig2dec/autogen.sh<br>
+jbig2dec/configure.ac.in<br>
+jbig2dec/msvc.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-29 16:26:53 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1899ce3f1844cf941d19c38fc8de8f126bf7419d">1899ce3f1844cf941d19c38fc8de8f126bf7419d</a>
+<blockquote>
+<p>
+ jbig2dec: Avoid passing NULL buffer to snprintf().<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 17:07:27 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4239ceeb4dd39e2ac183a01877b62761ae13bae4">4239ceeb4dd39e2ac183a01877b62761ae13bae4</a>
+<blockquote>
+<p>
+ jbig2dec: Avoid artificially limiting jbig2dec.<br>
+<br>
+ Commit 7366747076f3b75def52079bd4d5021539a16394 fixes bug 694949 by<br>
+ adding an artificial limit (that does not come from the JBIG2<br>
+ specification) to the sizes of generic regions compared with the image<br>
+ they will be composed onto. A problem with such artificial limits is<br>
+ that they are arbitrary. This is exemplified by the changes in<br>
+ 0d21a58ab12b9584faa54baa48ce0dab350af53e to make jbig2dec not error<br>
+ out on commonly occurring images. It is impossible to know whether<br>
+ this updated limit is enough, or whether an even large generic region<br>
+ in a JBIG2 image will be found in the future.<br>
+<br>
+ Instead of imposing these kinds of limits, jbig2dec should attempt to<br>
+ decode any JBIG2 image given to it. If the user wants to limit the<br>
+ amount of memory jbig2dec may use for decoding any JBIG2 image, this<br>
+ is a better way of implicitly limiting image sizes.<br>
+<br>
+jbig2dec/configure.ac.in<br>
+jbig2dec/jbig2_generic.c<br>
+jbig2dec/snprintf.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 19:01:05 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cd1ef5475a3bda7a97851abc679c75e2ee64dec3">cd1ef5475a3bda7a97851abc679c75e2ee64dec3</a>
+<blockquote>
+<p>
+ Bug 702165: jbig2dec: Treat end of stream as fatal error, and remember errors.<br>
+<br>
+ * Treat reading beyond end of stream in arithmetic decoder as a fatal error.<br>
+<br>
+ * Remember previously encountered stream errors in arithmetic decoder.<br>
+<br>
+ * Ignore trailing bytes after terminating marker code in stream.<br>
+<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_huffman.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 18:12:31 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=30842ee99923fa10a7301494fd08b998e7acf57b">30842ee99923fa10a7301494fd08b998e7acf57b</a>
+<blockquote>
+<p>
+ jbig2dec: Add overflow detection for IAID context size.<br>
+<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 17:58:40 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=17e84cb1a4903fab26b5fc5d2e4805a1097f5a33">17e84cb1a4903fab26b5fc5d2e4805a1097f5a33</a>
+<blockquote>
+<p>
+ jbig2dec: Let arithmetic decoder and the underlying stream report errors.<br>
+<br>
+ When a called function indicates an error, the caller should print warnings.<br>
+ Since the arithmetic decoder now uses the normal way of reporting errors,<br>
+ the callers of the decoder are changed to report warnings.<br>
+<br>
+jbig2dec/jbig2.c<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_arith.h<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+jbig2dec/jbig2_arith_int.c<br>
+jbig2dec/jbig2_generic.c<br>
+jbig2dec/jbig2_huffman.c<br>
+jbig2dec/jbig2_priv.h<br>
+jbig2dec/jbig2_refinement.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 17:31:48 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=716560bf5f2bc4b821ca6924ec648ca4949826bb">716560bf5f2bc4b821ca6924ec648ca4949826bb</a>
+<blockquote>
+<p>
+ jbig2dec: Handle under-/overflow detection and messaging better.<br>
+<br>
+ Previously SYMWIDTH was capped too early in order to prevent underflow<br>
+ Moreover TOTWIDTH was allowed to overflow.<br>
+<br>
+ Now the value DW is checked compared to SYMWIDTH, preventing over<br>
+ underflow and overflow at the correct limits, and an overflow<br>
+ check has been added for TOTWIDTH.<br>
+<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-16 22:56:06 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cf43daf9f8381a9accf36d12bad2324d021ec8c6">cf43daf9f8381a9accf36d12bad2324d021ec8c6</a>
+<blockquote>
+<p>
+ jbig2dec: Use unsigned suffix when defining UINT32_MAX.<br>
+<br>
+ Also move UINT32_MAX/INT32_MAX to internal header so they are defined<br>
+ (the same) in every jbig2 source code file.<br>
+<br>
+jbig2dec/jbig2_arith_int.c<br>
+jbig2dec/jbig2_generic.c<br>
+jbig2dec/jbig2_image.c<br>
+jbig2dec/jbig2_mmr.c<br>
+jbig2dec/jbig2_page.c<br>
+jbig2dec/jbig2_priv.h<br>
+jbig2dec/jbig2_segment.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 17:19:12 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a47257407ee8938051f14da81890869a5ade0c26">a47257407ee8938051f14da81890869a5ade0c26</a>
+<blockquote>
+<p>
+ jbig2dec: Keep type of index and array length the same.<br>
+<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 16:57:23 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b610aebdd36d939a878e336c255c734b4432e023">b610aebdd36d939a878e336c255c734b4432e023</a>
+<blockquote>
+<p>
+ jbig2dec: Add more references to specification.<br>
+<br>
+jbig2dec/jbig2_arith.c<br>
+jbig2dec/jbig2_arith_iaid.c<br>
+jbig2dec/jbig2_symbol_dict.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 15:52:26 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d4dc797e4a65871134f6a244cb8421a33fe91360">d4dc797e4a65871134f6a244cb8421a33fe91360</a>
+<blockquote>
+<p>
+ jbig2dec: Add command line option to limit memory usage.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 15:52:06 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a64ec1a232aa675e75d71da2632c6fca9a7fddcf">a64ec1a232aa675e75d71da2632c6fca9a7fddcf</a>
+<blockquote>
+<p>
+ jbig2dec: Mention all long options in usage and manpage.<br>
+<br>
+jbig2dec/jbig2dec.1<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2019-09-15 15:45:47 +0200
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3f01ab3739773db83040d8c2a7c3562b9103ed4e">3f01ab3739773db83040d8c2a7c3562b9103ed4e</a>
+<blockquote>
+<p>
+ jbig2dec: Separate command line tool error callback state from parameters.<br>
+<br>
+jbig2dec/jbig2dec.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-05 03:31:43 +0800
+</strong>
+<br>Sebastian Rasmussen &lt;sebras@gmail.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e4dd74c63031c705b3b6938fdac6b69e6317f00a">e4dd74c63031c705b3b6938fdac6b69e6317f00a</a>
+<blockquote>
+<p>
+ Propagate errors when closing pipe.<br>
+<br>
+base/gdevpipe.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-17 15:52:20 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=97ad9c044a1d3f87b16b2be754e088e49cc1f398">97ad9c044a1d3f87b16b2be754e088e49cc1f398</a>
+<blockquote>
+<p>
+ Bring master up to date 9.52 release branch<br>
+<br>
+ Add references to the 64 bit windows exes<br>
+<br>
+ Release notes for 9.52 release<br>
+<br>
+ Version, dates etc for 9.52 release<br>
+<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>2020-03-19 08:12:38 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c126cabcc5760aec6458b97729c78c821e24d122">c126cabcc5760aec6458b97729c78c821e24d122</a>
+<blockquote>
+<p>
+ Bump version prior to 9.52 release<br>
+<br>
+Resource/Init/gs_init.ps<br>
+base/version.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-18 10:40:39 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7ba3000d394406331c8e49c87e1d6494887c4e98">7ba3000d394406331c8e49c87e1d6494887c4e98</a>
+<blockquote>
+<p>
+ CID: 355082. Fix comparison of size_t &lt; 0.<br>
+<br>
+ Now we're using param_read_size_t, we no longer need to check<br>
+ for the returned value being &lt; 0. This check is pickled into<br>
+ the coertion code contained within that function.<br>
+<br>
+base/gsdparam.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-17 00:44:02 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4cbc36fe4546bce70537bc65541f65b4d7259a5b">4cbc36fe4546bce70537bc65541f65b4d7259a5b</a>
+<blockquote>
+<p>
+ Bug 702151: Avoid truncating pointers in debug code.<br>
+<br>
+ Introduce a PRI_INTPTR and use that to consistently display<br>
+ pointers. We avoid using %p, as that displays inconsistently<br>
+ between platforms. Sometimes it does 0x%x, sometimes just %x.<br>
+<br>
+base/gdevdrop.c<br>
+base/gdevnfwd.c<br>
+base/gdevprn.c<br>
+base/gsalloc.c<br>
+base/gschar0.c<br>
+base/gscie.c<br>
+base/gsciemap.c<br>
+base/gscspace.c<br>
+base/gsfcmap1.c<br>
+base/gsfont.c<br>
+base/gsht.c<br>
+base/gsicc_cache.c<br>
+base/gsicc_manage.c<br>
+base/gsicc_profilecache.c<br>
+base/gsimage.c<br>
+base/gsmalloc.c<br>
+base/gsmchunk.c<br>
+base/gsmemory.c<br>
+base/gsmisc.c<br>
+base/gsrefct.h<br>
+base/gsstate.c<br>
+base/gsstruct.h<br>
+base/gstrans.c<br>
+base/gstype1.c<br>
+base/gstype2.c<br>
+base/gxacpath.c<br>
+base/gxalloc.h<br>
+base/gxbcache.c<br>
+base/gxccache.c<br>
+base/gxccman.c<br>
+base/gxclist.c<br>
+base/gxclmem.c<br>
+base/gxclread.c<br>
+base/gxclthrd.c<br>
+base/gxclutil.c<br>
+base/gxcpath.c<br>
+base/gxcpath.h<br>
+base/gxfill.c<br>
+base/gxfillsl.h<br>
+base/gxht.c<br>
+base/gxpath.c<br>
+base/gxpcmap.c<br>
+base/scfd.c<br>
+base/scfe.c<br>
+base/sfxfd.c<br>
+base/sfxstdio.c<br>
+base/stdint_.h<br>
+base/stream.c<br>
+base/szlibc.c<br>
+devices/gdevfax.c<br>
+devices/gdevx.c<br>
+psi/ialloc.c<br>
+psi/idebug.c<br>
+psi/idict.c<br>
+psi/idicttpl.h<br>
+psi/idstack.c<br>
+psi/igc.c<br>
+psi/igcref.c<br>
+psi/igcstr.c<br>
+psi/iinit.c<br>
+psi/ilocate.c<br>
+psi/imain.c<br>
+psi/imainarg.c<br>
+psi/iname.c<br>
+psi/interp.c<br>
+psi/isave.c<br>
+psi/iutil.c<br>
+psi/zcie.c<br>
+psi/zcontrol.c<br>
+psi/zvmem.c<br>
+xps/xpshash.c<br>
+xps/xpsresource.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-12 17:22:36 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d7961033ee224fc5d2c96a16bea3f3399dd29561">d7961033ee224fc5d2c96a16bea3f3399dd29561</a>
+<blockquote>
+<p>
+ Add support for 64bit and size_t paramaters.<br>
+<br>
+ Cope with both int64_t's and size_t's with appropriate<br>
+ rangechecks when casting will cause problems.<br>
+<br>
+ -d values on the command line are read as int64_t's.<br>
+<br>
+ If we ever find outselves wanting to assign a size_t where<br>
+ the 63rd bit matters, then we may have to rethink this :)<br>
+<br>
+ We also change various params (such as MaxBitmap, MaxPatternBitmap<br>
+ etc) to be size_t's. This affects the device structure itself.<br>
+<br>
+base/gsdparam.c<br>
+base/gslib.c<br>
+base/gsparam.c<br>
+base/gsparam.h<br>
+base/gsparam2.c<br>
+base/gsparams.c<br>
+base/gxdevcli.h<br>
+base/gxpcache.h<br>
+base/gxpcmap.c<br>
+base/gxpcolor.h<br>
+base/spprint.c<br>
+base/spprint.h<br>
+base/spsdf.c<br>
+devices/vector/gdevpsdp.c<br>
+pcl/pl/plmain.c<br>
+psi/imainarg.c<br>
+psi/iparam.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-15 14:48:29 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e1b322c8ca8f08b5af398a912c511dc041cd9c86">e1b322c8ca8f08b5af398a912c511dc041cd9c86</a>
+<blockquote>
+<p>
+ Fix bug 702142: SMask profile 'swap' could cause clist to use wrong profile<br>
+<br>
+ The SMask 'swap' of profiles for the 'default' colorspaces in the icc_manager<br>
+ was not being detected by the clist logic since the colorspace id was still<br>
+ set to the cs_Device*_id value (1, 3, or 4).<br>
+<br>
+ The fix is to have the clist writing check for unknown color_space check BOTH<br>
+ the color_space.id and the color_space.space, and flag 'unknown' if either<br>
+ differed. The color_space.space includes the icc_profile info.<br>
+<br>
+ This results in a few progressions as well as fixing the file of this bug.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 15:07: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=0fad2491ae5d9dae39807266b6f0f2584a02bdd8">0fad2491ae5d9dae39807266b6f0f2584a02bdd8</a>
+<blockquote>
+<p>
+ Bug 702217: Reinstate dynamic libs LDFLAGS for MacOS<br>
+<br>
+ With the significant revamp of the platform detection functions in configure<br>
+ the LDFLAGS for building the gs shared library on MacOS went astray. This<br>
+ puts them back in.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-16 09:06:16 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=aaf5edb15fceaae962569bae30eb4633480c1d15">aaf5edb15fceaae962569bae30eb4633480c1d15</a>
+<blockquote>
+<p>
+ Repair device subclassing after fill+stroke commit<br>
+<br>
+ Bug 702221 &quot;Ghostscript 9.51 - SIGFPE when -dFirstPage or -dLastPage is set&quot;<br>
+<br>
+ The fill+stroke commit had an error with the default method for handling<br>
+ fill_stroke_path which passed the subclassing device as a parameter to<br>
+ the child, instead of passing the child device. This caused seg faults,<br>
+ floating point exceptions, hangs, and possibly other problems.<br>
+<br>
+ In addition the object filtering device had been modified to pass the<br>
+ fill+stroke method to the default handler, instead of checking to see<br>
+ if vector operations should be dropped.<br>
+<br>
+ This commit fixes both problems.<br>
+<br>
+base/gdevoflt.c<br>
+base/gdevsclass.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 10:56:43 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b5682afdd022f0c1f1a20f83568300655bc27bfe">b5682afdd022f0c1f1a20f83568300655bc27bfe</a>
+<blockquote>
+<p>
+ Add ARCH_MAX_SIZE_T to configure's arch.h prototype<br>
+<br>
+arch/arch_autoconf.h.in<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 10:53:15 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=09d359ca87e47cac31c7f1466250b3299818ce86">09d359ca87e47cac31c7f1466250b3299818ce86</a>
+<blockquote>
+<p>
+ Don't fail on missing freetype for auxtools run<br>
+<br>
+ When cross compiling, we shouldn't fail the recursive call to configure if<br>
+ there's no freetype - since it's not required for auxtools.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-13 18:57:30 -0700
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bba815fd5ab0427b96ad2f2d6d96e7d69b4964ad">bba815fd5ab0427b96ad2f2d6d96e7d69b4964ad</a>
+<blockquote>
+<p>
+ Bug 702191. Change Tr modes 2 and 6 to use fill_stroke operation.<br>
+<br>
+ Thanks to Ken Sharp who made the change to the PDF interpreter pdf_ops.ps.<br>
+ This showed a few files that had SEGV. This was due to both the fill and<br>
+ stroke having pattern colors where the pattern bits did not fit in the cache.<br>
+ The stroke color could eject the fill pattern from the cache. The fix is to<br>
+ lock the fill pattern in the cache as well as the stroke pattern (and unlock<br>
+ it as well after the fill_stroke).<br>
+<br>
+Resource/Init/pdf_ops.ps<br>
+base/gspaint.c<br>
+psi/dwmainc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-13 13:01:23 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3353e8f68c8b4b13db8f712e3d01503d9043df65">3353e8f68c8b4b13db8f712e3d01503d9043df65</a>
+<blockquote>
+<p>
+ pdfwrite - fix previous commit<br>
+<br>
+ commit 2a691356aeb538388ecbf0cafdf422bde771bad0 accidentally left a<br>
+ debugging hack in place, which would lead to lots of files including<br>
+ a ToUnicode CMap when that wasn't necessary, fix it here.<br>
+<br>
+devices/vector/gdevpdtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-13 11:10:50 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2a691356aeb538388ecbf0cafdf422bde771bad0">2a691356aeb538388ecbf0cafdf422bde771bad0</a>
+<blockquote>
+<p>
+ pdfwrite - preserve ToUnicode CMaps with non-standard mappings<br>
+<br>
+ Bug #702201 &quot;pdfwrite changes ligature&quot;<br>
+<br>
+ The title is incorrect, pdfwrite does not 'change ligature'. The PDF<br>
+ file uses an ffi ligature glyph from the embedded font, but the<br>
+ ToUnicode CMap does not map that to U+FB03, it maps it to 3 Unicode<br>
+ code points; f, f and i.<br>
+<br>
+ When we emit a simple font we check its Encoding to see if it needs a<br>
+ ToUnicode CMap, if it doesn't then we don't emit one. Because all the<br>
+ glyphs in this font are named, and have standard names, we don't need to<br>
+ emit a ToUnicode CMap and so we don't (keeps the file size down).<br>
+<br>
+ However, that means that PDF consumers will map the ligature glyph to a<br>
+ ligature ffi when copy/pasting (it has no other effect).<br>
+<br>
+ Here we check the Unicode code points as they are added to the internal<br>
+ record. If any of them is not 2 bytes long, then its not a standard<br>
+ mapping (simple fonts can only map to a single point). In that case we<br>
+ note the exception and when we come to write the font, in the code that<br>
+ checks the Encoding to see if we need to write a ToUnicode, we check<br>
+ this value, if we've seen a multiple code point in the ToUnicode CMap<br>
+ then we don't elide it, we embed the one we picked up.<br>
+<br>
+ This is not actually a bug IMO, there's nothing wrong with the mapping<br>
+ as it stands because an ffi glyph in the document really should map to<br>
+ a single Unicode code point ffi ligature. However, the creator of the<br>
+ PDF file obviously didn't want that, so we;ll now honour it.<br>
+<br>
+ NB this only affects the emission of a ToUnicode CMap, which is only<br>
+ used for copy/paste/search. The PDF contents are not affected by this<br>
+ commit.<br>
+<br>
+devices/vector/gdevpdte.c<br>
+devices/vector/gdevpdtf.c<br>
+devices/vector/gdevpdtf.h<br>
+devices/vector/gdevpdtw.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-13 08:16:34 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0bb921da9e702375618aa5fe7e85bf589e9a0108">0bb921da9e702375618aa5fe7e85bf589e9a0108</a>
+<blockquote>
+<p>
+ Tiny tweak to release notes<br>
+<br>
+ to say &quot;in the 9.50 release notes&quot; rather than &quot;above&quot;.<br>
+<br>
+doc/History9.htm<br>
+doc/News.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 11:37:33 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6018c8989f1c670d0b8c44d79438faa68dbe5a06">6018c8989f1c670d0b8c44d79438faa68dbe5a06</a>
+<blockquote>
+<p>
+ Bring master up to date with 9.51 release branch<br>
+<br>
+ Dates etc for 9.51 RC1<br>
+<br>
+ Plus prelim changelog<br>
+<br>
+ Dates, changelog etc for 9.51rc2<br>
+<br>
+ Add mention of deprecating/removing opvp/oprp devices<br>
+<br>
+ Dates/logs for 9.51 release candidate 3<br>
+<br>
+ Dates, changelog etc for 9.51 release<br>
+<br>
+Makefile.in<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>
+psi/winint.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-12 17:46:43 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e61555d8b960f1a87664fc378f4ce63619a762aa">e61555d8b960f1a87664fc378f4ce63619a762aa</a>
+<blockquote>
+<p>
+ Change 9.28 to 9.50 in the SAFER section<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-11 15:48: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=b2d084d01a22261281fc35e990efc46dde6ea8f9">b2d084d01a22261281fc35e990efc46dde6ea8f9</a>
+<blockquote>
+<p>
+ Improve debugging error messages in fontconfig code.<br>
+<br>
+ Change the order we retrieve values, so we get FC_FILE (which *should* always<br>
+ succeed) first. Thus we can use that in subsequent DEBUG messages, giving<br>
+ slightly more useful diagnostics.<br>
+<br>
+base/gp_unix.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-11 13:18:00 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=09a575f0fdc6edde7e42f325167318a1b199839f">09a575f0fdc6edde7e42f325167318a1b199839f</a>
+<blockquote>
+<p>
+ (fontconfig) Don't stop enumerating fonts on error.<br>
+<br>
+ We only want to finish enumerating the fontconfig fonts list once the list<br>
+ is exhausted, not when an individual font gives an error.<br>
+<br>
+ In the event a font gives an error, skip it and move on.<br>
+<br>
+base/gp_unix.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-05 13:12:12 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=32fde6e59a76fa7bcc7c3b977a77b871a740f568">32fde6e59a76fa7bcc7c3b977a77b871a740f568</a>
+<blockquote>
+<p>
+ More problems with TTF &quot;notdef&quot; glyphs<br>
+<br>
+ The font in this file is questionable according to the spec. The spec says GID 0<br>
+ in a TTF *must* be the &quot;notdef&quot; glyph which, traditionally, is a hollow<br>
+ rectangle glyph. This contradicts what Postscript and PDF expect which is that<br>
+ the .notdef glyph will be non-marking.<br>
+<br>
+ The problem is many PDF embedded TTF fonts ignore this, and populate GID 0 with<br>
+ a &quot;meaningful&quot; glyph rather than an actual notdef.<br>
+<br>
+ Previously, the fonts that did this were all ones that used MS Unicode cmap<br>
+ tables and hence we used that to determine whether to image GID 0 or not in<br>
+ TTFs.<br>
+<br>
+ This file does not use a Unicode cmap, but rather an Apple cmap table. In this<br>
+ case, the cmap table maps every character code to GID 0, GID 0 being the only<br>
+ glyph defined in the font.<br>
+<br>
+ So, tweak the heuristic so that in the event we have what *looks* like a<br>
+ notdef, we'll look up the character code in the TTF cmap table, and if<br>
+ the cmap table maps that code to GID 0, then we'll image the glyph.<br>
+ Otherwise, we will force it to be non-marking.<br>
+<br>
+ (Bug 702167)<br>
+<br>
+Resource/Init/gs_ttf.ps<br>
+psi/zfapi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-09 07:08:00 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3f7832e4b9568e70bdf3bb32c877c4bf5e9dc3b4">3f7832e4b9568e70bdf3bb32c877c4bf5e9dc3b4</a>
+<blockquote>
+<p>
+ PS interpreter - another 64-bit integer fix<br>
+<br>
+ Bug #702197 &quot;Integer overflowin --for-- on Windows&quot;<br>
+<br>
+ Both the limit and the control variable were being passed to types<br>
+ which truncated values when long or int were not 64-bit types.<br>
+<br>
+psi/zcontrol.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-09 05:22:22 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9a0c0303127e4dba3fdc244cf3d75684e5cc8358">9a0c0303127e4dba3fdc244cf3d75684e5cc8358</a>
+<blockquote>
+<p>
+ PS interpreter - fix cvrs with 64-bit integers<br>
+<br>
+ Bug #702195 &quot;Integer overflow in cvrs on Windows&quot;<br>
+<br>
+ Another 64-bit integer fix, we were casting the result of the radix<br>
+ calculation through a long which on Windows is not 64-bit (on Linux it<br>
+ is), leading to truncation o the result.<br>
+<br>
+ Fixed by casting through ps_uint instead. We also need to check for<br>
+ CPSI mode here as we must use a 32-bit intermediate integer if we are in<br>
+ CPSI mode and emit a rangecheck if the integer overflows 32 bits.<br>
+<br>
+psi/ztype.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-08 00:26:16 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=56840269a9df474a029f12ce8e4e41bb2abea313">56840269a9df474a029f12ce8e4e41bb2abea313</a>
+<blockquote>
+<p>
+ PS interpreter some 64-bit integer fixes<br>
+<br>
+ Bug #702194 &quot;cvi produces incorrect results&quot;<br>
+<br>
+ This was simply caused by a cast through long. However its not enough<br>
+ merely to change the cast, we must also check for running in CPSI mode<br>
+ and throw an error if the returned integer cannot be represented in a<br>
+ 32-bit word, for compatibility with test suites.<br>
+<br>
+ In addition (see bug #702134) when exp throws an undefinedresult error<br>
+ delay setting the stack variable until after we have tested the result,<br>
+ so that we do not end up returning a INF on the stack, as is done in<br>
+ other code paths which check for NaN and INF.<br>
+<br>
+ Thirdly; in div cater for the case of an integer divided by a real and<br>
+ check the result for NaN and INF (as the other cases do). This now<br>
+ properly throws an error and does not return NaN or INF on the stack.<br>
+<br>
+psi/zarith.c<br>
+psi/zmath.c<br>
+psi/ztype.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-05 09:58:47 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=933a09069dea35d570694e157013f272995ca5c4">933a09069dea35d570694e157013f272995ca5c4</a>
+<blockquote>
+<p>
+ Fix Raspbian build failure with mm_constant_zeros.<br>
+<br>
+ Moved 'static __m128i mm_constant_zeros' inside MM_SETUP macro definition, so<br>
+ it only appears if MM_SETUP() is actually used.<br>
+<br>
+base/gsroprun.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-03 16:56:59 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=417b80ba6b16de181b2eb2fe5ca2e04565228f5f">417b80ba6b16de181b2eb2fe5ca2e04565228f5f</a>
+<blockquote>
+<p>
+ Bug 702166: Image pattern phase mismatch when using clist<br>
+<br>
+ The gxclimag.c code, when it does 'cmd_put_drawing_color' was not updating<br>
+ the tile_phase. The Kanji text set the tile_phase to 100, but the begin_image<br>
+ was supposed to be 0,0 but the writer was not performing the set_tile_phase.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-04 17:42:04 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2a3b9b17cc32401b45382c42e081733d4f6d1a62">2a3b9b17cc32401b45382c42e081733d4f6d1a62</a>
+<blockquote>
+<p>
+ Cups device: Windows: avoid using an uninitialised mutex.<br>
+<br>
+cups/libs/cups/globals.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-03 16:40:31 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cbee08400ca895bb5f52de6cf8cb44ba59cc5fd8">cbee08400ca895bb5f52de6cf8cb44ba59cc5fd8</a>
+<blockquote>
+<p>
+ Bug 702177: Avoid SEGV on low memory in cmd_put_halftone.<br>
+<br>
+ Ensure that cmd_put_list_op cannot return NULL without<br>
+ setting an error code.<br>
+<br>
+base/gxclutil.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-03 11:53:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e9dc0327b8458ed7c3f1ca07870c7e54dbef6aa4">e9dc0327b8458ed7c3f1ca07870c7e54dbef6aa4</a>
+<blockquote>
+<p>
+ Simplify change to clusterpush.pl for ifilters.<br>
+<br>
+ No need to keep filters and ifilters separately as we pass<br>
+ them through with &quot;filter=&quot; and &quot;ifilter=&quot; intact.<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-03 10:55:43 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fa944725e4b3ca01e7a63608a2b5afc320d9a4d2">fa944725e4b3ca01e7a63608a2b5afc320d9a4d2</a>
+<blockquote>
+<p>
+ Add support to clusterpush.pl for ifilter.<br>
+<br>
+ Needs tweaks within the cluster too, so don't try using<br>
+ this immediately!<br>
+<br>
+toolbin/localcluster/clusterpush.pl<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-03 10:02:57 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ab41133a6852dbb3cecdfd19ccd4737f27d7be28">ab41133a6852dbb3cecdfd19ccd4737f27d7be28</a>
+<blockquote>
+<p>
+ Avoid potential Memento leak in gs_lib_ctx_set_icc_directory().<br>
+<br>
+ Return gs_error_VMerror after alloc failure, not -1. This doesn't fix a<br>
+ known memento squeeze test case, but returning -1 after alloc failure breaks<br>
+ gs_main_finit()'s cleanup and leaks blocks.<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-03 09:47:52 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a07bf9d0dee6c44865c25ed8c36cf68150301b39">a07bf9d0dee6c44865c25ed8c36cf68150301b39</a>
+<blockquote>
+<p>
+ Fixed Memento leak in gs_seticcdirectory().<br>
+<br>
+ Return gs_error_VMerror instead of -1, after alloc failure. This enables<br>
+ gs_main_finit() to clean up properly.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=111090 ./ghostpdl/membin/gs -sDEVICE=bit -o /dev/null examples/text_graphic_image.pdf<br>
+<br>
+base/gsicc_manage.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 20:05:57 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=05ebf9f3c38ff9b15f54122c682f88ee9dd9d55e">05ebf9f3c38ff9b15f54122c682f88ee9dd9d55e</a>
+<blockquote>
+<p>
+ Avoid compiler warning for MM_SETUP() __m128i mm_constant_ones.<br>
+<br>
+ This avoids warning about mm_constant_ones being used uninitialised.<br>
+<br>
+ Generated code for release build is unchanged.<br>
+<br>
+base/gsroprun.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 17:12:23 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=612ca06e4a41db0f0023827c878a55423500237e">612ca06e4a41db0f0023827c878a55423500237e</a>
+<blockquote>
+<p>
+ minor fix to toolbin/squeeze2text.py to cope with no input.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 19:13:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=968216b16318407a179e7907dd5d6d2ebc54bb25">968216b16318407a179e7907dd5d6d2ebc54bb25</a>
+<blockquote>
+<p>
+ Fix typo in 16bit saturation blending code.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 17:10:43 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2c5687fef9709b04dd96957677ff9accd16ee1f7">2c5687fef9709b04dd96957677ff9accd16ee1f7</a>
+<blockquote>
+<p>
+ Fix 16bit blending problem.<br>
+<br>
+ Seen with:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -o out%d.psd -r72 -dMaxBitmap=2000M<br>
+ tests_private/pdf/forms/v1.5/proxy_vol_1_number_1_1.pdf<br>
+<br>
+ on page 3.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-27 12:08:22 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=155894abeb41e90f9e2c8cb942269c2a2e1a6018">155894abeb41e90f9e2c8cb942269c2a2e1a6018</a>
+<blockquote>
+<p>
+ Reimplement saturation blendmode.<br>
+<br>
+ To test the results of deep color rendering, we ran a psdcmyk vs<br>
+ psdcmyk16 comparison. This showed differences on page 17 of the<br>
+ Altona_technical_v20_x4.pdf file in one patch. Simplifying the<br>
+ file showed that the saturation blend mode was showing a<br>
+ significant difference in one tile.<br>
+<br>
+ Saturation blend mode is defined to not make any changes if we<br>
+ are writing over a pure grey color (as there is no 'hue' for<br>
+ it to saturate). You'd expect that the blending function would be<br>
+ continuous (i.e. that a small peturbation of the background color<br>
+ should only produce a small peturbation in the output), but this<br>
+ is NOT the case around pure greys.<br>
+<br>
+ The example in the tested file, shows that psdcmyk is called with<br>
+ 7a, 7a, 7a, which therefore leaves the background unchanged. For<br>
+ psdcmyk16, it's called with 7a01 7a03 7a01, which therefore does<br>
+ NOT leave the background unchanged. Testing by changing the 8 bit<br>
+ inputs to 7b 7a 7b (a small peturbation), gives output of 99 64 99<br>
+ (a large change).<br>
+<br>
+ So, actually, the results given seem reasonable in that case.<br>
+<br>
+ HOWEVER, in investigating what now seems to be a red herring, I<br>
+ believe I've spotted a problem in the implementation. The scaling<br>
+ of the components subtracts y when it should be subtracting minb.<br>
+<br>
+ The only way I could actually work that out though, was to completely<br>
+ reimplement the code, and optimise it. I believe the new code is<br>
+ slightly clearer (in that it follows the spec more explicitly) and<br>
+ possibly slightly more performant, so I am committing that rather<br>
+ than attempting to patch the existing code.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 11:04:32 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=549a133dfcbdf2b3b028134d287d334f8fd623fd">549a133dfcbdf2b3b028134d287d334f8fd623fd</a>
+<blockquote>
+<p>
+ Fix 64bit non-console windows build.<br>
+<br>
+ The creation of the text window was truncating the pointer to<br>
+ long (32bit) size. No idea how we've been getting away with this<br>
+ in the past. I can only assume this has been exposed by<br>
+ differences in the runtime lib with vs2019 as compared to<br>
+ earlier versions.<br>
+<br>
+psi/dwtext.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-28 10:34:12 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1a4e859544336c9034c49bd9f735529401422961">1a4e859544336c9034c49bd9f735529401422961</a>
+<blockquote>
+<p>
+ Remove trailing white space from a prior commit<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 17:16:26 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fa1bc6dce44b6fc69e9852553aec4b7a419d0d9c">fa1bc6dce44b6fc69e9852553aec4b7a419d0d9c</a>
+<blockquote>
+<p>
+ Bug 702155 Alternate tint transform and shadings<br>
+<br>
+ Add option to match AR shadings for corner case, which<br>
+ is not as detailed in the PDF specification.<br>
+<br>
+ If the source space is DeviceN or Separation and the<br>
+ colorants are not supported (i.e. if we are using the alternate tint<br>
+ transform) the interpolation should occur in the source space to<br>
+ accommodate non-linear tint transform functions.<br>
+ e.g. We had a case where the transform function<br>
+ was an increasing staircase. Including that function in the<br>
+ gradient smoothness calculation gave us severe quantization. AR on<br>
+ the other hand is doing the interpolation in device color space<br>
+ and has a smooth result for that case. So AR is not following the spec. The<br>
+ bit below solves the issues for Type 4 and Type 5 shadings as<br>
+ this will avoid interpolations in source space. Type 6 and Type 7 will still<br>
+ have interpolations in the source space even if pfs-&gt;cs_always_linear == true.<br>
+ So the approach below does not solve those issues. To do that<br>
+ without changing the shading code, we could make a linear<br>
+ approximation to the alternate tint transform, which would<br>
+ ensure smoothness like what AR provides.<br>
+<br>
+base/gxshade.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-27 07:46:32 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=55222ef42e6574967810f8591ea308dbfc81b0a4">55222ef42e6574967810f8591ea308dbfc81b0a4</a>
+<blockquote>
+<p>
+ Fix differences seen between page mode and clist mode exposed by commit b3a73575<br>
+<br>
+ The code in gxipixel.c skips gridfitting if fill_adjust is 0, but the clist<br>
+ writer logic wasn't updating the fill_adjust, so the reader could have the<br>
+ wrong value. Seen with fts_25_2505 and fts_25_2506 which have an image with<br>
+ SMask and also have large text (non-cached, so painted with fill) preceding<br>
+ (drawn under) the image. Text is drawn with fill_adjust 0.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 09:10:20 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8539dd741abec3d5b8e4417e512ae0847224f7a0">8539dd741abec3d5b8e4417e512ae0847224f7a0</a>
+<blockquote>
+<p>
+ Fixes needed for pdfi after fill/stroke -- check for null pattern<br>
+<br>
+ Change to test for pgs-&gt;colours.pattern.p_tile to be NULL before<br>
+ attempting to dereference it.<br>
+<br>
+ pdfi has a 'null' pattern frequently, which didn't seem to matter before the<br>
+ fill/stroke changes, but does matter now.<br>
+<br>
+ I think the gs/pdf implementation sets up a specific &quot;null&quot; pattern<br>
+ that gets around this issue, but currently pdfi does not do this.<br>
+ Maybe it should?<br>
+<br>
+base/gspaint.c<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 15:22:04 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b6bd379a249b81213db5fdecf29ed11f2ce00e9e">b6bd379a249b81213db5fdecf29ed11f2ce00e9e</a>
+<blockquote>
+<p>
+ Fix signed issue in 16bit alpha blending fill_rectangle routines.<br>
+<br>
+ As seen by the central spot in the pink region of page 1 of:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -o out%d.psd -dMaxBitmap=2000M<br>
+ tests_private/pdf/pdf_1.7_ATS_EXXPA1DC_PDFACT.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 15:09:35 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b942845ee596dbcf37cf2af2381f0b298b962317">b942845ee596dbcf37cf2af2381f0b298b962317</a>
+<blockquote>
+<p>
+ pdfwrite - Fix indeterminism with QL shading tests<br>
+<br>
+ When creating a new colour space to put in a PDF file we perform various<br>
+ tests to see if its a space we have already written, to prevent writing<br>
+ duplicate spaces (we perform similar tests for most resources).<br>
+<br>
+ In some cases, when we write the resource to a file, we create an MD5<br>
+ hash and compare those to see if the resources are the same. In the<br>
+ case of colour spaces, however, they are retained in memory and so we<br>
+ use a different method. We 'serialise' the colour space. This is not the<br>
+ same as writing it to the PDF file, and its a graphics library thing not<br>
+ a pdfwrite function. Basically this writes out the content of the<br>
+ various C structures. The stream we use is an in-memory stream.<br>
+<br>
+ Unfortunately, for Separation colour spaces, there was a fault in the<br>
+ function which writes the colour space name, and it was writing out<br>
+ the bytes forming the address of the name instead of the actual string.<br>
+<br>
+ This could, very rarely, mean that we would mis-identify a new colour<br>
+ space as being the same as an old colour space, and so would reuse the<br>
+ old space instead of creating a new one.<br>
+<br>
+ I've checked the DeviceN code and it does not suffer the same problem.<br>
+<br>
+base/gscsepr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 13:03:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=988cfb770d12441dfef9002f799757e5cd869e48">988cfb770d12441dfef9002f799757e5cd869e48</a>
+<blockquote>
+<p>
+ Fix the overflow case in 16 bit saturation blending.<br>
+<br>
+ As seen with the second apple of the bottom row of page 1<br>
+ of:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -r72 -o out%d.psd -dMaxBitmap=2000M<br>
+ ../tests_private/pdf/PDF_1.7_ATS/AIX4G1C3.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 17:10:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=293e2b7f6298a6049254d18250d4f82f78ac2978">293e2b7f6298a6049254d18250d4f82f78ac2978</a>
+<blockquote>
+<p>
+ Fix for bug 702150: make pl_main_run_file_utf8() check for error from s_process_read_buf().<br>
+<br>
+ Avoids infinite loop in:<br>
+ ./membin/gpcl6 -sDEVICE=ppmraw -o /dev/null .<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 18:24:55 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=342229c7533310f9a46fbfd7a7dd2eaa976746f0">342229c7533310f9a46fbfd7a7dd2eaa976746f0</a>
+<blockquote>
+<p>
+ minor improvements to toolbin/squeeze2text.py.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 08:25:13 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dd0961426d3e1718c17fa226f3c2c06f7eb296ce">dd0961426d3e1718c17fa226f3c2c06f7eb296ce</a>
+<blockquote>
+<p>
+ CID 354310: Remove pointless unsigned comparison with 0.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 08:11:49 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fae43bf37f78a2eef5a4418f428c41bdfd8a2738">fae43bf37f78a2eef5a4418f428c41bdfd8a2738</a>
+<blockquote>
+<p>
+ CID 354291: Add error handling for inability to allocate<br>
+<br>
+ Coverity complained about setting dash.pattern = NULL and &quot;Passing &quot;&amp;dash&quot;<br>
+ to &quot;gstate_copy_dash&quot;, which dereferences null &quot;dash.pattern&quot; which is either<br>
+ wrong, or *very* misleading. We assume that it means that gx_set_dash() *may*<br>
+ access that pointer.<br>
+<br>
+ In truth, this can never happen in these circumstances.<br>
+<br>
+ Nevertheless, in gx_set_dash() is we have a NULL mem (allocator) pointer and the<br>
+ dash pattern pointer is NULL at the point we have to copy into it, then throw<br>
+ an error.<br>
+<br>
+base/gsline.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 19:59:03 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b3a7357594634fbd89a4cbf782d094289628acd6">b3a7357594634fbd89a4cbf782d094289628acd6</a>
+<blockquote>
+<p>
+ Fix bug 702139 - clist clipping bug.<br>
+<br>
+ When characters are filled as paths, the fill_adjust may be set to 0.<br>
+ Clip paths are supposed to match fill paths, i.e. the 'any part of pixel'<br>
+ rule, so we need fill_adjust of 0.5 (not 0). The most foolproof way to fix<br>
+ this is to set it in the reader when processing 'begin_clip' and restore<br>
+ it when handling the end_clip.<br>
+<br>
+ There are many progressions with this change, but it also exposes some<br>
+ cases where the change in clipping allows other elements to be seen that<br>
+ were previously hidden. Those few instances are minor and mostly seem to<br>
+ occur when page mode differs from clist mode. Examination of some of those<br>
+ cases shows that the clip path with clist mode now matches page mode and<br>
+ other elements (e.g. images) differ in extent between page and clist mode.<br>
+<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 19:39:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ea7aa02cc5c540c3332e0d4e81209a920360d45e">ea7aa02cc5c540c3332e0d4e81209a920360d45e</a>
+<blockquote>
+<p>
+ Fix gx_default_copy_alpha_hl_color for 16 bit operation.<br>
+<br>
+ The code to write the composite data back to buffers to be sent<br>
+ to copy_alpha was getting the first byte of each 16 bit pair<br>
+ wrong in the 16bit data case.<br>
+<br>
+ Also, when we 'restart' after skipping a zero byte in the 16bit<br>
+ case we need to skip 2 bytes per pixel, not one.<br>
+<br>
+ This can be seen when running:<br>
+<br>
+ gs -r72 -o out%d.psd -sDEVICE=psdcmyk16 -dMaxBitmap=2000M<br>
+ ../tests_private/comparefiles/js.pdf<br>
+<br>
+base/gdevdbit.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 18:19:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d720180603fcd3853436fb002c6ff9c7fc956b27">d720180603fcd3853436fb002c6ff9c7fc956b27</a>
+<blockquote>
+<p>
+ Fix psdcmyk16 blending issue.<br>
+<br>
+ Use uint32_t rather than int to avoid signedness issues.<br>
+<br>
+ Seen in the psdcmyk16 page mode rendering of<br>
+<br>
+ tests_private/comparefiles/Bug692766.pdf<br>
+<br>
+ (bad colors in 4th rgb circle intersection test).<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 15:57:36 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8f038b63bc2fab4a71191583d36b1894ae3576f5">8f038b63bc2fab4a71191583d36b1894ae3576f5</a>
+<blockquote>
+<p>
+ Fix coverity issues 354292 and 354293.<br>
+<br>
+ Don't bother testing an unsigned value for clipping against 0.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 08:58:32 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ed426e9202e04e7d90194d92daedf9a12610b9f9">ed426e9202e04e7d90194d92daedf9a12610b9f9</a>
+<blockquote>
+<p>
+ Replace 0 with NULL for pointer validation/setting.<br>
+<br>
+ Also make validation an explicit comparison with NULL i.e.:<br>
+ &quot;if (mem != NULL)&quot; rather than &quot;if (mem)&quot;.<br>
+<br>
+base/gsline.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 17:30:54 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b6fc7f2b05fa3cb7b120b05dbfa68a90da731a30">b6fc7f2b05fa3cb7b120b05dbfa68a90da731a30</a>
+<blockquote>
+<p>
+ Add support for multiple squeezes in one run.<br>
+<br>
+ E.g. MEMENTO_SQUEEZES=115867-1..+3,119928-1..+3 ...<br>
+<br>
+ This is equivalent running multiple times with MEMENTO_FAILAT set to 115866,<br>
+ 115867, 11588, 119927, 119928, 119929.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 10:38:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cc6f92959507212b83130a24dd40b330e8ca9634">cc6f92959507212b83130a24dd40b330e8ca9634</a>
+<blockquote>
+<p>
+ Fix for MEMENTO_FAILAT=119928: only call gs_grestoreall_for_restore() if vmsave-&gt;gsave not NULL.<br>
+<br>
+ Also fix error cleanup in gs_gsave_for_save(), otherwise this fix breaks<br>
+ previous fix for MEMENTO_FAILAT=115802.<br>
+<br>
+ [Thanks to chrisl for this and various other recent fixes.]<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=119928 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsstate.c<br>
+psi/isave.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 11:21:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c2a030517d269b020c99bcf754cefccb556ad7bd">c2a030517d269b020c99bcf754cefccb556ad7bd</a>
+<blockquote>
+<p>
+ toolbin/squeeze2text.py: improve log output.<br>
+<br>
+ With -p, if there is gap in 'Memory squeezing @ &lt;N&gt;' output (because of calls<br>
+ to free()), output next &lt;N&gt;.<br>
+<br>
+ Also flush log output to avoid looking like we've hung.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 21:00:21 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bab28178da29dabd691f7dee11ab5de62e329aa7">bab28178da29dabd691f7dee11ab5de62e329aa7</a>
+<blockquote>
+<p>
+ Fix issue with fts_14_1416.pdf and psdcmyk16<br>
+<br>
+ This was missed in the fix. Affected only 16 bit devices.<br>
+<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=b1ac0686eea6adcf2db8cabf7858796494b4459d<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 20:05:49 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a2d4a7715f465911f174a8e764ab40b40455dd68">a2d4a7715f465911f174a8e764ab40b40455dd68</a>
+<blockquote>
+<p>
+ Fix Ink names leaking.<br>
+<br>
+ The cause of the leak was a typo in gx_final_DeviceN.<br>
+<br>
+ Once this is fixed, we hit a problem where ink names are set<br>
+ to be a pointer to a static empty string, which can't be<br>
+ freed. Change to using NULL to mean empty ink name.<br>
+<br>
+base/gscdevn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:01:43 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6d678da952f7f4a19fb8b9e12f8cb8013d31f04d">6d678da952f7f4a19fb8b9e12f8cb8013d31f04d</a>
+<blockquote>
+<p>
+ Memento/Valgrind tweak.<br>
+<br>
+ Ensure we mark the contents of a block readable before we<br>
+ look for pointers in it, and don't overrun the end.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:57:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=44f00686cbaea612747c336dc201ae3f682cc81b">44f00686cbaea612747c336dc201ae3f682cc81b</a>
+<blockquote>
+<p>
+ Squash some unused variable warnings.<br>
+<br>
+base/claptrap-planar.c<br>
+base/gp_unifs.c<br>
+base/gxclpath.c<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:14:23 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=26c2173179946ec8f70445f5941a4a20e707af88">26c2173179946ec8f70445f5941a4a20e707af88</a>
+<blockquote>
+<p>
+ pdf14_{fill_stroke_path,clist_fill_stroke_path_pattern_setup} cleanups.<br>
+<br>
+ Use a nicer method of breaking const (to avoid warnings). Ensure<br>
+ that we always put everything back as it was when we leave the<br>
+ functions, even if we have an error.<br>
+<br>
+ Remove needless cleanup code to handle functions that can never<br>
+ return an error to us returning an error.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:35:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a8839dbb536440bce927c4cb4977643495eee26a">a8839dbb536440bce927c4cb4977643495eee26a</a>
+<blockquote>
+<p>
+ pdf14_clist_fill_stroke_path_pattern_setup overprint fix.<br>
+<br>
+ Only enable CompatibleOverprint for the stroke part of stroke/fill<br>
+ patterns if we are in a subtractive space.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 11:24:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3e84f1e1b0c52bd55145e35f8ddc0d5b8d1b65c5">3e84f1e1b0c52bd55145e35f8ddc0d5b8d1b65c5</a>
+<blockquote>
+<p>
+ Squash some warnings with gs_swapcolors_quick breaking const.<br>
+<br>
+ At various places in the code, we call gs_swapcolors_quick where<br>
+ we only have a const pgs.<br>
+<br>
+ Properly, we should copy the pgs to a non-const pgs, and then use<br>
+ that, but that would be a performance hit.<br>
+<br>
+ In all cases, we change the graphics state, then restore it before<br>
+ exit, so effectively it is const over the entire call of the<br>
+ enclosing procedure.<br>
+<br>
+ Rather than having lots of small hacky casts removing const, we<br>
+ push the const breakage into gs_swapcolors_quick itself where we<br>
+ do it in the &quot;approved&quot; way using a union.<br>
+<br>
+base/gdevp14.c<br>
+base/gsstate.c<br>
+base/gxfill.c<br>
+base/gxgstate.h<br>
+devices/vector/gdevpdfd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 10:10:25 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b61365607b75d456943f95360bff101c288ba555">b61365607b75d456943f95360bff101c288ba555</a>
+<blockquote>
+<p>
+ Avoid floating point in gxblend.c<br>
+<br>
+ Use fixed point in preference.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 08:23:59 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f8cd087b8a7b8c9b5cf5b8fd4d29e237f6103c7b">f8cd087b8a7b8c9b5cf5b8fd4d29e237f6103c7b</a>
+<blockquote>
+<p>
+ Implement OPM tracking in pdfwrite<br>
+<br>
+ More than somewhat to my surprise, the release testing of 9.51 revealed<br>
+ that pdfwrite was not tracking the state of overprint mode (OPM). It<br>
+ could be set by setdistillerparams, and in no other way.<br>
+<br>
+ This commit adds tracking the OPM in the graphics state, removes the<br>
+ old overprint_mode variable from the device, but preserves the ability<br>
+ to alter the OPM using setdistillerparms.<br>
+<br>
+ This also alters the initial state of OPM, the distiller params<br>
+ reference states that the 'factory default' of OPM is 1, but the PDF<br>
+ Reference says that the initial state of OPM is 0. We need to start<br>
+ with the correct setting of OPM so we change it form 1 to 0<br>
+ in gs_pdfwr.ps.<br>
+<br>
+ In passing, cast a const gs_gstate * to a gs_gstate * when used by<br>
+ gs_swapcolours_quick, in order to avoid a compiler warning.<br>
+<br>
+ This causes a small number of progressions in files using OPM (which is<br>
+ rare, its even rarer to actually alter it during the course of the file)<br>
+<br>
+Resource/Init/gs_pdfwr.ps<br>
+devices/vector/gdevpdfb.h<br>
+devices/vector/gdevpdfd.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 16:24:12 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b1ac0686eea6adcf2db8cabf7858796494b4459d">b1ac0686eea6adcf2db8cabf7858796494b4459d</a>
+<blockquote>
+<p>
+ Bug 702117 Knockout groups containing non-isolated groups<br>
+<br>
+ So this ended up being rather complicated. The first issue was that<br>
+ we were not setting the backdrop properly for non-isolated groups that<br>
+ reside in knockout groups. When that was fixed, it was revealed that we<br>
+ were not doing the recompositing operation for non-isolated knockout groups. This meant<br>
+ that the backdrop was getting applied twice effectively (once in the original<br>
+ fill and then again when the group was popped). The only file that showed<br>
+ this issue was the crazy Altona page with the many overlapping groups. Customer<br>
+ file added to provide a clearer case in the regression tests.<br>
+<br>
+base/gdevp14.c<br>
+base/gxblend.c<br>
+base/gxblend1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 17:09:41 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4ac299b11d53cf1d174a8351290918b536aa5859">4ac299b11d53cf1d174a8351290918b536aa5859</a>
+<blockquote>
+<p>
+ Fix MEMENTO_FAILAT=115867 - segv in i_unregister_root() after failure in i_register_root().<br>
+<br>
+ In pl_main_delete_instance(), don't call gs_unregister_root() if<br>
+ minst-&gt;device_root is NULL.<br>
+<br>
+ Also in pl_top_create_device(), check return from<br>
+ gs_register_struct_root(). But this doesn't appear to make any difference to<br>
+ the handling of the memento error.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=115867 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 16:51:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9022073cb754ace5923c08e81d3b8d0be352abd9">9022073cb754ace5923c08e81d3b8d0be352abd9</a>
+<blockquote>
+<p>
+ Fix deep color group compose issue.<br>
+<br>
+ In commit bb7d57e84e9fe I reordered parameters to keep 8/16<br>
+ branches consistent, and missed one case.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:27:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7c8c6c4ba0df88b5cbc4c0e8dab5f643a133603e">7c8c6c4ba0df88b5cbc4c0e8dab5f643a133603e</a>
+<blockquote>
+<p>
+ Remove needless &quot;isolated&quot; parameter from pdf14_mark_rect routines.<br>
+<br>
+ The value was carefully plumbed through (only in the 8bit case) in<br>
+ a recent commit, but was never actually used. Remove it a) because<br>
+ it's pointless passing a variable we don't use, and b) because it's<br>
+ another difference between 8 and 16 bit versions.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:21:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c3c922510f0498d68d7a369f0ffd70379e3d5359">c3c922510f0498d68d7a369f0ffd70379e3d5359</a>
+<blockquote>
+<p>
+ Fix typing mistake in 16bit transparency.<br>
+<br>
+ When promoting from 8 to 16 bit, shape and src_alpha become<br>
+ uint16_ts rather than bytes.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:06:38 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=713c776695f7a18cfd326e84fdef0b2911770609">713c776695f7a18cfd326e84fdef0b2911770609</a>
+<blockquote>
+<p>
+ Fix more overprint problems with deep color transparency.<br>
+<br>
+ Again, overprint changes to the 8 bit paths had not been<br>
+ pulled across to the 16 bit path.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 07:10:40 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=075abaaa9ffa03af26bed1a32d3e5114511ee786">075abaaa9ffa03af26bed1a32d3e5114511ee786</a>
+<blockquote>
+<p>
+ Added toolbin/squeeze2text.py, for processing output from MEMENTO_SQUEEZEAT=...<br>
+<br>
+ An alternative to squeeze2html.pl, outputing just summary information.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 11:18:11 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=fbcf5865f688201fba239c5dde0078e6733538c4">fbcf5865f688201fba239c5dde0078e6733538c4</a>
+<blockquote>
+<p>
+ Fix for MEMENTO_FAILAT=115802: make gs_gsave_for_save() call gs_gsave() so it can restore after error.<br>
+<br>
+ Previously, zsave() called gs_gsave_for_save() then gs_gsave(), but if<br>
+ gs_gsave() failed we ended up with SEGV in finalise code.<br>
+<br>
+ To allow zsave() to restore things after gs_gsave() failure, we would need to<br>
+ add an include of base/gxgstate.h.<br>
+<br>
+ Instead we remove the call of gs_gsave() from zsave() and append it to<br>
+ gs_gsave_for_save(), where things can be easily restored if it fails.<br>
+<br>
+ [There are no other callers of gs_gsave_for_save().]<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=115802 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsstate.c<br>
+psi/zvmem.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 09:44:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=356e24a53c60710ecfee991bb91cd503e3d9873b">356e24a53c60710ecfee991bb91cd503e3d9873b</a>
+<blockquote>
+<p>
+ Avoid leaks if we get alloc failure when closing down (found by memento).<br>
+<br>
+ In gs_main_finit(), ignore gs_error_VMerror from interp_reclaim(). Such error<br>
+ ultimately comes from gs_vmreclaim() calling context_state_load(), but the<br>
+ missing info doesn't seem to be required for gs_main_finit() to carry on.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=147801 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+psi/imain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 17:40:51 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e1257c1f03a4b16794d0c2df035b7ed8685a4254">e1257c1f03a4b16794d0c2df035b7ed8685a4254</a>
+<blockquote>
+<p>
+ Fix image_color_icc_prep to properly align planar buffers.<br>
+<br>
+base/gxicolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 10:50:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5ee682a20c494e8f1c65a7a95470252df6d9cdf4">5ee682a20c494e8f1c65a7a95470252df6d9cdf4</a>
+<blockquote>
+<p>
+ Enable CAL for gxicolor halftoning.<br>
+<br>
+ Looks like the calling code was unfinished, and the build<br>
+ changes were not done.<br>
+<br>
+ Also, squash some warnings.<br>
+<br>
+base/gxicolor.c<br>
+base/gximono.c<br>
+base/lib.mak<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 15:57:47 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d26e2d1c628d88263c4d946bdaf2145a438a1416">d26e2d1c628d88263c4d946bdaf2145a438a1416</a>
+<blockquote>
+<p>
+ Ensure the memory entry in a cloned gstate is correct.<br>
+<br>
+ In theory, we could end up cloning a graphics state with one allocator, then<br>
+ assigning the &quot;memory&quot; entry in the cloned state to that of the state we are<br>
+ cloning.<br>
+<br>
+ In practice the two have (so far) been the same, but that is not guaranteed.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 11:08:57 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1faa24d998afa6ce98279f26514fe14edbd62e8e">1faa24d998afa6ce98279f26514fe14edbd62e8e</a>
+<blockquote>
+<p>
+ Fix segfault cleaning up after gstate clone failure.<br>
+<br>
+ For me this happens with MEMENTO_FAILAT=112447 and for Julian it happens with<br>
+ MEMENTO_FAILAT=115905.<br>
+<br>
+ Basically, the order of events was that we'd allocate a new gstate, copy the<br>
+ contents of the existing gstate to the new one, then copy the dash pattern<br>
+ (which could fail) and copy the &quot;client_data&quot; (which could and, in this case,<br>
+ did fail). When either of those failed, we'd jump to the error handling and<br>
+ exit with the error.<br>
+<br>
+ The problem is that, by jumping to the &quot;fail&quot; label, we skip over all the code<br>
+ that fixes up the reference counts (and various other things) to account for<br>
+ the newly created gstate.<br>
+<br>
+ This commit reorders things so we allocate the gstate, copy the client data,<br>
+ copy the dash pattern, *then* assign the contents of the old gstate to the new<br>
+ one, and carry on. Thus, by the time the gstate contents are copied, the<br>
+ function cannot fail, and everything is sure to be correctly setup.<br>
+<br>
+ In the event that either the dash pattern or the client data fail to allocate,<br>
+ the new gstate is still filled with NULLs, except for the subset of<br>
+ &quot;gs_gstate_parts&quot; which are allocated and setup correctly so we can safely<br>
+ free the graphics state object before returning the error.<br>
+<br>
+ Also, use NULL for pointer validation instead of 0.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 17:43:18 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f51ae6f4bf85dfa5be4b48a1a46ac69c653500c3">f51ae6f4bf85dfa5be4b48a1a46ac69c653500c3</a>
+<blockquote>
+<p>
+ Make sure pattern fills use proper alpha settings<br>
+<br>
+ Fix for regression of fts_28_2804.pdf pdfwrite output rendering<br>
+ with fill-stroke commit. This also fixes the rendering of fts_25_2526.pdf<br>
+ Bug 702033. Required a minor change in the XPS interpreter to make<br>
+ sure that patterns did not have their opacity double applied.<br>
+<br>
+base/gdevp14.c<br>
+xps/xpstile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 17:20:09 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=59806f121beba543de6d78a1b5765919bce9b2cb">59806f121beba543de6d78a1b5765919bce9b2cb</a>
+<blockquote>
+<p>
+ Bug 702105: Premature EOF Infinite loop in interpolated imagemask stream.<br>
+<br>
+ Fix supplied by Peter Cherepanov. Many thanks.<br>
+<br>
+base/simscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 16:58:06 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f860dbd9e699fcef50018fbd7cf84565237d78a3">f860dbd9e699fcef50018fbd7cf84565237d78a3</a>
+<blockquote>
+<p>
+ Fix &quot;blue gradients&quot; seen with psdrgb device.<br>
+<br>
+ Since the fill/stroke commit went in, some files have been showing<br>
+ gradients in the wrong colours. For instance this one, spotted in<br>
+ release testing:<br>
+<br>
+ gs -sDEVICE=psdrgb -r72 -dMaxBitmap=2000M -o out%d.psd<br>
+ ../tests_private/comparefiles/Layout.pdf<br>
+<br>
+ Bisecting the fill/stroke branch back, it seems the commit that<br>
+ caused it is the one that stops psdrgb using 'devn' colors.<br>
+<br>
+ This causes gradients to drop to using the color_info.comp_bits and<br>
+ comp_shift information, which the psd devices don't fill in.<br>
+<br>
+ The fix here is to make psd_prn_open call the standard function for<br>
+ setting up these values.<br>
+<br>
+devices/gdevpsd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 14:48:05 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ddccae87e67a4ea101f289549e2d1692b0230509">ddccae87e67a4ea101f289549e2d1692b0230509</a>
+<blockquote>
+<p>
+ Bug701972 -- fix pdfwrite image downscaling bug<br>
+<br>
+ Calculate the bits on the row using the input image width,<br>
+ not the output image width.<br>
+<br>
+ I had to add an extra argument to a few functions to propagate the info<br>
+ down to where it is needed.<br>
+<br>
+ Note obscure case involving calling psdf_setup_image_to_mask_filter()<br>
+ for a Type 4 image and CompatibilityLevel &lt; 1.3. This change just<br>
+ adds the extra input_width arg, which doesn't change whatever it was<br>
+ doing before. If there is a bug lurking here, it seems unlikely<br>
+ anybody cares?<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+devices/vector/gdevpsdf.h<br>
+devices/vector/gdevpsdi.c<br>
+devices/vector/gdevpsds.c<br>
+devices/vector/gdevpsds.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 09:22:55 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4e2eaa8324ee4428de337ae3c31a695e68ede75b">4e2eaa8324ee4428de337ae3c31a695e68ede75b</a>
+<blockquote>
+<p>
+ Set the BitsPerComponent for alt stream in pdfwrite<br>
+<br>
+ Add this to the image[1] code where it was missing<br>
+<br>
+ This fixes bug where compressed images were correct, but if<br>
+ -dEncodeGrayImages=false was used, then they were truncated.<br>
+<br>
+ This is related to trimmed/rescaled image for Bug701972.<br>
+ See the sample trim-nobug.pdf attached to that bug.<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 19:25:24 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=76fb18bc255a88cab5fbb2410b411e580f53486d">76fb18bc255a88cab5fbb2410b411e580f53486d</a>
+<blockquote>
+<p>
+ Bug 702131: Fix overprint in additive spaces.<br>
+<br>
+ We should only enter CompatibleOverprint blend mode if we<br>
+ are in an subtractive space. This stops pdf14 trying to honour<br>
+ drawn_comps even in additive spaces.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 14:02:24 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f1b16fe2d0c6f23923fd26d03544030bc285365a">f1b16fe2d0c6f23923fd26d03544030bc285365a</a>
+<blockquote>
+<p>
+ Fix bug 702079: SEGV with clist and PCL caused by wrong color in images.<br>
+<br>
+ The clist_image_plane_data function was called with the dev_color for a band<br>
+ being type &lt;pattern&gt; when the image had type &lt;pure&gt;, but the code was not<br>
+ calling cmd_put_drawing_color to update the bands for the image because uses_color<br>
+ was false. Add rop3_uses_S(pgs0&gt;log_op) as well as (||) rop3_uses_T(pgs-&gt;log_op)<br>
+ when CombineWitColor is true.<br>
+ Note that extra calls to cmd_put_drawing_color before an image are low cost<br>
+ and do nothing if the current device color is already the same.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 09:48:07 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=646007af056447fefd61eabfcdae85bfd6017d24">646007af056447fefd61eabfcdae85bfd6017d24</a>
+<blockquote>
+<p>
+ Bug 702128 : clist pdf14 overprint state<br>
+<br>
+ This change ensures that gxdso_overprint_active<br>
+ gets the proper state information.<br>
+<br>
+ When the clist writer is active with the pdf14 device, the writer maintains<br>
+ the current overprint state (as the writer has no access to the pdf14 member variables)<br>
+ and must know what to put in the clist.<br>
+<br>
+ When the clist writer is not present (i.e. page mode), the pdf14 device<br>
+ maintains the information.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 11:46:45 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6ace930c11984e64aded98f1ff8db47104424354">6ace930c11984e64aded98f1ff8db47104424354</a>
+<blockquote>
+<p>
+ Bug 702068 continued: Fix smasked images with masks.<br>
+<br>
+ Release testing has shown up another case that needs help.<br>
+<br>
+ gs/bin -sDEVICE=ppmraw -o out.ppm -r300 -dMaxBitmap=1G<br>
+ tests_private/pdf/sumatra/1901_-_tiling_inconsistencies.pdf<br>
+<br>
+ This shows horizontal white lines in the &quot;Next&quot; &quot;Up&quot; &quot;Previous&quot;<br>
+ images at the top of the page.<br>
+<br>
+ Investigation shows this is due to the images having Masks as well<br>
+ as SMasks.<br>
+<br>
+ The Mask image is run to a 1 bit memory device, which means that<br>
+ the gxdso to check if we are in an SMask doesn't work. We work<br>
+ around this by introducing a new flag to gs_pixel_image_common<br>
+ that we can set to indicate that we are within an smask. We set<br>
+ this when we set the masked image up (using the gxdso), and check<br>
+ it when we come to do the gridfitting.<br>
+<br>
+base/gsiparam.h<br>
+base/gxclrast.c<br>
+base/gximage.c<br>
+base/gximage3.c<br>
+base/gxipixel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 19:31:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bb7d57e84e9fe615832b2d5811f4c9cd4d443cd1">bb7d57e84e9fe615832b2d5811f4c9cd4d443cd1</a>
+<blockquote>
+<p>
+ Sync deep colour blending with recent changes to 8 bit blending.<br>
+<br>
+ Release testing reveals problems with deep color blending and<br>
+ overprint. This is because changes were made to the 8bit<br>
+ branches of gxblend.c that weren't fully reflected in the<br>
+ 16bit branches.<br>
+<br>
+ Reapply those changes here.<br>
+<br>
+ While we're at it, address some other minor code cleanups,<br>
+ including keeping the ordering of parameters the same between 8<br>
+ and 16 bit to avoid confusion in future.<br>
+<br>
+ The command that showed the inital problem was:<br>
+<br>
+ bin/gswin32c.exe -o out.psd -sDEVICE=psdcmyk16 tests_private/comparefiles/Bug695916.pdf<br>
+<br>
+ where the image of the Earth did not appear.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 13:27:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e51ba18f031c4b5f6a14c0a559391fe30f409dd1">e51ba18f031c4b5f6a14c0a559391fe30f409dd1</a>
+<blockquote>
+<p>
+ Bug 702130: Fix JPEG memory failure problems.<br>
+<br>
+ The SEGV reported by Memento squeezing (which oddly is at 113600<br>
+ for me, rather than Julian's higher number) is caused by jpeglib<br>
+ calling 'mem_term' on something that failed to 'mem_init'.<br>
+<br>
+ The fix is to use gs_memory_chunk_unwrap rather than target/release,<br>
+ and to check whether mem == cmem to see whether that actually did<br>
+ unwrap.<br>
+<br>
+ This runs us into a further problem, where we are freeing the<br>
+ custom memory descriptor using a gc memory pointer, where it was<br>
+ allocated using a non gc one.<br>
+<br>
+ Rather than just changing the free to use the non gc one, we take<br>
+ the opportunity to ensure that ALL the blocks are in non gc memory.<br>
+ JPEGlib will take poorly to its memory being gc'd away, and none<br>
+ of it needs to subject to gc.<br>
+<br>
+ Credit goes largely to Chris for this fix.<br>
+<br>
+base/sjpegc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 18:44:53 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=55a7a41998f35ae23aedf2fdb83698dde1453d58">55a7a41998f35ae23aedf2fdb83698dde1453d58</a>
+<blockquote>
+<p>
+ Bug 702124 (continued): Avoid FP errors leading to empty pattern cells.<br>
+<br>
+ The limited accuracy of floats can cause pattern cells to appear to<br>
+ be empty when they are not.<br>
+<br>
+ Avoid adding the (often large) tx and ty components in until after we<br>
+ have calculated the width/heights.<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 18:43:00 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=182d5c10ed11570dd08e6203d832e06a73853f17">182d5c10ed11570dd08e6203d832e06a73853f17</a>
+<blockquote>
+<p>
+ Bug 702124: Avoid VMerror when a pattern cell height is 0.<br>
+<br>
+ We detect buffer_height == 0 and take it to mean that we can't<br>
+ get a large enough buffer for even a single scanline. Actually<br>
+ it can mean that the pattern cell was empty, which gives a<br>
+ spurious error.<br>
+<br>
+base/gxmclip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 17:08:12 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f5b7acb59c4f2e88591aab9f355813e0b7b68db5">f5b7acb59c4f2e88591aab9f355813e0b7b68db5</a>
+<blockquote>
+<p>
+ Fix segv after memento squeeze in psdf_DCT_filter().<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=117152 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+devices/vector/gdevpsdu.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 14:54:42 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9fd069e5c91126e78b51625c72d884615370098c">9fd069e5c91126e78b51625c72d884615370098c</a>
+<blockquote>
+<p>
+ Fixed double free after alloc failure in gs_lib_ctx_set_icc_directory*() (found by memento).<br>
+<br>
+ After we've freed p_ctx-&gt;profiledir we need to set it to NULL otherwise if we<br>
+ return an error it will be freed a second time when we close down.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=101810 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 11:12:37 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d86e9d8251e142ab9aae9f50923414c0c18bf1d3">d86e9d8251e142ab9aae9f50923414c0c18bf1d3</a>
+<blockquote>
+<p>
+ Fixed leak on error in gs_fapi_ufst_init() (found by memento).<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=22 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/fapiufst.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 19:48:01 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d7d68f45bfc227f7c7a6fdd5f8ef078bbf7ca77f">d7d68f45bfc227f7c7a6fdd5f8ef078bbf7ca77f</a>
+<blockquote>
+<p>
+ Bug 702121: PCL performance degradation<br>
+<br>
+ Henry chased the cause down to commit b399f84, an attempt to<br>
+ fix Bug 700624. Looking at that code now, it has a silly typo<br>
+ in it, that was causing it not be triggered in cases when it<br>
+ should have been. Fixed here.<br>
+<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 11:11:40 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b58e9010ce17bce450e4c042b93bafc460b9d94a">b58e9010ce17bce450e4c042b93bafc460b9d94a</a>
+<blockquote>
+<p>
+ Alternative fix for leaks after error in gs_main_init_with_args01()<br>
+<br>
+ When memory squeezing gpdl, Julian found leaks in the gpdl<br>
+ startup of the postscript interpreter when allocations failed<br>
+ in gs_main_init_with_args01().<br>
+<br>
+ Here, we fix the problem by making the psitop.c layer within gpdl<br>
+ call the appropriate shutdown code when we catch the error. This<br>
+ moves gpdl to being consistent with other users of the gs_main<br>
+ layer.<br>
+<br>
+ Memento memory squeezing around the point of failure (event 2035)<br>
+ now shows this to be OK.<br>
+<br>
+ MEMENTO_SQUEEZEAT=2034 ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+gpdl/psitop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 18:47:37 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5fc8e7c0b656d4e2be8f5e316121f06039c35273">5fc8e7c0b656d4e2be8f5e316121f06039c35273</a>
+<blockquote>
+<p>
+ Revert &quot;Fix leaks after error in gs_main_init_with_args01() (found by memento).&quot;<br>
+<br>
+ This reverts commit f35924926cb35f08be5a12ded4a00eb2f42aed3e.<br>
+<br>
+ When memory squeezing gpdl, Julian found leaks in the gpdl<br>
+ startup of the postscript interpreter when allocations failed<br>
+ in gs_main_init_with_args01().<br>
+<br>
+ The initial fix attempted was to make gs_main_init_with_args01()<br>
+ closedown the interpreter on such errors. This worked for the<br>
+ tested cases, but hid problems with non-memory related errors<br>
+ (such as not being able to open a file specified on the command<br>
+ line) when called by gs (rather than gpdl).<br>
+<br>
+ The change attempted resulted in gs_main_finit() being called<br>
+ twice as gs (and other users of the gs_main APIs) expect to have<br>
+ to call gs_main_finit() to shut down after gs_main_init_with_args01()<br>
+ returns an error code.<br>
+<br>
+ The real problem is that gpdl is not doing this in the same way as<br>
+ other callers.<br>
+<br>
+ The gs_main layer has existed for donkeys years, so it's probably<br>
+ best that we just take it as fixed and don't require callers to<br>
+ start changing stuff now.<br>
+<br>
+ Accordingly, I am reverting the attempted fix here, and will<br>
+ try a different fix for it that only affects gpdl shortly.<br>
+<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 16:48:21 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cd5f21df6c710664ff0ba3f100ca5283d9367ed8">cd5f21df6c710664ff0ba3f100ca5283d9367ed8</a>
+<blockquote>
+<p>
+ Bug 702116 Avoid NULL dereference<br>
+<br>
+ In certain cases if the source color space is separation or deviceN<br>
+ and we are doing image interpolation with the use of fast color option<br>
+ there was a potential dereference of a NULL pointer since the color<br>
+ space will not have an ICC profile.<br>
+<br>
+base/gxiscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-11 16:48:24 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1f6b351a5048b5a14d52431c833da6ed3386a7bf">1f6b351a5048b5a14d52431c833da6ed3386a7bf</a>
+<blockquote>
+<p>
+ Change to improve memory and speed (Bug 702099)<br>
+<br>
+ As described in the bug, the patch to disable high-level images in<br>
+ pattern-clists when Interpolate is true is no longer needed (hasn't<br>
+ been since 2015), and it causes the memory and performance problems<br>
+ with this type of file.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 15:10:54 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c5883877d1dc7abbd7600eb688f7cf4ad34db0cc">c5883877d1dc7abbd7600eb688f7cf4ad34db0cc</a>
+<blockquote>
+<p>
+ Bug 702114 non-isolated group in knockout group<br>
+<br>
+ Make sure to use the parents backdrop as our backdrop when we<br>
+ push a non-isolated group that resides in a knockout group.<br>
+ Note though that this apparently is not the case if we are<br>
+ constructing a soft mask.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 10:54:47 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=06a08fca00194531df25652b46eca8f8e4dfd7cc">06a08fca00194531df25652b46eca8f8e4dfd7cc</a>
+<blockquote>
+<p>
+ Bug 702113 Softmask with transfer function<br>
+<br>
+ In a couple spots we look at the value of the background value<br>
+ of the softmask to decide if we really need the softmask in<br>
+ areas outside the group bounding box. These checks were not<br>
+ considering the impact of the transfer function.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 10:22:32 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6fc5cbc5bc57ae2c47d1276f1ea0c0f16017b4bb">6fc5cbc5bc57ae2c47d1276f1ea0c0f16017b4bb</a>
+<blockquote>
+<p>
+ Bump version number pending 9.51 release<br>
+<br>
+Resource/Init/gs_init.ps<br>
+base/gscdefs.h<br>
+base/version.mak<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-19 08:14:27 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e49830f8efdbc3a9f4e8acaf708b68a742f515aa">e49830f8efdbc3a9f4e8acaf708b68a742f515aa</a>
+<blockquote>
+<p>
+ Version, dates etc for 9.52 release<br>
+<br>
+Resource/Init/gs_init.ps<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/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>2020-03-17 15:54:28 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0cade062486c0ae9c883970dea1c555a8ffcff84">0cade062486c0ae9c883970dea1c555a8ffcff84</a>
+<blockquote>
+<p>
+ Release notes for 9.52 release<br>
+<br>
+doc/History9.htm<br>
+doc/News.htm<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-17 15:52:20 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c76b5f64e0525e4ddf9e5c311a1b75fe738298dc">c76b5f64e0525e4ddf9e5c311a1b75fe738298dc</a>
+<blockquote>
+<p>
+ Add references to the 64 bit windows exes<br>
+<br>
+doc/Use.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 15:07: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=eec073529fb8dc0c3bb6d612b61bf483d135c9cf">eec073529fb8dc0c3bb6d612b61bf483d135c9cf</a>
+<blockquote>
+<p>
+ Bug 702217: Reinstate dynamic libs LDFLAGS for MacOS<br>
+<br>
+ With the significant revamp of the platform detection functions in configure<br>
+ the LDFLAGS for building the gs shared library on MacOS went astray. This<br>
+ puts them back in.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-16 09:06:16 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a9cd9959372b9f14b493b87df57664ea831c5d80">a9cd9959372b9f14b493b87df57664ea831c5d80</a>
+<blockquote>
+<p>
+ Repair device subclassing after fill+stroke commit<br>
+<br>
+ Bug 702221 &quot;Ghostscript 9.51 - SIGFPE when -dFirstPage or -dLastPage is set&quot;<br>
+<br>
+ The fill+stroke commit had an error with the default method for handling<br>
+ fill_stroke_path which passed the subclassing device as a parameter to<br>
+ the child, instead of passing the child device. This caused seg faults,<br>
+ floating point exceptions, hangs, and possibly other problems.<br>
+<br>
+ In addition the object filtering device had been modified to pass the<br>
+ fill+stroke method to the default handler, instead of checking to see<br>
+ if vector operations should be dropped.<br>
+<br>
+ This commit fixes both problems.<br>
+<br>
+base/gdevoflt.c<br>
+base/gdevsclass.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 10:56:43 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f712440a2f251ae06277ec4a5ffe8ce7599aa4d8">f712440a2f251ae06277ec4a5ffe8ce7599aa4d8</a>
+<blockquote>
+<p>
+ Add ARCH_MAX_SIZE_T to configure's arch.h prototype<br>
+<br>
+arch/arch_autoconf.h.in<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-14 10:53:15 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=214d16924543fb3116a031463052e8b0eff3f1ae">214d16924543fb3116a031463052e8b0eff3f1ae</a>
+<blockquote>
+<p>
+ Don't fail on missing freetype for auxtools run<br>
+<br>
+ When cross compiling, we shouldn't fail the recursive call to configure if<br>
+ there's no freetype - since it's not required for auxtools.<br>
+<br>
+configure.ac<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-12 11:49:11 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b02467bd535d50d221e4f7c371867603f5368f36">b02467bd535d50d221e4f7c371867603f5368f36</a>
+<blockquote>
+<p>
+ Dates, changelog etc for 9.51 release<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>2020-03-02 17:10:43 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=15f5f8bad503e9d3e63db9c3ca395deffd6b1e20">15f5f8bad503e9d3e63db9c3ca395deffd6b1e20</a>
+<blockquote>
+<p>
+ Fix 16bit blending problem.<br>
+<br>
+ Seen with:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -o out%d.psd -r72 -dMaxBitmap=2000M<br>
+ tests_private/pdf/forms/v1.5/proxy_vol_1_number_1_1.pdf<br>
+<br>
+ on page 3.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 11:16:51 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d5809b79052b20c723700cce75e7e1543a3ddc23">d5809b79052b20c723700cce75e7e1543a3ddc23</a>
+<blockquote>
+<p>
+ Dates/logs for 9.51 release candidate 3<br>
+<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>2020-03-02 11:04:32 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f6e3e9238bb5cf7fe44c3c845be286a3314ed905">f6e3e9238bb5cf7fe44c3c845be286a3314ed905</a>
+<blockquote>
+<p>
+ Fix 64bit non-console windows build.<br>
+<br>
+ The creation of the text window was truncating the pointer to<br>
+ long (32bit) size. No idea how we've been getting away with this<br>
+ in the past. I can only assume this has been exposed by<br>
+ differences in the runtime lib with vs2019 as compared to<br>
+ earlier versions.<br>
+<br>
+psi/dwtext.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-03-02 09:02:51 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ffe0e5cf33feee7672e5f4281f0c0b0ff66bddda">ffe0e5cf33feee7672e5f4281f0c0b0ff66bddda</a>
+<blockquote>
+<p>
+ Add mention of deprecating/removing opvp/oprp devices<br>
+<br>
+doc/History9.htm<br>
+doc/News.htm<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-28 08:30: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=a1478a72a3ccb8564c2b1c5c87d3dbe23a5ffff2">a1478a72a3ccb8564c2b1c5c87d3dbe23a5ffff2</a>
+<blockquote>
+<p>
+ Dates, changelog etc for 9.51rc2<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>2020-02-26 15:22:04 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dbaddcf6e251229a1506f2df33844365df39de44">dbaddcf6e251229a1506f2df33844365df39de44</a>
+<blockquote>
+<p>
+ Fix signed issue in 16bit alpha blending fill_rectangle routines.<br>
+<br>
+ As seen by the central spot in the pink region of page 1 of:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -o out%d.psd -dMaxBitmap=2000M<br>
+ tests_private/pdf/pdf_1.7_ATS_EXXPA1DC_PDFACT.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 15:09:35 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4ad8020c3cb63345dd76119e8978c3353940a68e">4ad8020c3cb63345dd76119e8978c3353940a68e</a>
+<blockquote>
+<p>
+ pdfwrite - Fix indeterminism with QL shading tests<br>
+<br>
+ When creating a new colour space to put in a PDF file we perform various<br>
+ tests to see if its a space we have already written, to prevent writing<br>
+ duplicate spaces (we perform similar tests for most resources).<br>
+<br>
+ In some cases, when we write the resource to a file, we create an MD5<br>
+ hash and compare those to see if the resources are the same. In the<br>
+ case of colour spaces, however, they are retained in memory and so we<br>
+ use a different method. We 'serialise' the colour space. This is not the<br>
+ same as writing it to the PDF file, and its a graphics library thing not<br>
+ a pdfwrite function. Basically this writes out the content of the<br>
+ various C structures. The stream we use is an in-memory stream.<br>
+<br>
+ Unfortunately, for Separation colour spaces, there was a fault in the<br>
+ function which writes the colour space name, and it was writing out<br>
+ the bytes forming the address of the name instead of the actual string.<br>
+<br>
+ This could, very rarely, mean that we would mis-identify a new colour<br>
+ space as being the same as an old colour space, and so would reuse the<br>
+ old space instead of creating a new one.<br>
+<br>
+ I've checked the DeviceN code and it does not suffer the same problem.<br>
+<br>
+base/gscsepr.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 13:03:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3cb8b3a403450d617b2b96ec0349bb99ce0d8379">3cb8b3a403450d617b2b96ec0349bb99ce0d8379</a>
+<blockquote>
+<p>
+ Fix the overflow case in 16 bit saturation blending.<br>
+<br>
+ As seen with the second apple of the bottom row of page 1<br>
+ of:<br>
+<br>
+ gs -sDEVICE=psdcmyk16 -r72 -o out%d.psd -dMaxBitmap=2000M<br>
+ ../tests_private/pdf/PDF_1.7_ATS/AIX4G1C3.pdf<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 17:10:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=5d4305e916d3f75492d03dfd79ab1aaedf9545e3">5d4305e916d3f75492d03dfd79ab1aaedf9545e3</a>
+<blockquote>
+<p>
+ Fix for bug 702150: make pl_main_run_file_utf8() check for error from s_process_read_buf().<br>
+<br>
+ Avoids infinite loop in:<br>
+ ./membin/gpcl6 -sDEVICE=ppmraw -o /dev/null .<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 18:24:55 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2c6efee0f594ad29394bf8a303f21d85dcb1d70a">2c6efee0f594ad29394bf8a303f21d85dcb1d70a</a>
+<blockquote>
+<p>
+ minor improvements to toolbin/squeeze2text.py.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 08:25:13 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=ef5dfe7e3b3858bdfb20c168b4818c4d65fb932f">ef5dfe7e3b3858bdfb20c168b4818c4d65fb932f</a>
+<blockquote>
+<p>
+ CID 354310: Remove pointless unsigned comparison with 0.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-26 08:11:49 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=29335f43967a0f089d6f2f37883a22f1516f7bde">29335f43967a0f089d6f2f37883a22f1516f7bde</a>
+<blockquote>
+<p>
+ CID 354291: Add error handling for inability to allocate<br>
+<br>
+ Coverity complained about setting dash.pattern = NULL and &quot;Passing &quot;&amp;dash&quot;<br>
+ to &quot;gstate_copy_dash&quot;, which dereferences null &quot;dash.pattern&quot; which is either<br>
+ wrong, or *very* misleading. We assume that it means that gx_set_dash() *may*<br>
+ access that pointer.<br>
+<br>
+ In truth, this can never happen in these circumstances.<br>
+<br>
+ Nevertheless, in gx_set_dash() is we have a NULL mem (allocator) pointer and the<br>
+ dash pattern pointer is NULL at the point we have to copy into it, then throw<br>
+ an error.<br>
+<br>
+base/gsline.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 19:59:03 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=1d0889b9fcf3a5d5012fad021b4c53828879016e">1d0889b9fcf3a5d5012fad021b4c53828879016e</a>
+<blockquote>
+<p>
+ Fix bug 702139 - clist clipping bug.<br>
+<br>
+ When characters are filled as paths, the fill_adjust may be set to 0.<br>
+ Clip paths are supposed to match fill paths, i.e. the 'any part of pixel'<br>
+ rule, so we need fill_adjust of 0.5 (not 0). The most foolproof way to fix<br>
+ this is to set it in the reader when processing 'begin_clip' and restore<br>
+ it when handling the end_clip.<br>
+<br>
+ There are many progressions with this change, but it also exposes some<br>
+ cases where the change in clipping allows other elements to be seen that<br>
+ were previously hidden. Those few instances are minor and mostly seem to<br>
+ occur when page mode differs from clist mode. Examination of some of those<br>
+ cases shows that the clip path with clist mode now matches page mode and<br>
+ other elements (e.g. images) differ in extent between page and clist mode.<br>
+<br>
+base/gxclrast.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 19:39:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=86f81e9b799b66207c699768616a6e3ba3c311c3">86f81e9b799b66207c699768616a6e3ba3c311c3</a>
+<blockquote>
+<p>
+ Fix gx_default_copy_alpha_hl_color for 16 bit operation.<br>
+<br>
+ The code to write the composite data back to buffers to be sent<br>
+ to copy_alpha was getting the first byte of each 16 bit pair<br>
+ wrong in the 16bit data case.<br>
+<br>
+ Also, when we 'restart' after skipping a zero byte in the 16bit<br>
+ case we need to skip 2 bytes per pixel, not one.<br>
+<br>
+ This can be seen when running:<br>
+<br>
+ gs -r72 -o out%d.psd -sDEVICE=psdcmyk16 -dMaxBitmap=2000M<br>
+ ../tests_private/comparefiles/js.pdf<br>
+<br>
+base/gdevdbit.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 18:19:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=635303ca7d8a36b3dabc9afbd9132f4b9a36dce5">635303ca7d8a36b3dabc9afbd9132f4b9a36dce5</a>
+<blockquote>
+<p>
+ Fix psdcmyk16 blending issue.<br>
+<br>
+ Use uint32_t rather than int to avoid signedness issues.<br>
+<br>
+ Seen in the psdcmyk16 page mode rendering of<br>
+<br>
+ tests_private/comparefiles/Bug692766.pdf<br>
+<br>
+ (bad colors in 4th rgb circle intersection test).<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 15:57:36 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a00c75369e082798d82202a2b64d8e4b484d0c11">a00c75369e082798d82202a2b64d8e4b484d0c11</a>
+<blockquote>
+<p>
+ Fix coverity issues 354292 and 354293.<br>
+<br>
+ Don't bother testing an unsigned value for clipping against 0.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-25 08:58:32 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=32f3d6703a7e5c6582c066837783c6697e98b1ca">32f3d6703a7e5c6582c066837783c6697e98b1ca</a>
+<blockquote>
+<p>
+ Replace 0 with NULL for pointer validation/setting.<br>
+<br>
+ Also make validation an explicit comparison with NULL i.e.:<br>
+ &quot;if (mem != NULL)&quot; rather than &quot;if (mem)&quot;.<br>
+<br>
+base/gsline.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 17:30:54 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6c1002cc251907e702fd5db9dc81365a964816c6">6c1002cc251907e702fd5db9dc81365a964816c6</a>
+<blockquote>
+<p>
+ Add support for multiple squeezes in one run.<br>
+<br>
+ E.g. MEMENTO_SQUEEZES=115867-1..+3,119928-1..+3 ...<br>
+<br>
+ This is equivalent running multiple times with MEMENTO_FAILAT set to 115866,<br>
+ 115867, 11588, 119927, 119928, 119929.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 10:38:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=39557bd53eee75a8b8f762457ce57a5437e79d6c">39557bd53eee75a8b8f762457ce57a5437e79d6c</a>
+<blockquote>
+<p>
+ Fix for MEMENTO_FAILAT=119928: only call gs_grestoreall_for_restore() if vmsave-&gt;gsave not NULL.<br>
+<br>
+ Also fix error cleanup in gs_gsave_for_save(), otherwise this fix breaks<br>
+ previous fix for MEMENTO_FAILAT=115802.<br>
+<br>
+ [Thanks to chrisl for this and various other recent fixes.]<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=119928 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsstate.c<br>
+psi/isave.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 11:21:53 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=60507d492507817bb5ae14a17a01d19c50d41e0a">60507d492507817bb5ae14a17a01d19c50d41e0a</a>
+<blockquote>
+<p>
+ toolbin/squeeze2text.py: improve log output.<br>
+<br>
+ With -p, if there is gap in 'Memory squeezing @ &lt;N&gt;' output (because of calls<br>
+ to free()), output next &lt;N&gt;.<br>
+<br>
+ Also flush log output to avoid looking like we've hung.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 21:00:21 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3a9ea36465e97ce729c5ab26dc8e0d1435b7b246">3a9ea36465e97ce729c5ab26dc8e0d1435b7b246</a>
+<blockquote>
+<p>
+ Fix issue with fts_14_1416.pdf and psdcmyk16<br>
+<br>
+ This was missed in the fix. Affected only 16 bit devices.<br>
+<br>
+ http://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=b1ac0686eea6adcf2db8cabf7858796494b4459d<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 20:05:49 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8f3320f9b6214907d24a4a9f77638b199aa95f8e">8f3320f9b6214907d24a4a9f77638b199aa95f8e</a>
+<blockquote>
+<p>
+ Fix Ink names leaking.<br>
+<br>
+ The cause of the leak was a typo in gx_final_DeviceN.<br>
+<br>
+ Once this is fixed, we hit a problem where ink names are set<br>
+ to be a pointer to a static empty string, which can't be<br>
+ freed. Change to using NULL to mean empty ink name.<br>
+<br>
+base/gscdevn.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:01:43 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b28d57e7422d2d4df8c805342ad01dfc6c6e1232">b28d57e7422d2d4df8c805342ad01dfc6c6e1232</a>
+<blockquote>
+<p>
+ Memento/Valgrind tweak.<br>
+<br>
+ Ensure we mark the contents of a block readable before we<br>
+ look for pointers in it, and don't overrun the end.<br>
+<br>
+base/memento.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:57:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=0822ac2a5f1f02315a783504fccf615a55cf494f">0822ac2a5f1f02315a783504fccf615a55cf494f</a>
+<blockquote>
+<p>
+ Squash some unused variable warnings.<br>
+<br>
+base/claptrap-planar.c<br>
+base/gp_unifs.c<br>
+base/gxclpath.c<br>
+gpdl/tifftop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:14:23 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=82a2d6356858c0a4ab9ff7fa294c0380d04aa9e3">82a2d6356858c0a4ab9ff7fa294c0380d04aa9e3</a>
+<blockquote>
+<p>
+ pdf14_{fill_stroke_path,clist_fill_stroke_path_pattern_setup} cleanups.<br>
+<br>
+ Use a nicer method of breaking const (to avoid warnings). Ensure<br>
+ that we always put everything back as it was when we leave the<br>
+ functions, even if we have an error.<br>
+<br>
+ Remove needless cleanup code to handle functions that can never<br>
+ return an error to us returning an error.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 12:35:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b1ff23ccf08707af544de59d6c59971d0c17098c">b1ff23ccf08707af544de59d6c59971d0c17098c</a>
+<blockquote>
+<p>
+ pdf14_clist_fill_stroke_path_pattern_setup overprint fix.<br>
+<br>
+ Only enable CompatibleOverprint for the stroke part of stroke/fill<br>
+ patterns if we are in a subtractive space.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 11:24:28 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=389324fd827e1172eb358b616a32af5fcb2633f6">389324fd827e1172eb358b616a32af5fcb2633f6</a>
+<blockquote>
+<p>
+ Squash some warnings with gs_swapcolors_quick breaking const.<br>
+<br>
+ At various places in the code, we call gs_swapcolors_quick where<br>
+ we only have a const pgs.<br>
+<br>
+ Properly, we should copy the pgs to a non-const pgs, and then use<br>
+ that, but that would be a performance hit.<br>
+<br>
+ In all cases, we change the graphics state, then restore it before<br>
+ exit, so effectively it is const over the entire call of the<br>
+ enclosing procedure.<br>
+<br>
+ Rather than having lots of small hacky casts removing const, we<br>
+ push the const breakage into gs_swapcolors_quick itself where we<br>
+ do it in the &quot;approved&quot; way using a union.<br>
+<br>
+base/gdevp14.c<br>
+base/gsstate.c<br>
+base/gxfill.c<br>
+base/gxgstate.h<br>
+devices/vector/gdevpdfd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 10:10:25 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=449433ff6689c603a56186dbde5721f6139aa939">449433ff6689c603a56186dbde5721f6139aa939</a>
+<blockquote>
+<p>
+ Avoid floating point in gxblend.c<br>
+<br>
+ Use fixed point in preference.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-24 08:23:59 +0000
+</strong>
+<br>Ken Sharp &lt;ken.sharp@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6badfb362efe0fb4f0c3df106a33ecd5b0265ef7">6badfb362efe0fb4f0c3df106a33ecd5b0265ef7</a>
+<blockquote>
+<p>
+ Implement OPM tracking in pdfwrite<br>
+<br>
+ More than somewhat to my surprise, the release testing of 9.51 revealed<br>
+ that pdfwrite was not tracking the state of overprint mode (OPM). It<br>
+ could be set by setdistillerparams, and in no other way.<br>
+<br>
+ This commit adds tracking the OPM in the graphics state, removes the<br>
+ old overprint_mode variable from the device, but preserves the ability<br>
+ to alter the OPM using setdistillerparms.<br>
+<br>
+ This also alters the initial state of OPM, the distiller params<br>
+ reference states that the 'factory default' of OPM is 1, but the PDF<br>
+ Reference says that the initial state of OPM is 0. We need to start<br>
+ with the correct setting of OPM so we change it form 1 to 0<br>
+ in gs_pdfwr.ps.<br>
+<br>
+ In passing, cast a const gs_gstate * to a gs_gstate * when used by<br>
+ gs_swapcolours_quick, in order to avoid a compiler warning.<br>
+<br>
+ This causes a small number of progressions in files using OPM (which is<br>
+ rare, its even rarer to actually alter it during the course of the file)<br>
+<br>
+Resource/Init/gs_pdfwr.ps<br>
+devices/vector/gdevpdfb.h<br>
+devices/vector/gdevpdfd.c<br>
+devices/vector/gdevpdfg.c<br>
+devices/vector/gdevpdfx.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 16:24:12 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3dc65600d6d4eb060398f06f148cfe4f07a82439">3dc65600d6d4eb060398f06f148cfe4f07a82439</a>
+<blockquote>
+<p>
+ Bug 702117 Knockout groups containing non-isolated groups<br>
+<br>
+ So this ended up being rather complicated. The first issue was that<br>
+ we were not setting the backdrop properly for non-isolated groups that<br>
+ reside in knockout groups. When that was fixed, it was revealed that we<br>
+ were not doing the recompositing operation for non-isolated knockout groups. This meant<br>
+ that the backdrop was getting applied twice effectively (once in the original<br>
+ fill and then again when the group was popped). The only file that showed<br>
+ this issue was the crazy Altona page with the many overlapping groups. Customer<br>
+ file added to provide a clearer case in the regression tests.<br>
+<br>
+base/gdevp14.c<br>
+base/gxblend.c<br>
+base/gxblend1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 17:09:41 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=416baca7c4bcf0b1794b7b1647250bf09adaee9d">416baca7c4bcf0b1794b7b1647250bf09adaee9d</a>
+<blockquote>
+<p>
+ Fix MEMENTO_FAILAT=115867 - segv in i_unregister_root() after failure in i_register_root().<br>
+<br>
+ In pl_main_delete_instance(), don't call gs_unregister_root() if<br>
+ minst-&gt;device_root is NULL.<br>
+<br>
+ Also in pl_top_create_device(), check return from<br>
+ gs_register_struct_root(). But this doesn't appear to make any difference to<br>
+ the handling of the memento error.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=115867 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+pcl/pl/plmain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 16:51:56 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4eb54af16c69ef36371291bd43f853865adea1eb">4eb54af16c69ef36371291bd43f853865adea1eb</a>
+<blockquote>
+<p>
+ Fix deep color group compose issue.<br>
+<br>
+ In commit bb7d57e84e9fe I reordered parameters to keep 8/16<br>
+ branches consistent, and missed one case.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:27:07 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=a2276988137021618bb3ca440aba50e126160bcd">a2276988137021618bb3ca440aba50e126160bcd</a>
+<blockquote>
+<p>
+ Remove needless &quot;isolated&quot; parameter from pdf14_mark_rect routines.<br>
+<br>
+ The value was carefully plumbed through (only in the 8bit case) in<br>
+ a recent commit, but was never actually used. Remove it a) because<br>
+ it's pointless passing a variable we don't use, and b) because it's<br>
+ another difference between 8 and 16 bit versions.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:21:30 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9ddcae93fe1629e81d36b17b7fec9de787b411cc">9ddcae93fe1629e81d36b17b7fec9de787b411cc</a>
+<blockquote>
+<p>
+ Fix typing mistake in 16bit transparency.<br>
+<br>
+ When promoting from 8 to 16 bit, shape and src_alpha become<br>
+ uint16_ts rather than bytes.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 15:06:38 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7de8fe5a49df0f9154fa707a934e39c012c3cc2a">7de8fe5a49df0f9154fa707a934e39c012c3cc2a</a>
+<blockquote>
+<p>
+ Fix more overprint problems with deep color transparency.<br>
+<br>
+ Again, overprint changes to the 8 bit paths had not been<br>
+ pulled across to the 16 bit path.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 07:10:40 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2d3f8c01231d52a5595e2727b31b8044188a5af8">2d3f8c01231d52a5595e2727b31b8044188a5af8</a>
+<blockquote>
+<p>
+ Added toolbin/squeeze2text.py, for processing output from MEMENTO_SQUEEZEAT=...<br>
+<br>
+ An alternative to squeeze2html.pl, outputing just summary information.<br>
+<br>
+toolbin/squeeze2text.py<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-20 11:18:11 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=777d79315e0094bef83d241bc0d5683ea6775a55">777d79315e0094bef83d241bc0d5683ea6775a55</a>
+<blockquote>
+<p>
+ Fix for MEMENTO_FAILAT=115802: make gs_gsave_for_save() call gs_gsave() so it can restore after error.<br>
+<br>
+ Previously, zsave() called gs_gsave_for_save() then gs_gsave(), but if<br>
+ gs_gsave() failed we ended up with SEGV in finalise code.<br>
+<br>
+ To allow zsave() to restore things after gs_gsave() failure, we would need to<br>
+ add an include of base/gxgstate.h.<br>
+<br>
+ Instead we remove the call of gs_gsave() from zsave() and append it to<br>
+ gs_gsave_for_save(), where things can be easily restored if it fails.<br>
+<br>
+ [There are no other callers of gs_gsave_for_save().]<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=115802 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gsstate.c<br>
+psi/zvmem.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 09:44:51 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6db4560f1e31bb92321894e0d008d310aa600097">6db4560f1e31bb92321894e0d008d310aa600097</a>
+<blockquote>
+<p>
+ Avoid leaks if we get alloc failure when closing down (found by memento).<br>
+<br>
+ In gs_main_finit(), ignore gs_error_VMerror from interp_reclaim(). Such error<br>
+ ultimately comes from gs_vmreclaim() calling context_state_load(), but the<br>
+ missing info doesn't seem to be required for gs_main_finit() to carry on.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=147801 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+psi/imain.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 17:40:51 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=eb726fb4d2597cfcd4986dd9c105cf1ab71d09e3">eb726fb4d2597cfcd4986dd9c105cf1ab71d09e3</a>
+<blockquote>
+<p>
+ Fix image_color_icc_prep to properly align planar buffers.<br>
+<br>
+base/gxicolor.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 10:50:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e01371e00caa8f5d08ef150a6f594c93ca495be2">e01371e00caa8f5d08ef150a6f594c93ca495be2</a>
+<blockquote>
+<p>
+ Enable CAL for gxicolor halftoning.<br>
+<br>
+ Looks like the calling code was unfinished, and the build<br>
+ changes were not done.<br>
+<br>
+ Also, squash some warnings.<br>
+<br>
+base/gxicolor.c<br>
+base/gximono.c<br>
+base/lib.mak<br>
+devices/gdevtsep.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 15:57:47 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=c4e7cddc4d053f2850e697696e2498180547961a">c4e7cddc4d053f2850e697696e2498180547961a</a>
+<blockquote>
+<p>
+ Ensure the memory entry in a cloned gstate is correct.<br>
+<br>
+ In theory, we could end up cloning a graphics state with one allocator, then<br>
+ assigning the &quot;memory&quot; entry in the cloned state to that of the state we are<br>
+ cloning.<br>
+<br>
+ In practice the two have (so far) been the same, but that is not guaranteed.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 11:08:57 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=239e70cd02491bab1cce9092c07c959427358646">239e70cd02491bab1cce9092c07c959427358646</a>
+<blockquote>
+<p>
+ Fix segfault cleaning up after gstate clone failure.<br>
+<br>
+ For me this happens with MEMENTO_FAILAT=112447 and for Julian it happens with<br>
+ MEMENTO_FAILAT=115905.<br>
+<br>
+ Basically, the order of events was that we'd allocate a new gstate, copy the<br>
+ contents of the existing gstate to the new one, then copy the dash pattern<br>
+ (which could fail) and copy the &quot;client_data&quot; (which could and, in this case,<br>
+ did fail). When either of those failed, we'd jump to the error handling and<br>
+ exit with the error.<br>
+<br>
+ The problem is that, by jumping to the &quot;fail&quot; label, we skip over all the code<br>
+ that fixes up the reference counts (and various other things) to account for<br>
+ the newly created gstate.<br>
+<br>
+ This commit reorders things so we allocate the gstate, copy the client data,<br>
+ copy the dash pattern, *then* assign the contents of the old gstate to the new<br>
+ one, and carry on. Thus, by the time the gstate contents are copied, the<br>
+ function cannot fail, and everything is sure to be correctly setup.<br>
+<br>
+ In the event that either the dash pattern or the client data fail to allocate,<br>
+ the new gstate is still filled with NULLs, except for the subset of<br>
+ &quot;gs_gstate_parts&quot; which are allocated and setup correctly so we can safely<br>
+ free the graphics state object before returning the error.<br>
+<br>
+ Also, use NULL for pointer validation instead of 0.<br>
+<br>
+base/gsstate.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 17:43:18 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=db5b51109ddee39b17b2ff2c2ac12f41a70785ef">db5b51109ddee39b17b2ff2c2ac12f41a70785ef</a>
+<blockquote>
+<p>
+ Make sure pattern fills use proper alpha settings<br>
+<br>
+ Fix for regression of fts_28_2804.pdf pdfwrite output rendering<br>
+ with fill-stroke commit. This also fixes the rendering of fts_25_2526.pdf<br>
+ Bug 702033. Required a minor change in the XPS interpreter to make<br>
+ sure that patterns did not have their opacity double applied.<br>
+<br>
+base/gdevp14.c<br>
+xps/xpstile.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 17:20:09 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=cddd44e1bfcdaba1c289c3d83645613d136e5e3e">cddd44e1bfcdaba1c289c3d83645613d136e5e3e</a>
+<blockquote>
+<p>
+ Bug 702105: Premature EOF Infinite loop in interpolated imagemask stream.<br>
+<br>
+ Fix supplied by Peter Cherepanov. Many thanks.<br>
+<br>
+base/simscale.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-19 16:58:06 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=59089ab66b3faaa683bb3aeb0bf856b7aa284f9b">59089ab66b3faaa683bb3aeb0bf856b7aa284f9b</a>
+<blockquote>
+<p>
+ Fix &quot;blue gradients&quot; seen with psdrgb device.<br>
+<br>
+ Since the fill/stroke commit went in, some files have been showing<br>
+ gradients in the wrong colours. For instance this one, spotted in<br>
+ release testing:<br>
+<br>
+ gs -sDEVICE=psdrgb -r72 -dMaxBitmap=2000M -o out%d.psd<br>
+ ../tests_private/comparefiles/Layout.pdf<br>
+<br>
+ Bisecting the fill/stroke branch back, it seems the commit that<br>
+ caused it is the one that stops psdrgb using 'devn' colors.<br>
+<br>
+ This causes gradients to drop to using the color_info.comp_bits and<br>
+ comp_shift information, which the psd devices don't fill in.<br>
+<br>
+ The fix here is to make psd_prn_open call the standard function for<br>
+ setting up these values.<br>
+<br>
+devices/gdevpsd.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 14:48:05 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=25cd0c72b98f9efc6968254d1e3a2f33ec376369">25cd0c72b98f9efc6968254d1e3a2f33ec376369</a>
+<blockquote>
+<p>
+ Bug701972 -- fix pdfwrite image downscaling bug<br>
+<br>
+ Calculate the bits on the row using the input image width,<br>
+ not the output image width.<br>
+<br>
+ I had to add an extra argument to a few functions to propagate the info<br>
+ down to where it is needed.<br>
+<br>
+ Note obscure case involving calling psdf_setup_image_to_mask_filter()<br>
+ for a Type 4 image and CompatibilityLevel &lt; 1.3. This change just<br>
+ adds the extra input_width arg, which doesn't change whatever it was<br>
+ doing before. If there is a bug lurking here, it seems unlikely<br>
+ anybody cares?<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+devices/vector/gdevpsdf.h<br>
+devices/vector/gdevpsdi.c<br>
+devices/vector/gdevpsds.c<br>
+devices/vector/gdevpsds.h<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 09:22:55 -0800
+</strong>
+<br>Nancy Durgin &lt;nancy.durgin@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e9523603ac713e365702b81c228edcaaac667dc4">e9523603ac713e365702b81c228edcaaac667dc4</a>
+<blockquote>
+<p>
+ Set the BitsPerComponent for alt stream in pdfwrite<br>
+<br>
+ Add this to the image[1] code where it was missing<br>
+<br>
+ This fixes bug where compressed images were correct, but if<br>
+ -dEncodeGrayImages=false was used, then they were truncated.<br>
+<br>
+ This is related to trimmed/rescaled image for Bug701972.<br>
+ See the sample trim-nobug.pdf attached to that bug.<br>
+<br>
+devices/vector/gdevpdfi.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 19:25:24 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=924f7ea07c7773a3b1510c6206c9a34227e4b39e">924f7ea07c7773a3b1510c6206c9a34227e4b39e</a>
+<blockquote>
+<p>
+ Bug 702131: Fix overprint in additive spaces.<br>
+<br>
+ We should only enter CompatibleOverprint blend mode if we<br>
+ are in an subtractive space. This stops pdf14 trying to honour<br>
+ drawn_comps even in additive spaces.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 14:02:24 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=d98b553c829fad94cd4338910468d2b1b6ee64f7">d98b553c829fad94cd4338910468d2b1b6ee64f7</a>
+<blockquote>
+<p>
+ Fix bug 702079: SEGV with clist and PCL caused by wrong color in images.<br>
+<br>
+ The clist_image_plane_data function was called with the dev_color for a band<br>
+ being type &lt;pattern&gt; when the image had type &lt;pure&gt;, but the code was not<br>
+ calling cmd_put_drawing_color to update the bands for the image because uses_color<br>
+ was false. Add rop3_uses_S(pgs0&gt;log_op) as well as (||) rop3_uses_T(pgs-&gt;log_op)<br>
+ when CombineWitColor is true.<br>
+ Note that extra calls to cmd_put_drawing_color before an image are low cost<br>
+ and do nothing if the current device color is already the same.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 09:48:07 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=4f55464d5c1640075a67a8b50557a48766783e08">4f55464d5c1640075a67a8b50557a48766783e08</a>
+<blockquote>
+<p>
+ Bug 702128 : clist pdf14 overprint state<br>
+<br>
+ This change ensures that gxdso_overprint_active<br>
+ gets the proper state information.<br>
+<br>
+ When the clist writer is active with the pdf14 device, the writer maintains<br>
+ the current overprint state (as the writer has no access to the pdf14 member variables)<br>
+ and must know what to put in the clist.<br>
+<br>
+ When the clist writer is not present (i.e. page mode), the pdf14 device<br>
+ maintains the information.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-18 11:46:45 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=f1887408860910c19c980f05fd0f8fc93b5f06a1">f1887408860910c19c980f05fd0f8fc93b5f06a1</a>
+<blockquote>
+<p>
+ Bug 702068 continued: Fix smasked images with masks.<br>
+<br>
+ Release testing has shown up another case that needs help.<br>
+<br>
+ gs/bin -sDEVICE=ppmraw -o out.ppm -r300 -dMaxBitmap=1G<br>
+ tests_private/pdf/sumatra/1901_-_tiling_inconsistencies.pdf<br>
+<br>
+ This shows horizontal white lines in the &quot;Next&quot; &quot;Up&quot; &quot;Previous&quot;<br>
+ images at the top of the page.<br>
+<br>
+ Investigation shows this is due to the images having Masks as well<br>
+ as SMasks.<br>
+<br>
+ The Mask image is run to a 1 bit memory device, which means that<br>
+ the gxdso to check if we are in an SMask doesn't work. We work<br>
+ around this by introducing a new flag to gs_pixel_image_common<br>
+ that we can set to indicate that we are within an smask. We set<br>
+ this when we set the masked image up (using the gxdso), and check<br>
+ it when we come to do the gridfitting.<br>
+<br>
+base/gsiparam.h<br>
+base/gxclrast.c<br>
+base/gximage.c<br>
+base/gximage3.c<br>
+base/gxipixel.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 19:31:50 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=51a0be1a6ac3bae2dc1b8bcdd91f58f76b9132c9">51a0be1a6ac3bae2dc1b8bcdd91f58f76b9132c9</a>
+<blockquote>
+<p>
+ Sync deep colour blending with recent changes to 8 bit blending.<br>
+<br>
+ Release testing reveals problems with deep color blending and<br>
+ overprint. This is because changes were made to the 8bit<br>
+ branches of gxblend.c that weren't fully reflected in the<br>
+ 16bit branches.<br>
+<br>
+ Reapply those changes here.<br>
+<br>
+ While we're at it, address some other minor code cleanups,<br>
+ including keeping the ordering of parameters the same between 8<br>
+ and 16 bit to avoid confusion in future.<br>
+<br>
+ The command that showed the inital problem was:<br>
+<br>
+ bin/gswin32c.exe -o out.psd -sDEVICE=psdcmyk16 tests_private/comparefiles/Bug695916.pdf<br>
+<br>
+ where the image of the Earth did not appear.<br>
+<br>
+base/gxblend.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-17 13:27:10 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b7faa941d09db8856378e45d4f5c81b5f93e5f90">b7faa941d09db8856378e45d4f5c81b5f93e5f90</a>
+<blockquote>
+<p>
+ Bug 702130: Fix JPEG memory failure problems.<br>
+<br>
+ The SEGV reported by Memento squeezing (which oddly is at 113600<br>
+ for me, rather than Julian's higher number) is caused by jpeglib<br>
+ calling 'mem_term' on something that failed to 'mem_init'.<br>
+<br>
+ The fix is to use gs_memory_chunk_unwrap rather than target/release,<br>
+ and to check whether mem == cmem to see whether that actually did<br>
+ unwrap.<br>
+<br>
+ This runs us into a further problem, where we are freeing the<br>
+ custom memory descriptor using a gc memory pointer, where it was<br>
+ allocated using a non gc one.<br>
+<br>
+ Rather than just changing the free to use the non gc one, we take<br>
+ the opportunity to ensure that ALL the blocks are in non gc memory.<br>
+ JPEGlib will take poorly to its memory being gc'd away, and none<br>
+ of it needs to subject to gc.<br>
+<br>
+ Credit goes largely to Chris for this fix.<br>
+<br>
+base/sjpegc.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 18:44:53 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=619c0231952c20cc14f0eaf603e0cb01aa937eff">619c0231952c20cc14f0eaf603e0cb01aa937eff</a>
+<blockquote>
+<p>
+ Bug 702124 (continued): Avoid FP errors leading to empty pattern cells.<br>
+<br>
+ The limited accuracy of floats can cause pattern cells to appear to<br>
+ be empty when they are not.<br>
+<br>
+ Avoid adding the (often large) tx and ty components in until after we<br>
+ have calculated the width/heights.<br>
+<br>
+base/gsptype1.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 18:43:00 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8edb1b1e7bb84ff4598819fe078eb0ed2c4948d5">8edb1b1e7bb84ff4598819fe078eb0ed2c4948d5</a>
+<blockquote>
+<p>
+ Bug 702124: Avoid VMerror when a pattern cell height is 0.<br>
+<br>
+ We detect buffer_height == 0 and take it to mean that we can't<br>
+ get a large enough buffer for even a single scanline. Actually<br>
+ it can mean that the pattern cell was empty, which gives a<br>
+ spurious error.<br>
+<br>
+base/gxmclip.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-14 17:08:12 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=6beaf42d25f3969b6dc3d8e1b1795017708000c5">6beaf42d25f3969b6dc3d8e1b1795017708000c5</a>
+<blockquote>
+<p>
+ Fix segv after memento squeeze in psdf_DCT_filter().<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=117152 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+devices/vector/gdevpsdu.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 14:54:42 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=8d052b3de78b8034daed23e668758c76a8d8c478">8d052b3de78b8034daed23e668758c76a8d8c478</a>
+<blockquote>
+<p>
+ Fixed double free after alloc failure in gs_lib_ctx_set_icc_directory*() (found by memento).<br>
+<br>
+ After we've freed p_ctx-&gt;profiledir we need to set it to NULL otherwise if we<br>
+ return an error it will be freed a second time when we close down.<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=101810 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/gslibctx.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 11:12:37 +0000
+</strong>
+<br>Julian Smith &lt;jules@op59.net&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=dbde03ca37da96a94f4b7a6f0ba22a47a7bc2cb1">dbde03ca37da96a94f4b7a6f0ba22a47a7bc2cb1</a>
+<blockquote>
+<p>
+ Fixed leak on error in gs_fapi_ufst_init() (found by memento).<br>
+<br>
+ Fixes:<br>
+ MEMENTO_FAILAT=22 LD_LIBRARY_PATH=../libbacktrace/.libs ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+base/fapiufst.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 19:48:01 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=08695f8ccebb0d25eb2a5933ecee92281eefc1be">08695f8ccebb0d25eb2a5933ecee92281eefc1be</a>
+<blockquote>
+<p>
+ Bug 702121: PCL performance degradation<br>
+<br>
+ Henry chased the cause down to commit b399f84, an attempt to<br>
+ fix Bug 700624. Looking at that code now, it has a silly typo<br>
+ in it, that was causing it not be triggered in cases when it<br>
+ should have been. Fixed here.<br>
+<br>
+base/gxpcmap.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 11:11:40 -0800
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=e2cdef26db058e84c2cf4dff5f638e669f961b52">e2cdef26db058e84c2cf4dff5f638e669f961b52</a>
+<blockquote>
+<p>
+ Alternative fix for leaks after error in gs_main_init_with_args01()<br>
+<br>
+ When memory squeezing gpdl, Julian found leaks in the gpdl<br>
+ startup of the postscript interpreter when allocations failed<br>
+ in gs_main_init_with_args01().<br>
+<br>
+ Here, we fix the problem by making the psitop.c layer within gpdl<br>
+ call the appropriate shutdown code when we catch the error. This<br>
+ moves gpdl to being consistent with other users of the gs_main<br>
+ layer.<br>
+<br>
+ Memento memory squeezing around the point of failure (event 2035)<br>
+ now shows this to be OK.<br>
+<br>
+ MEMENTO_SQUEEZEAT=2034 ./membin/gpdl -sDEVICE=bit -o /dev/null examples/tiger.eps<br>
+<br>
+gpdl/psitop.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-13 18:47:37 +0000
+</strong>
+<br>Robin Watts &lt;Robin.Watts@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=bbecd13cc34f3dcdcedd726e7de12c988da9794a">bbecd13cc34f3dcdcedd726e7de12c988da9794a</a>
+<blockquote>
+<p>
+ Revert &quot;Fix leaks after error in gs_main_init_with_args01() (found by memento).&quot;<br>
+<br>
+ This reverts commit f35924926cb35f08be5a12ded4a00eb2f42aed3e.<br>
+<br>
+ When memory squeezing gpdl, Julian found leaks in the gpdl<br>
+ startup of the postscript interpreter when allocations failed<br>
+ in gs_main_init_with_args01().<br>
+<br>
+ The initial fix attempted was to make gs_main_init_with_args01()<br>
+ closedown the interpreter on such errors. This worked for the<br>
+ tested cases, but hid problems with non-memory related errors<br>
+ (such as not being able to open a file specified on the command<br>
+ line) when called by gs (rather than gpdl).<br>
+<br>
+ The change attempted resulted in gs_main_finit() being called<br>
+ twice as gs (and other users of the gs_main APIs) expect to have<br>
+ to call gs_main_finit() to shut down after gs_main_init_with_args01()<br>
+ returns an error code.<br>
+<br>
+ The real problem is that gpdl is not doing this in the same way as<br>
+ other callers.<br>
+<br>
+ The gs_main layer has existed for donkeys years, so it's probably<br>
+ best that we just take it as fixed and don't require callers to<br>
+ start changing stuff now.<br>
+<br>
+ Accordingly, I am reverting the attempted fix here, and will<br>
+ try a different fix for it that only affects gpdl shortly.<br>
+<br>
+psi/imainarg.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-11 16:48:24 -0800
+</strong>
+<br>Ray Johnston &lt;ray.johnston@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=68be233f36feb045e442a18c4f4e4d2ced52b197">68be233f36feb045e442a18c4f4e4d2ced52b197</a>
+<blockquote>
+<p>
+ Change to improve memory and speed (Bug 702099)<br>
+<br>
+ As described in the bug, the patch to disable high-level images in<br>
+ pattern-clists when Interpolate is true is no longer needed (hasn't<br>
+ been since 2015), and it causes the memory and performance problems<br>
+ with this type of file.<br>
+<br>
+base/gxclimag.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 15:10:54 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=2dea734a6184668511758fe1929a1d3166df85b6">2dea734a6184668511758fe1929a1d3166df85b6</a>
+<blockquote>
+<p>
+ Bug 702114 non-isolated group in knockout group<br>
+<br>
+ Make sure to use the parents backdrop as our backdrop when we<br>
+ push a non-isolated group that resides in a knockout group.<br>
+ Note though that this apparently is not the case if we are<br>
+ constructing a soft mask.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 10:54:47 -0800
+</strong>
+<br>Michael Vrhel &lt;michael.vrhel@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=9af467b71198710bc42509e00b730a716b8e4828">9af467b71198710bc42509e00b730a716b8e4828</a>
+<blockquote>
+<p>
+ Bug 702113 Softmask with transfer function<br>
+<br>
+ In a couple spots we look at the value of the background value<br>
+ of the softmask to decide if we really need the softmask in<br>
+ areas outside the group bounding box. These checks were not<br>
+ considering the impact of the transfer function.<br>
+<br>
+base/gdevp14.c<br>
+<p>
+</blockquote>
+<hr>
+<p><strong>2020-02-12 11:37:33 +0000
+</strong>
+<br>Chris Liddell &lt;chris.liddell@artifex.com&gt;<br>
+<a href="http://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=b6d36e3205a8b065014b3965cb3c8269408309ca">b6d36e3205a8b065014b3965cb3c8269408309ca</a>
+<blockquote>
+<p>
+ Dates etc for 9.51 RC1<br>
+<br>
+ Plus prelim changelog<br>
+<br>
+Makefile.in<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>
+psi/winint.mak<br>
+<p>
+</blockquote>
+<hr>
+<hr size=20>
+
+
+
<h2><a name="Version9.52"></a>Version 9.52 (2020-03-19)</h2>
<p> Highlights in this release include:
<ul>
@@ -228380,7 +241809,7 @@ Bump the versioning after the 8.71 release.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -228393,7 +241822,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Install.htm b/doc/Install.htm
index 759376d9..31ae9352 100644
--- a/doc/Install.htm
+++ b/doc/Install.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -427,7 +418,7 @@ comment at the beginning of the latter file for more information.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -440,7 +431,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Internal.htm b/doc/Internal.htm
index ac848116..c7706bbc 100644
--- a/doc/Internal.htm
+++ b/doc/Internal.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -105,7 +96,7 @@ at the beginning of the procedure.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -118,7 +109,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Language.htm b/doc/Language.htm
index 15f39e37..4da4a0bb 100644
--- a/doc/Language.htm
+++ b/doc/Language.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -458,11 +449,13 @@ class="offsite">Adobe
Technical Note</a> #5407, "<a
href="http://partners.adobe.com/asn/developer/acrosdk/DOCS/PDF_Transparency.pdf"
class="offsite">Transparency
-in PDF</a>". Note, however, that
-Ghostscript's model generalizes that of PDF 1.4 in that Ghostscript
-maintains separate alpha and mask values for opacity and shape, rather than
-a single value with a Boolean that says whether it represents opacity or
-shape.</p>
+in PDF</a>". Previously (in 9.52 and earlier), Ghostscript's model
+maintained separate alpha and mask values for opacity and shape. This
+model has been changed (as of 9.53) and instead Ghostscript maintains separate
+float values for stroke and fill alpha values with a boolean that indicates
+if these should be interpreted as shape or alpha values to be more in line with the
+PDF specification.
+</p>
<p>
What follows is a subset of all the custom operators related to transparency, but
covers the most useful, most common requirements.
@@ -504,25 +497,70 @@ the blending mode is <code>/Compatible</code>.</dd>
</dl>
<dl>
-<dt><code>&lt;0..1&gt; .setopacityalpha -</code></dt>
+<dt><code>[Deprecated as of 9.53] &lt;0..1&gt; .setopacityalpha -</code></dt>
<dd>Sets the opacity alpha value in the graphics state.
-The initial opacity alpha value is 1.</dd>
+The initial opacity alpha value is 1. Note, it is strongly
+suggested that this method not be used as it currently may
+give inconsistent results when mixed with methods that
+set stroke and fill alpha values. </dd>
</dl>
<dl>
-<dt><code>- .currentopacityalpha &lt;0..1&gt;</code></dt>
-<dd>Returns the graphics state opacity alpha on the stack.</dd>
+<dt><code>[Deprecated as of 9.53] - .currentopacityalpha &lt;0..1&gt;</code></dt>
+<dd>Returns the graphics state opacity alpha on the stack. Note, it is strongly
+suggested that this method not be used as it currently may
+give inconsistent results when mixed with methods that
+set stroke and fill alpha values.</dd>
</dl>
<dl>
-<dt><code>&lt;0..1&gt; .setshapealpha -</code></dt>
+<dt><code>[Deprecated as of 9.53] &lt;0..1&gt; .setshapealpha -</code></dt>
<dd>Sets the shape alpha value in the graphics state.
-The initial shape alpha value is 1.</dd>
+The initial shape alpha value is 1. Note, it is strongly
+suggested that this method not be used as it currently may
+give inconsistent results when mixed with methods that
+set stroke and fill alpha values.</dd>
+</dl>
+
+<dl>
+<dt><code>[Deprecated as of 9.53] - .currentshapealpha &lt;0..1&gt;</code></dt>
+<dd>Returns the graphics state shape alpha on the stack. Note, it is strongly
+suggested that this method not be used as it currently may
+give inconsistent results when mixed with methods that
+set stroke and fill alpha values.</dd>
+</dl>
+
+<dl>
+<dt><code>&lt;0..1&gt; .setstrokeconstantalpha -</code></dt>
+<dd>Sets the stroke alpha value in the graphics state.
+The initial stroke alpha value is 1.</dd>
+</dl>
+
+<dl>
+<dt><code> - .currentstrokeconstantalpha &lt;0..1&gt;</code></dt>
+<dd>Returns the graphics state stroke alpha value on the stack.</dd>
+</dl>
+
+<dl>
+<dt><code>&lt;0..1&gt; .setfillconstantalpha -</code></dt>
+<dd>Sets the fill alpha value in the graphics state.
+The initial fill alpha value is 1.</dd>
+</dl>
+
+<dl>
+<dt><code> - .currentfillconstantalpha &lt;0..1&gt;</code></dt>
+<dd>Returns the graphics state fill alpha value on the stack.</dd>
+</dl>
+
+<dl>
+<dt><code>&lt;bool&gt; .setalphaisshape -</code></dt>
+<dd>If true, the values set by setstrokeconstantalpha and setfillconstantalpha are interpreted as shape values.
+The initial value of the AIS flag is <code>false</code>.</dd>
</dl>
<dl>
-<dt><code>- .currentshapealpha &lt;0..1&gt;</code></dt>
-<dd>Returns the graphics state shape alpha on the stack.</dd>
+<dt><code> - .currentalphaisshape &lt;0..1&gt;</code></dt>
+<dd>Returns the graphics state alpha is shape (AIS) on the stack.</dd>
</dl>
<dl>
@@ -576,7 +614,7 @@ onto the group that now becomes current.</dd>
</dl>
<dl>
-<dt><code>&lt;paramdict&gt; &lt;llx&gt; &lt;lly&gt; &lt;urx&gt; &lt;ury&gt;
+<dt><code>&lt;cs_set?&gt; &lt;paramdict&gt; &lt;llx&gt; &lt;lly&gt; &lt;urx&gt; &lt;ury&gt;
.begintransparencymaskgroup -</code></dt>
<dd>Begins a new transparency mask, which is represented as a group.
The <code>ll/ur</code> coordinates
@@ -592,6 +630,22 @@ are the bounding box of the mask in the current user coordinate system.
<dd>(optional) Function object (produced by applying
<code>.buildfunction</code> to a Function dictionary).</dd>
</dl>
+The <code>cs_set</code> parameter is a boolean indicating whether the color
+space for the mask group is the current color space in the graphics state, or
+whether mask group color space should be inherited from the previous group
+in the transparency group stack. In general, for the most consistent results,
+it is recommended that this be set to <code>true</code>, and the intended
+color space set in the graphics state prior to the <code>.begintransparencymaskgroup</code>
+call.
+</dl>
+<dl>
+<dt><code>&lt;mask#&gt; .endtransparencymask -</code></dt>
+<dd>Ends the current transparency mask group, compositing the mask group being ended
+and setting it as the current soft mask in the graphics state.
+<p>
+The <code>mask#</code> parameter indicates whether the mask should be treated as
+as opacity mask (<code>0</code>) or shape (<code>1</code>).
+</dd>
</dl>
<h5><a name="Transparency_ImageType"></a>New ImageType</h5>
@@ -2012,7 +2066,7 @@ will install resource files into <code>/gs/Resource</code>.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -2025,7 +2079,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Lib.htm b/doc/Lib.htm
index 924a1e6e..aa240f69 100644
--- a/doc/Lib.htm
+++ b/doc/Lib.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -1034,7 +1025,7 @@ is finished, it should execute:
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -1047,7 +1038,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Make.htm b/doc/Make.htm
index e38e1438..9ca66b04 100644
--- a/doc/Make.htm
+++ b/doc/Make.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -1514,7 +1505,7 @@ msvc.mak sets the other options automatically.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -1527,7 +1518,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/News.htm b/doc/News.htm
index ab0fe755..75c18da1 100644
--- a/doc/News.htm
+++ b/doc/News.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -95,19 +86,41 @@ overview</a>.
<!-- [1.0 end visible header] ============================================== -->
<!-- [2.0 begin contents] ================================================== -->
-<h2><a name="Version9.52"></a>Version 9.52 (2020-03-19)</h2>
+<h2><a name="Version9.53.0"></a>Version 9.53.0 (2020-09-10)</h2>
<p> Highlights in this release include:
<ul>
<li>
-<p>The 9.52 release replaces the 9.51 release after a problem was reported with 9.51
-which warranted the quick turnaround. Thus, like 9.51, 9.52 is primarily a maintenance
-release, consolidating the changes we introduced in 9.50.
+<p>The 9.53.0 release is primarily maintenance.
</li>
<li>
-<p>We have continued our work on code hygiene for this release, with a focus on the
-static analysis tool Coverity (from <a href="https://www.synopsys.com">Synopsys, Inc</a>)
-and we have now adopted a policy of maintaining zero Coverity issues in the
-Ghostscript/GhostPDL source base.
+<p>The most obvious change is the (re-)introduction of the patch level to the version number,
+this helps facilitate a revised policy on handling security related issues.
+</li>
+<li>
+<p>Our efforts in code hygiene and maintainability continue.
+</li>
+<li>
+<p>We have added the capability to build with the Tesseract OCR engine. In such
+a build, new devices are available (pdfocr8/pdfocr24/pdfocr32) which render the
+output file to an image, OCR that image, and output the image "wrapped" up as a
+PDF file, with the OCR generated text information included as "invisible" text
+(in PDF terms, text rendering mode 3).
+<p>Due to some patches to the Tesseract sources that are required (integrated
+upstream, but awaiting release), time constraints, and the experimental nature
+of the feature, we only support including Tesseract from source, not linking to
+Tesseract shared libraries. Whether we add this capability will be largely
+dependant on community demand for the feature.
+</li>
+<li>
+<p>We have added Python bindings for the <code>gsapi</code> interface, can be found
+in <code>demos/python</code>. These are experimental, and we welcome feedback from
+interested developers.
+</li>
+<li>
+<p>For those integrating Ghostscript/GhostPDL via the <code>gsapi</code> interface, we
+have added new capabilities to that, specifically in terms of setting and interrogating
+device parameters. These, along with the existing interface calls, are documented in:
+<a href="API.htm">Ghostscript Interpreter API</a>
</li>
<li>
<p><b>IMPORTANT:</b> In consultation with a representative of
@@ -120,8 +133,8 @@ us, so we can discuss your use case, and revise our plans accordingly.
</li>
<li>
<p>IMPORTANT: We have forked LittleCMS2 into LittleCMS2mt (the "mt" indicating "multi-thread").
-LCMS2 is not thread-safe, and cannot be made thread-safe without breaking the ABI. Our fork
-will be thread-safe and include performance enhancements (these changes have all be been
+LCMS2 is not thread safe and cannot be made thread safe without breaking the ABI. Our fork
+will be thread safe and include performance enhancements (these changes have all be been
offered and rejected upstream). We will maintain compatibility between Ghostscript and LCMS2
for a time, but not in perpetuity. If there is sufficient interest, our fork will be
available as its own package separately from Ghostscript (and MuPDF).
@@ -138,25 +151,31 @@ specific release in question listed in parentheses). We include these,
for now, as we are aware that not everyone upgrades with every release.</h4>
<ul>
<li>
+<p>(9.53.0) As of 9.53.0, we have (re-)introduced the patch level to the version number,
+this helps facilitate a revised policy on handling security related issues.
+<p><strong>Note for GSView Users:</strong>The patch level addition breaks GSView 5 (it is
+hardcoded to check for versions <code>704-999</code>. It is possible, but not guaranteed that
+a GSView update might be forthcoming to resolve this.
+</li>
+<li>
<p>(9.52) As of 9.52, the Windows binaries released by the Ghostscript development
-team are built with Microsoft Visual Studio 2019. As a result Microsoft Windows XP and
-earlier are no longer supported by these binaries. This does not imply we are or will
+team are built with Microsoft Visual Studio 2019. As a result, Microsoft Windows XP and
+earlier are no longer supported by these binaries. This does not imply we are, or will
start relying upon features only available in VS2019, so the <code>nmake</code> Makefiles
will continue to allow older Visual Studio versions (back to VS2005) to build Ghostscript.
</li>
<li>
<p>(9.52) <code>-dALLOWPSTRANSPARENCY</code>: The transparency compositor (and related
features), whilst we are improving it, remains sensitive to being driven correctly, and
-incorrect use can have unexpected/undefined results. Hence, as part of improving security,
+incorrect use can have unexpected/undefined results. Hence, as part of improving security
we limited access to these operators, originally using the <code>-dSAFER</code> feature.
As we made "SAFER" the default mode, that became unacceptable, hence the new option
-<a href="Use.htm#ALLOWPSTRANSPARENCY">-dALLOWPSTRANSPARENCY</a> which enables
-access to the operators.
+<code>-dALLOWPSTRANSPARENCY</code> which enables access to the operators.
</li>
<li>
<p>(9.50) There are a couple of subtle incompatibilities between the old and new SAFER
implementations. Firstly, as mentioned in the 9.50 release notes, SAFER now leaves
-standard Postscript functionality unchanged (except for the file access limitations).
+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>:
@@ -167,21 +186,21 @@ change in behaviour compared to the old code which, on Windows, was case
in that it now supports (although does not enforce) case sensitivity.
</li>
<li>
-<p>(9.27) The process of &quot;tidying&quot; the Postscript name space should have removed
+<p>(9.27) The process of &quot;tidying&quot; the PostScript name space should have removed
only non-standard and undocumented operators. Nevertheless, it is possible that
any integrations or utilities that rely on those non-standard and undocumented
-operators may stop working, or may change behaviour.
+operators may stop working or may change behaviour.
<p>If you encounter such a case, please contact us (either the #ghostscript IRC channel,
or the gs-devel mailing list would be best), and we'll work with you to either find an
-alternative solution or return the previous functionality if there is genuinely no other
+alternative solution or return the previous functionality, if there is genuinely no other
option.
<p>One case we know this has occurred is GSView 5 (and earlier). GSView 5 support for PDF
-files relied upon internal use only features that are no longer available. GSView 5 will
-still work as previously for Postscript files. For PDF files, users are encouraged to look
+files relied upon internal use only features which are no longer available. GSView 5 will
+still work as previously for PostScript files. For PDF files, users are encouraged to look
at <a href="https://www.mupdf.com">MuPDF</a>.
</li>
</ul>
-<h3><a name="9.52_changelog"></a>Changelog</h3>
+<h3><a name="9.53.0_changelog"></a>Changelog</h3>
<p>See the <a href="History9.htm">history file</a> for complete log
of changes.
@@ -206,7 +225,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Ps-style.htm b/doc/Ps-style.htm
index 29c268cc..862e6460 100644
--- a/doc/Ps-style.htm
+++ b/doc/Ps-style.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -536,7 +527,7 @@ that could be made into a procedure.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -549,7 +540,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Ps2epsi.htm b/doc/Ps2epsi.htm
index 84db926c..ed352607 100644
--- a/doc/Ps2epsi.htm
+++ b/doc/Ps2epsi.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -216,7 +207,7 @@ encapsulation fails because of the nature of the original PostScript file.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -229,7 +220,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Psfiles.htm b/doc/Psfiles.htm
index bfea3bc5..119054af 100644
--- a/doc/Psfiles.htm
+++ b/doc/Psfiles.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -881,7 +872,7 @@ when passing files with -dJOBSERVER.</dd>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -894,7 +885,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Readme.htm b/doc/Readme.htm
index 8e259902..9c27128e 100644
--- a/doc/Readme.htm
+++ b/doc/Readme.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -568,7 +559,7 @@ command-line options.</dd></dt>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -581,7 +572,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Release.htm b/doc/Release.htm
index 4c568b27..4795a73f 100644
--- a/doc/Release.htm
+++ b/doc/Release.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -832,7 +823,7 @@ These are included in the Ghostscript release archive.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -845,7 +836,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/SavedPages.htm b/doc/SavedPages.htm
index ddd80a9d..e70d4546 100644
--- a/doc/SavedPages.htm
+++ b/doc/SavedPages.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -317,7 +308,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Source.htm b/doc/Source.htm
index 1855f907..77f7c8bb 100644
--- a/doc/Source.htm
+++ b/doc/Source.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -452,7 +443,7 @@ and so on.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -465,7 +456,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Unix-lpr.htm b/doc/Unix-lpr.htm
index 166eb6e3..320ade33 100644
--- a/doc/Unix-lpr.htm
+++ b/doc/Unix-lpr.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -291,7 +282,7 @@ is responsible for the number-of-colours part of the script.</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -304,7 +295,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/Use.htm b/doc/Use.htm
index 0d82ec49..e8bc3796 100644
--- a/doc/Use.htm
+++ b/doc/Use.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -2305,6 +2296,44 @@ whereas <code>-sXYZ=35</code> is equivalent to</p>
</dl>
<dl>
+<dt><code>-p</code><em>name</em><code>=</code><em>string</em></dt>
+<dd>Define a name in systemdict with the parsed version of the given string as value. The string takes a parameter definition in (something very close to) postscript format.
+This allows more complex structures to be passed in than is possible with <code>-d</code> or <code>-s</code>. For example:
+
+<blockquote><code>
+-pFoo=&quot;&lt;&lt; /Bar[1 2 3]/Baz 0.1 /Whizz (string) /Bang &lt;0123&gt; &gt;&gt;&quot;
+</code></blockquote>
+
+<p>This means that <code>-p</code> can do the job of both <code>-d</code> and <code>-s</code>. For example:</p>
+
+<blockquote><code>
+-dDownScaleFactor=3
+</code></blockquote>
+
+<p>can be equivalently performed by</p>
+
+<blockquote><code>
+-pDownScaleFactor=3
+</code></blockquote>
+
+and
+
+<blockquote><code>
+-sPAPERSIZE=letter
+</code></blockquote>
+
+<p>can be equivalently performed by</p>
+
+<blockquote><code>
+-pPAPERSIZE=&quot;(letter)&quot;
+</code></blockquote>
+
+<p>Note, that there are some 'special' values that should be set using <code>-s</code>, not <code>-p</code>, such as <code>DEVICE</code> and <code>DefaultGrayProfile</code>. Broadly, only use <code>-p</code> if you cannot set what you want using <code>-s</code> or <code>-d</code>.</p>
+
+<p>Also, internally, after setting an parameter with <code>-p</code> we perform an <code>initgraphics</code> operation. This is required to allow changes in parameters such as <code>HWResolution</code> to take effect. This means that attempting to use <code>-p</code> other than at the start of a page is liable to give unexpected results.</p>
+</dl>
+
+<dl>
<dt><code>-u</code><em>name</em></dt>
<dd>Un-define a name, cancelling <code>-d</code> or <code>-s</code>.
@@ -3524,9 +3553,16 @@ operation of <code>setpagedevice</code>, and because this capability is <i>extre
rarely used, we feel the improvement in security warrants the small reduction in
flexibility.
<p>
-Path matching is simple: it is case sensitive, and we do not implement full featured
+Path matching is very simple: it is case sensitive, and we do not implement full featured
&quot;globbing&quot; or regular expression matching (such complexity would significantly
-and negatively impact performance). The following cases are handled:
+and negatively impact performance). Further, the string parameter(s) passed to the
+<code>--permit-file-*</code> option must exactly match the string(s) used to reference
+the file(s): for example, you cannot use a absolute path to grant permission, and
+then a relative path to reference the file (or vice versa) - the path match will fail.
+Similarly, you cannot grant permission through one symlink, and then reference a file
+directly, or through an alternative symlink - again, the matching will fail.
+<p>
+The following cases are handled:
<ul>
<li>
<dt><code>&quot;&sol;path&sol;to&sol;file&quot;</code></dt>
@@ -5259,7 +5295,7 @@ PCLEOs. (see the FAPI-related source code for details).</p>
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -5272,7 +5308,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/VectorDevices.htm b/doc/VectorDevices.htm
index 1acc9ff1..fae407d7 100644
--- a/doc/VectorDevices.htm
+++ b/doc/VectorDevices.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -240,7 +231,7 @@ and then 'wrap' the bitmap as a PDF file. Currently we do not do this either, bu
future enhancement may do so.
</p>
<p>
-If the input contains PDF-compatible transparency, but the ps2weite device is selected, or the pdfwrite device
+If the input contains PDF-compatible transparency, but the ps2write device is selected, or the pdfwrite device
is selected, but has been told to limit the PDF feature set to a version less than 1.4, the transparency
cannot be preserved. In this case the entire page is rendered to a bitmap and that bitmap is 'wrapped up'
in appropriate PDF or PostScript content. The output should be visually the same as the input, but since
@@ -1397,7 +1388,7 @@ not affected.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -1410,7 +1401,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/WhatIsGS.htm b/doc/WhatIsGS.htm
index 15835a50..2f0ecc6c 100644
--- a/doc/WhatIsGS.htm
+++ b/doc/WhatIsGS.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -176,7 +167,7 @@ from <a href="http://www.artifex.com">Artifex</a>.
<hr>
<p>
-<small>Copyright &copy; 2000-2019 Artifex Software, Inc. All rights reserved.</small>
+<small>Copyright &copy; 2000-2020 Artifex Software, Inc. All rights reserved.</small>
<p>
This software is provided AS-IS with no warranty, either express or
@@ -189,7 +180,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/gdevds32.c b/doc/gdevds32.c
index 96af31a9..30ac5fde 100644
--- a/doc/gdevds32.c
+++ b/doc/gdevds32.c
@@ -200,15 +200,18 @@ ds32_print_page(gx_device_printer * pdev, FILE * file)
int *trap_order = dsdev->downscale.trap_order;
gx_downscaler_t ds;
- if (num_comps == 4) {
- if (dsdev->icclink == NULL) {
- code = gx_downscaler_init_trapped(&ds, (gx_device *)pdev, 8, bpc, num_comps,
- factor, 0 /*mfs*/, &fax_adjusted_width, 0 /*aw*/, trap_w, trap_h, trap_order);
- } else {
- code = gx_downscaler_init_trapped_cm(&ds, (gx_device *)pdev, 8, bpc, num_comps,
- factor, 0 /*mfs*/, &fax_adjusted_width, 0 /*aw*/, trap_w, trap_h, trap_order,
- ds32_chunky_post_cm, dsdev->icclink, dsdev->icclink->num_output);
- }
+ if (dsdev->icclink == NULL) {
+ code = gx_downscaler_init(&ds, (gx_device *)pdev,
+ 8, bpc, num_comps,
+ &dsdev->downscale,
+ &fax_adjusted_width, 0 /*aw*/);
+ } else {
+ code = gx_downscaler_init_cm(&ds, (gx_device *)pdev,
+ 8, bpc, num_comps,
+ &dsdev->downscale,
+ &fax_adjusted_width, 0, /*aw*/
+ ds32_chunky_post_cm, dsdev->icclink,
+ dsdev->icclink->num_output);
}
if (code < 0)
return code;
diff --git a/doc/gs-vms.hlp b/doc/gs-vms.hlp
index 1fb39953..125faa30 100644
--- a/doc/gs-vms.hlp
+++ b/doc/gs-vms.hlp
@@ -1,6 +1,6 @@
1 gs
gs - GPL Ghostscript interpreter/previewer
-! Ghostscript version 9.52, 19 March 2020
+! Ghostscript version 9.53.0, 10 September 2020
Usage:
$ gs [options] [file ...]
diff --git a/doc/sample_downscale_device.htm b/doc/sample_downscale_device.htm
index 8834c3d2..dbae06ad 100644
--- a/doc/sample_downscale_device.htm
+++ b/doc/sample_downscale_device.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -263,7 +254,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
<!--FINISH EDITING HERE-->
diff --git a/doc/subclass.htm b/doc/subclass.htm
index 14b84309..e52a2ce7 100644
--- a/doc/subclass.htm
+++ b/doc/subclass.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -812,7 +803,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->
diff --git a/doc/thirdparty.htm b/doc/thirdparty.htm
index bc2538e3..10c57d05 100644
--- a/doc/thirdparty.htm
+++ b/doc/thirdparty.htm
@@ -1,15 +1,6 @@
<!doctype html>
<html>
<head>
-<!-- Global site tag (gtag.js) - Google Analytics -->
-<script async src="https://www.googletagmanager.com/gtag/js?id=UA-54391264-2"></script>
-<script>
- window.dataLayer = window.dataLayer || [];
- function gtag(){dataLayer.push(arguments);}
- gtag('js', new Date());
-
- gtag('config', 'UA-54391264-2');
-</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro" rel="stylesheet">
@@ -253,7 +244,7 @@ or contact Artifex Software, Inc., 1305 Grant Avenue - Suite 200,
Novato, CA 94945, U.S.A., +1(415)492-9861, for further information.
<p>
-<small>Ghostscript version 9.52, 19 March 2020
+<small>Ghostscript version 9.53.0, 10 September 2020
<!-- [3.0 end visible trailer] ============================================= -->