ghostscript: version bump to 10.03.0
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
From e12b8487283979ab454a32888a3c37d4d9492480 Mon Sep 17 00:00:00 2001
|
||||
From: Ken Sharp <Ken.Sharp@artifex.com>
|
||||
Date: Thu, 14 Mar 2024 13:08:38 +0000
|
||||
Subject: [PATCH] pdfwrite - more improvements for mesh shadings
|
||||
|
||||
Bug #707655 "No output visible with pdfwriter"
|
||||
|
||||
commit 3d6e3acbcda79a0096cd1ad73c7b9b1101a43187 to fix bug #06852
|
||||
unfortunately led to this regression. The problem is related to the
|
||||
scaling of co-ordinates performed when a mesh shading has vertex
|
||||
co-ordinates which are too large for Acrobat 5 (PDF 1.4).
|
||||
|
||||
Acrobat 5 has a limit of =/-32767 on real numbers, which applies to the
|
||||
/Decode array of a mesh shading. Because this is an Acrobat limit, not a
|
||||
limit of the PDF specification we would ordinarily ignore it, but the
|
||||
PDF/A-1 specification chose to carry the Acrobat limitations into the
|
||||
PDF/A spec.
|
||||
|
||||
This commit fixes the problem by correctly scaling the co-ordinate
|
||||
values to the Decode array values when outputting to PDF 1.4 or less,
|
||||
even if no actual co-ordinte scaling is required, and modifying the
|
||||
/Matrix of the Pattern to scale up the Decode values to the real
|
||||
co-ordinates. Crucially we must not scale the Tx and Ty values of the
|
||||
CTM.
|
||||
---
|
||||
devices/vector/gdevpdfv.c | 20 ++++++++++++--------
|
||||
1 file changed, 12 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/devices/vector/gdevpdfv.c b/devices/vector/gdevpdfv.c
|
||||
index e880acafd..90a02158f 100644
|
||||
--- a/devices/vector/gdevpdfv.c
|
||||
+++ b/devices/vector/gdevpdfv.c
|
||||
@@ -42,8 +42,8 @@ extern const gx_device_color_type_t gx_dc_pattern2;
|
||||
*/
|
||||
#define ENCODE_VALUE(v, emax, vmin, vmax)\
|
||||
( ((v) - (vmin)) * ((double)(emax) / ((vmax) - (vmin))) )
|
||||
-#define PDFA_MIN_MESH_COORDINATE (-0x800000 / 256.0)
|
||||
-#define PDFA_MAX_MESH_COORDINATE ( 0x7fffff / 256.0)
|
||||
+#define PDFA_MIN_MESH_COORDINATE (-0x400000 / 128.0)
|
||||
+#define PDFA_MAX_MESH_COORDINATE ( 0x3fffff / 128.0)
|
||||
#define PDFA_ENCODE_MESH_COORDINATE(v)\
|
||||
ENCODE_VALUE(v, 0xffffff, PDFA_MIN_MESH_COORDINATE, PDFA_MAX_MESH_COORDINATE)
|
||||
#define MIN_MESH_COORDINATE (-0x800000 )
|
||||
@@ -690,6 +690,7 @@ typedef struct pdf_mesh_data_params_s {
|
||||
int num_components;
|
||||
bool is_indexed;
|
||||
int rescale; /* If the co-ordinates won't fit into crappy Acrobat values, scale them here and in the pattern Matrix */
|
||||
+ bool old_pdf;
|
||||
const float *Domain; /* iff Function */
|
||||
const gs_range_t *ranges;
|
||||
} pdf_mesh_data_params_t;
|
||||
@@ -713,7 +714,7 @@ put_clamped(byte *p, double v, int num_bytes)
|
||||
static inline void
|
||||
put_clamped_coord(byte *p, double v, int num_bytes, const pdf_mesh_data_params_t *pmdp)
|
||||
{
|
||||
- if (pmdp->rescale != 1.0) {
|
||||
+ if (pmdp->rescale != 1.0 || pmdp->old_pdf) {
|
||||
v = v / pmdp->rescale;
|
||||
put_clamped(p, PDFA_ENCODE_MESH_COORDINATE(v), num_bytes);
|
||||
} else
|
||||
@@ -1027,7 +1028,9 @@ pdf_put_mesh_shading(gx_device_pdf *pdev, cos_stream_t *pscs, const gs_shading_t
|
||||
if (z > *rescale)
|
||||
*rescale = (int)z;
|
||||
data_params.rescale = *rescale;
|
||||
- }
|
||||
+ data_params.old_pdf = 1;
|
||||
+ } else
|
||||
+ data_params.old_pdf = 0;
|
||||
|
||||
switch (ShadingType(psh)) {
|
||||
case shading_type_Free_form_Gouraud_triangle: {
|
||||
@@ -1183,12 +1186,13 @@ pdf_put_pattern2(gx_device_pdf *pdev, const gs_gstate * pgs, const gx_drawing_co
|
||||
yscale = 72.0 / pdev->HWResolution[1];
|
||||
}
|
||||
|
||||
- if (rescale != 1) {
|
||||
- xscale *= rescale;
|
||||
- yscale *= rescale;
|
||||
- }
|
||||
smat.xx *= xscale, smat.yx *= xscale, smat.tx *= xscale;
|
||||
smat.xy *= yscale, smat.yy *= yscale, smat.ty *= yscale;
|
||||
+
|
||||
+ if (rescale != 1) {
|
||||
+ smat.xx *= rescale, smat.yx *= rescale;
|
||||
+ smat.xy *= rescale, smat.yy *= rescale;
|
||||
+ }
|
||||
}
|
||||
|
||||
/* Bug #697451, if we emit a PDF with a type 2 Pattern where the
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
Description: Allow the build timestamp to be externally set
|
||||
In order to make Ghostscript output reproducible, we need a way to
|
||||
set the build timestamp to other values than the current time.
|
||||
We now consistently use gp_get_realtime() instead of directly calling
|
||||
time() or gp_get_usertime() and make gp_get_realtime() use the value
|
||||
found in the SOURCE_DATE_EPOCH environment variable if set. Also,
|
||||
environment timezone is fixed to UTC if SOURCE_DATE_EPOCH is used to
|
||||
avoid variations.
|
||||
Author: Eduard Sanou <dhole@openmailbox.org>
|
||||
Author: Peter De Wachter <pdewacht@gmail.com>
|
||||
Bug-Debian: https://bugs.debian.org/794004
|
||||
Last-Update: 2015-07-30
|
||||
---
|
||||
This patch header follows DEP-3: https://dep.debian.net/deps/dep3/
|
||||
--- a/base/gp_unix.c
|
||||
+++ b/base/gp_unix.c
|
||||
@@ -19,6 +19,7 @@
|
||||
#ifdef __MINGW32__
|
||||
# include "windows_.h"
|
||||
#endif
|
||||
+#include "errno_.h"
|
||||
#include "pipe_.h"
|
||||
#include "string_.h"
|
||||
#include "time_.h"
|
||||
@@ -148,6 +149,7 @@
|
||||
gp_get_realtime(long *pdt)
|
||||
{
|
||||
struct timeval tp;
|
||||
+ const char *env;
|
||||
|
||||
#if gettimeofday_no_timezone /* older versions of SVR4 */
|
||||
{
|
||||
@@ -167,6 +169,26 @@
|
||||
}
|
||||
#endif
|
||||
|
||||
+ env = getenv("SOURCE_DATE_EPOCH");
|
||||
+ if (env) {
|
||||
+ char *end;
|
||||
+ long timestamp;
|
||||
+
|
||||
+ errno = 0;
|
||||
+ timestamp = strtol(env, &end, 10);
|
||||
+ if (env == end || *end || errno != 0) {
|
||||
+ lprintf("Ghostscript: SOURCE_DATE_EPOCH is not a number!\n");
|
||||
+ timestamp = 0;
|
||||
+ }
|
||||
+
|
||||
+ tp.tv_sec = timestamp;
|
||||
+ tp.tv_usec = 0;
|
||||
+
|
||||
+ /* We need to fix the environment timezone to get reproducible */
|
||||
+ /* results when parsing the result of gp_get_realtime. */
|
||||
+ setenv("TZ", "UTC", 1);
|
||||
+ }
|
||||
+
|
||||
/* tp.tv_sec is #secs since Jan 1, 1970 */
|
||||
pdt[0] = tp.tv_sec;
|
||||
|
||||
--- a/devices/vector/gdevpdf.c
|
||||
+++ b/devices/vector/gdevpdf.c
|
||||
@@ -427,6 +427,7 @@
|
||||
*/
|
||||
{
|
||||
struct tm tms;
|
||||
+ long secs_ns[2];
|
||||
time_t t;
|
||||
char buf[1+2+4+2+2+2+2+2+1+2+1+2+1+1+1]; /* (D:yyyymmddhhmmssZhh'mm')\0 */
|
||||
int timeoffset;
|
||||
@@ -438,7 +439,8 @@
|
||||
timesign = 'Z';
|
||||
timeoffset = 0;
|
||||
#else
|
||||
- time(&t);
|
||||
+ gp_get_realtime(secs_ns);
|
||||
+ t = secs_ns[0];
|
||||
tms = *gmtime(&t);
|
||||
tms.tm_isdst = -1;
|
||||
timeoffset = (int)difftime(t, mktime(&tms)); /* tz+dst in seconds */
|
||||
--- a/devices/vector/gdevpdfe.c
|
||||
+++ b/devices/vector/gdevpdfe.c
|
||||
@@ -199,6 +199,7 @@
|
||||
{
|
||||
/* We don't write a day time because we don't have a time zone. */
|
||||
struct tm tms;
|
||||
+ long secs_ns[2];
|
||||
time_t t;
|
||||
char buf1[4+1+2+1+2+1]; /* yyyy-mm-dd\0 */
|
||||
|
||||
@@ -206,7 +207,8 @@
|
||||
memset(&t, 0, sizeof(t));
|
||||
memset(&tms, 0, sizeof(tms));
|
||||
#else
|
||||
- time(&t);
|
||||
+ gp_get_realtime(secs_ns);
|
||||
+ t = secs_ns[0];
|
||||
tms = *localtime(&t);
|
||||
#endif
|
||||
gs_sprintf(buf1,
|
||||
--- a/devices/vector/gdevpsu.c
|
||||
+++ b/devices/vector/gdevpsu.c
|
||||
@@ -183,6 +183,7 @@
|
||||
fprintf(f, "%%%%Creator: %s %ld (%s)\n", gs_product, (long)gs_revision,
|
||||
dev->dname);
|
||||
{
|
||||
+ long secs_ns[2];
|
||||
time_t t;
|
||||
struct tm tms;
|
||||
|
||||
@@ -190,7 +191,8 @@
|
||||
memset(&t, 0, sizeof(t));
|
||||
memset(&tms, 0, sizeof(tms));
|
||||
#else
|
||||
- time(&t);
|
||||
+ gp_get_realtime(secs_ns);
|
||||
+ t = secs_ns[0];
|
||||
tms = *localtime(&t);
|
||||
#endif
|
||||
fprintf(f, "%%%%CreationDate: %d/%02d/%02d %02d:%02d:%02d\n",
|
||||
@@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" ?>
|
||||
<!DOCTYPE PISI SYSTEM "https://www.pisilinux.org/projeler/pisi/pisi-spec.dtd">
|
||||
<!DOCTYPE PISI SYSTEM "https://pisilinux.org/projeler/pisi/pisi-spec.dtd">
|
||||
<PISI>
|
||||
<Source>
|
||||
<Name>ghostscript</Name>
|
||||
@@ -13,7 +13,7 @@
|
||||
<IsA>library</IsA>
|
||||
<Summary>A PostScript interpreter and renderer</Summary>
|
||||
<Description>ghostscript is a set of software that provides a PostScript interpreter, a set of C procedures and an interpreter for PDF files. ghostscript is normally used to display PostScript files and to print PostScript files to non-PostScript printers.</Description>
|
||||
<Archive sha1sum="714922a46920ce4874604d79c0da09b88e251409" type="targz">https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10012/ghostscript-10.01.2.tar.gz</Archive>
|
||||
<Archive sha1sum="e59f7faee15f30fdd0c0d781528b5fab2f7310f5" type="targz">https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10030/ghostscript-10.03.0.tar.gz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency>cups-devel</Dependency>
|
||||
<Dependency>dbus-devel</Dependency>
|
||||
@@ -39,7 +39,9 @@
|
||||
<!--
|
||||
<Patch level="1">CVE-2019-14869.patch</Patch>
|
||||
-->
|
||||
<Patch level="1">fedora/ghostscript-sys-zlib.patch</Patch>
|
||||
<Patch level="1">0001_No_output_visible_with_pdfwriter.diff</Patch>
|
||||
<Patch level="1">2010_add_build_timestamp_setting.patch</Patch>
|
||||
<!-- <Patch level="1">fedora/ghostscript-sys-zlib.patch</Patch> -->
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
@@ -54,6 +56,7 @@
|
||||
<Dependency>libidn</Dependency>
|
||||
<Dependency>libX11</Dependency>
|
||||
<Dependency>libpng</Dependency>
|
||||
<Dependency>libgcc</Dependency>
|
||||
<Dependency>freetype</Dependency>
|
||||
<Dependency>libpaper</Dependency>
|
||||
<Dependency>openjpeg2</Dependency>
|
||||
@@ -146,6 +149,13 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="12">
|
||||
<Date>2024-05-16</Date>
|
||||
<Version>10.03.0</Version>
|
||||
<Comment>Version bump</Comment>
|
||||
<Name>Kamil Atlı</Name>
|
||||
<Email>suvari@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="11">
|
||||
<Date>2023-07-29</Date>
|
||||
<Version>10.01.2</Version>
|
||||
|
||||
Reference in New Issue
Block a user