Compare commits
10 Commits
8f17f5acf4
...
e90d1911ef
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e90d1911ef | ||
|
|
3937b54462 | ||
|
|
255f6aca27 | ||
|
|
a0f65912c3 | ||
|
|
a2618ff083 | ||
|
|
c7fbb0430c | ||
|
|
67cb55343d | ||
|
|
66e9dee10c | ||
|
|
e2fc5059df | ||
|
|
f6a32ad804 |
@ -1,8 +1,9 @@
|
|||||||
From 7745dbe24514710b0cfba925e608e607dee9eb0f Mon Sep 17 00:00:00 2001
|
From 7745dbe24514710b0cfba925e608e607dee9eb0f Mon Sep 17 00:00:00 2001
|
||||||
From: Chris Liddell <chris.liddell@artifex.com>
|
From: Chris Liddell <chris.liddell@artifex.com>
|
||||||
Date: Wed, 24 Jan 2024 18:25:12 +0000
|
Date: Wed, 24 Jan 2024 18:25:12 +0000
|
||||||
Subject: [PATCH 3/6] Bug 707510(3): Bounds checks when using CIDFont related
|
Subject: [PATCH 3/7] Bug 707510(3): Bounds checks when using CIDFont related
|
||||||
params
|
params
|
||||||
|
https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=7745dbe24514
|
||||||
|
|
||||||
Specifically, for CIDFont substitution.
|
Specifically, for CIDFont substitution.
|
||||||
---
|
---
|
||||||
|
|||||||
215
Bug-707510-5-2-The-original-fix-was-overly-aggressive.patch
Normal file
215
Bug-707510-5-2-The-original-fix-was-overly-aggressive.patch
Normal file
@ -0,0 +1,215 @@
|
|||||||
|
From 638159c43dbb48425a187d244ec288d252d0ecf4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Chris Liddell <chris.liddell@artifex.com>
|
||||||
|
Date: Wed, 31 Jan 2024 14:08:18 +0000
|
||||||
|
Subject: [PATCH 6/7] Bug 707510(5)2: The original fix was overly aggressive
|
||||||
|
https://git.ghostscript.com/?p=ghostpdl.git;a=commit;h=638159c43dbb48425a187d244ec288d252d0ecf4
|
||||||
|
|
||||||
|
The way the default OCRLanguage value was set was for the relevant get_params
|
||||||
|
methods to check if the value had been set, and if not return a default value.
|
||||||
|
This could result in the first time the put_params seeing that value being after
|
||||||
|
path control has been enabled, meaning it would throw an invalidaccess error.
|
||||||
|
|
||||||
|
This changes how we set the default: they now uses an init_device method, so
|
||||||
|
the string is populated from the device's creation. This works correctly for
|
||||||
|
both the default value, and for values set on the command line.
|
||||||
|
---
|
||||||
|
devices/gdevocr.c | 17 ++++++++++++++++-
|
||||||
|
devices/gdevpdfocr.c | 28 ++++++++++++++++++++++------
|
||||||
|
devices/vector/gdevpdf.c | 15 +++++++++++++++
|
||||||
|
devices/vector/gdevpdfp.c | 3 ++-
|
||||||
|
4 files changed, 55 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/devices/gdevocr.c b/devices/gdevocr.c
|
||||||
|
index 7f2c6ea3b..b874525de 100644
|
||||||
|
--- a/devices/gdevocr.c
|
||||||
|
+++ b/devices/gdevocr.c
|
||||||
|
@@ -30,6 +30,7 @@
|
||||||
|
#define X_DPI 72
|
||||||
|
#define Y_DPI 72
|
||||||
|
|
||||||
|
+static dev_proc_initialize_device(ocr_initialize_device);
|
||||||
|
static dev_proc_print_page(ocr_print_page);
|
||||||
|
static dev_proc_print_page(hocr_print_page);
|
||||||
|
static dev_proc_get_params(ocr_get_params);
|
||||||
|
@@ -55,6 +56,7 @@ ocr_initialize_device_procs(gx_device *dev)
|
||||||
|
{
|
||||||
|
gdev_prn_initialize_device_procs_gray_bg(dev);
|
||||||
|
|
||||||
|
+ set_dev_proc(dev, initialize_device, ocr_initialize_device);
|
||||||
|
set_dev_proc(dev, open_device, ocr_open);
|
||||||
|
set_dev_proc(dev, close_device, ocr_close);
|
||||||
|
set_dev_proc(dev, get_params, ocr_get_params);
|
||||||
|
@@ -79,6 +81,7 @@ hocr_initialize_device_procs(gx_device *dev)
|
||||||
|
{
|
||||||
|
gdev_prn_initialize_device_procs_gray_bg(dev);
|
||||||
|
|
||||||
|
+ set_dev_proc(dev, initialize_device, ocr_initialize_device);
|
||||||
|
set_dev_proc(dev, open_device, ocr_open);
|
||||||
|
set_dev_proc(dev, close_device, hocr_close);
|
||||||
|
set_dev_proc(dev, get_params, ocr_get_params);
|
||||||
|
@@ -102,6 +105,17 @@ const gx_device_ocr gs_hocr_device =
|
||||||
|
#define HOCR_HEADER "<html>\n <body>\n"
|
||||||
|
#define HOCR_TRAILER " </body>\n</html>\n"
|
||||||
|
|
||||||
|
+static int
|
||||||
|
+ocr_initialize_device(gx_device *dev)
|
||||||
|
+{
|
||||||
|
+ gx_device_ocr *odev = (gx_device_ocr *)dev;
|
||||||
|
+ const char *default_ocr_lang = "eng";
|
||||||
|
+
|
||||||
|
+ odev->language[0] = '\0';
|
||||||
|
+ strcpy(odev->language, default_ocr_lang);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int
|
||||||
|
ocr_open(gx_device *pdev)
|
||||||
|
{
|
||||||
|
@@ -185,7 +199,8 @@ ocr_put_params(gx_device *dev, gs_param_list *plist)
|
||||||
|
|
||||||
|
switch (code = param_read_string(plist, (param_name = "OCRLanguage"), &langstr)) {
|
||||||
|
case 0:
|
||||||
|
- if (pdev->memory->gs_lib_ctx->core->path_control_active) {
|
||||||
|
+ if (pdev->memory->gs_lib_ctx->core->path_control_active
|
||||||
|
+ && (strlen(pdev->language) != langstr.size || memcmp(pdev->language, langstr.data, langstr.size) != 0)) {
|
||||||
|
return_error(gs_error_invalidaccess);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
diff --git a/devices/gdevpdfocr.c b/devices/gdevpdfocr.c
|
||||||
|
index 0d3c42d8b..f2bec1b49 100644
|
||||||
|
--- a/devices/gdevpdfocr.c
|
||||||
|
+++ b/devices/gdevpdfocr.c
|
||||||
|
@@ -33,9 +33,9 @@
|
||||||
|
#include "gdevpdfimg.h"
|
||||||
|
#include "tessocr.h"
|
||||||
|
|
||||||
|
-int pdf_ocr_open(gx_device *pdev);
|
||||||
|
-int pdf_ocr_close(gx_device *pdev);
|
||||||
|
-
|
||||||
|
+static dev_proc_initialize_device(pdf_ocr_initialize_device);
|
||||||
|
+static dev_proc_open_device(pdf_ocr_open);
|
||||||
|
+static dev_proc_close_device(pdf_ocr_close);
|
||||||
|
|
||||||
|
static int
|
||||||
|
pdfocr_put_some_params(gx_device * dev, gs_param_list * plist)
|
||||||
|
@@ -50,7 +50,8 @@ pdfocr_put_some_params(gx_device * dev, gs_param_list * plist)
|
||||||
|
|
||||||
|
switch (code = param_read_string(plist, (param_name = "OCRLanguage"), &langstr)) {
|
||||||
|
case 0:
|
||||||
|
- if (pdf_dev->memory->gs_lib_ctx->core->path_control_active) {
|
||||||
|
+ if (pdf_dev->memory->gs_lib_ctx->core->path_control_active
|
||||||
|
+ && (strlen(pdf_dev->ocr.language) != langstr.size || memcmp(pdf_dev->ocr.language, langstr.data, langstr.size) != 0)) {
|
||||||
|
return_error(gs_error_invalidaccess);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
@@ -152,6 +153,8 @@ pdfocr8_initialize_device_procs(gx_device *dev)
|
||||||
|
{
|
||||||
|
gdev_prn_initialize_device_procs_gray(dev);
|
||||||
|
|
||||||
|
+ set_dev_proc(dev, initialize_device, pdf_ocr_initialize_device);
|
||||||
|
+ set_dev_proc(dev, initialize_device, pdf_ocr_initialize_device);
|
||||||
|
set_dev_proc(dev, open_device, pdf_ocr_open);
|
||||||
|
set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
|
||||||
|
set_dev_proc(dev, close_device, pdf_ocr_close);
|
||||||
|
@@ -185,6 +188,7 @@ pdfocr24_initialize_device_procs(gx_device *dev)
|
||||||
|
{
|
||||||
|
gdev_prn_initialize_device_procs_rgb(dev);
|
||||||
|
|
||||||
|
+ set_dev_proc(dev, initialize_device, pdf_ocr_initialize_device);
|
||||||
|
set_dev_proc(dev, open_device, pdf_ocr_open);
|
||||||
|
set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
|
||||||
|
set_dev_proc(dev, close_device, pdf_ocr_close);
|
||||||
|
@@ -216,6 +220,7 @@ pdfocr32_initialize_device_procs(gx_device *dev)
|
||||||
|
{
|
||||||
|
gdev_prn_initialize_device_procs_cmyk8(dev);
|
||||||
|
|
||||||
|
+ set_dev_proc(dev, initialize_device, pdf_ocr_initialize_device);
|
||||||
|
set_dev_proc(dev, open_device, pdf_ocr_open);
|
||||||
|
set_dev_proc(dev, output_page, gdev_prn_output_page_seekable);
|
||||||
|
set_dev_proc(dev, close_device, pdf_ocr_close);
|
||||||
|
@@ -703,7 +708,18 @@ ocr_end_page(gx_device_pdf_image *dev)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-int
|
||||||
|
+static int
|
||||||
|
+pdf_ocr_initialize_device(gx_device *dev)
|
||||||
|
+{
|
||||||
|
+ gx_device_pdf_image *ppdev = (gx_device_pdf_image *)dev;
|
||||||
|
+ const char *default_ocr_lang = "eng";
|
||||||
|
+
|
||||||
|
+ ppdev->ocr.language[0] = '\0';
|
||||||
|
+ strcpy(ppdev->ocr.language, default_ocr_lang);
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static int
|
||||||
|
pdf_ocr_open(gx_device *pdev)
|
||||||
|
{
|
||||||
|
gx_device_pdf_image *ppdev;
|
||||||
|
@@ -726,7 +742,7 @@ pdf_ocr_open(gx_device *pdev)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-int
|
||||||
|
+static int
|
||||||
|
pdf_ocr_close(gx_device *pdev)
|
||||||
|
{
|
||||||
|
gx_device_pdf_image *pdf_dev;
|
||||||
|
diff --git a/devices/vector/gdevpdf.c b/devices/vector/gdevpdf.c
|
||||||
|
index 6e364d1c7..042e1b4e9 100644
|
||||||
|
--- a/devices/vector/gdevpdf.c
|
||||||
|
+++ b/devices/vector/gdevpdf.c
|
||||||
|
@@ -215,6 +215,7 @@ device_pdfwrite_finalize(const gs_memory_t *cmem, void *vpdev)
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Driver procedures */
|
||||||
|
+static dev_proc_initialize_device(pdfwrite_initialize_device);
|
||||||
|
static dev_proc_open_device(pdf_open);
|
||||||
|
static dev_proc_output_page(pdf_output_page);
|
||||||
|
static dev_proc_close_device(pdf_close);
|
||||||
|
@@ -232,6 +233,7 @@ static dev_proc_close_device(pdf_close);
|
||||||
|
static void
|
||||||
|
pdfwrite_initialize_device_procs(gx_device *dev)
|
||||||
|
{
|
||||||
|
+ set_dev_proc(dev, initialize_device, pdfwrite_initialize_device);
|
||||||
|
set_dev_proc(dev, open_device, pdf_open);
|
||||||
|
set_dev_proc(dev, get_initial_matrix, gx_upright_get_initial_matrix);
|
||||||
|
set_dev_proc(dev, output_page, pdf_output_page);
|
||||||
|
@@ -777,6 +779,19 @@ pdf_reset_text(gx_device_pdf * pdev)
|
||||||
|
pdf_reset_text_state(pdev->text);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static int
|
||||||
|
+pdfwrite_initialize_device(gx_device *dev)
|
||||||
|
+{
|
||||||
|
+#if OCR_VERSION > 0
|
||||||
|
+ gx_device_pdf *pdev = (gx_device_pdf *) dev;
|
||||||
|
+ const char *default_ocr_lang = "eng";
|
||||||
|
+ pdev->ocr_language[0] = '\0';
|
||||||
|
+ strcpy(pdev->ocr_language, default_ocr_lang);
|
||||||
|
+#endif
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
/* Open the device. */
|
||||||
|
static int
|
||||||
|
pdf_open(gx_device * dev)
|
||||||
|
diff --git a/devices/vector/gdevpdfp.c b/devices/vector/gdevpdfp.c
|
||||||
|
index 1f7106c0b..1fdfeaef3 100644
|
||||||
|
--- a/devices/vector/gdevpdfp.c
|
||||||
|
+++ b/devices/vector/gdevpdfp.c
|
||||||
|
@@ -472,7 +472,8 @@ gdev_pdf_put_params_impl(gx_device * dev, const gx_device_pdf * save_dev, gs_par
|
||||||
|
gs_param_string langstr;
|
||||||
|
switch (code = param_read_string(plist, (param_name = "OCRLanguage"), &langstr)) {
|
||||||
|
case 0:
|
||||||
|
- if (pdev->memory->gs_lib_ctx->core->path_control_active) {
|
||||||
|
+ if (pdev->memory->gs_lib_ctx->core->path_control_active
|
||||||
|
+ && (strlen(pdev->ocr_language) != langstr.size || memcmp(pdev->ocr_language, langstr.data, langstr.size) != 0)) {
|
||||||
|
return_error(gs_error_invalidaccess);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
||||||
@ -1,8 +1,9 @@
|
|||||||
From 3d4cfdc1a44b1969a0f14c86673a372654d443c4 Mon Sep 17 00:00:00 2001
|
From 3d4cfdc1a44b1969a0f14c86673a372654d443c4 Mon Sep 17 00:00:00 2001
|
||||||
From: Chris Liddell <chris.liddell@artifex.com>
|
From: Chris Liddell <chris.liddell@artifex.com>
|
||||||
Date: Wed, 24 Jan 2024 17:06:01 +0000
|
Date: Wed, 24 Jan 2024 17:06:01 +0000
|
||||||
Subject: [PATCH 5/6] Bug 707510(5): Reject OCRLanguage changes after SAFER
|
Subject: [PATCH 5/7] Bug 707510(5): Reject OCRLanguage changes after SAFER
|
||||||
enabled
|
enabled
|
||||||
|
https://git.ghostscript.com/?p=ghostpdl.git;a=commitdiff;h=3d4cfdc1a44
|
||||||
|
|
||||||
In the devices that support OCR, OCRLanguage really ought never to be set from
|
In the devices that support OCR, OCRLanguage really ought never to be set from
|
||||||
PostScript, so reject attempts to change it if path_control_active is true.
|
PostScript, so reject attempts to change it if path_control_active is true.
|
||||||
|
|||||||
@ -1,8 +1,9 @@
|
|||||||
From 77dc7f699beba606937b7ea23b50cf5974fa64b1 Mon Sep 17 00:00:00 2001
|
From 77dc7f699beba606937b7ea23b50cf5974fa64b1 Mon Sep 17 00:00:00 2001
|
||||||
From: Ken Sharp <Ken.Sharp@artifex.com>
|
From: Ken Sharp <Ken.Sharp@artifex.com>
|
||||||
Date: Thu, 25 Jan 2024 11:55:49 +0000
|
Date: Thu, 25 Jan 2024 11:55:49 +0000
|
||||||
Subject: [PATCH 2/6] Bug 707510 - don't allow PDF files with bad Filters to
|
Subject: [PATCH 2/7] Bug 707510 - don't allow PDF files with bad Filters to
|
||||||
overflow the debug buffer
|
overflow the debug buffer
|
||||||
|
http://www.ghostscript.com/cgi-bin/findgit.cgi?77dc7f699beba606937b7ea23b50cf5974fa64b1
|
||||||
|
|
||||||
Item #2 of the report.
|
Item #2 of the report.
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
From 917b3a71fb20748965254631199ad98210d6c2fb Mon Sep 17 00:00:00 2001
|
From 917b3a71fb20748965254631199ad98210d6c2fb Mon Sep 17 00:00:00 2001
|
||||||
From: Ken Sharp <Ken.Sharp@artifex.com>
|
From: Ken Sharp <Ken.Sharp@artifex.com>
|
||||||
Date: Thu, 25 Jan 2024 11:58:22 +0000
|
Date: Thu, 25 Jan 2024 11:58:22 +0000
|
||||||
Subject: [PATCH 1/6] Bug 707510 - don't use strlen on passwords
|
Subject: [PATCH 1/7] Bug 707510 - don't use strlen on passwords
|
||||||
|
http://www.ghostscript.com/cgi-bin/findgit.cgi?917b3a71fb20748965254631199ad98210d6c2fb
|
||||||
|
|
||||||
Item #1 of the report. This looks like an oversight when first coding
|
Item #1 of the report. This looks like an oversight when first coding
|
||||||
the routine. We should use the PostScript string length, because
|
the routine. We should use the PostScript string length, because
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
From d99396635f3d6ac6a1168e1af21a669e5c8f695f Mon Sep 17 00:00:00 2001
|
From d99396635f3d6ac6a1168e1af21a669e5c8f695f Mon Sep 17 00:00:00 2001
|
||||||
From: Ken Sharp <Ken.Sharp@artifex.com>
|
From: Ken Sharp <Ken.Sharp@artifex.com>
|
||||||
Date: Thu, 25 Jan 2024 12:16:56 +0000
|
Date: Thu, 25 Jan 2024 12:16:56 +0000
|
||||||
Subject: [PATCH 6/6] Bug 707510 - fix LIBIDN usage
|
Subject: [PATCH 7/7] Bug 707510 - fix LIBIDN usage
|
||||||
|
http://www.ghostscript.com/cgi-bin/findgit.cgi?d99396635f3d6ac6a1168e1af21a669e5c8f695f
|
||||||
|
|
||||||
This wasn't a reported fault, but it bears fixing anyway.
|
This wasn't a reported fault, but it bears fixing anyway.
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,8 @@
|
|||||||
From ff1013a0ab485b66783b70145e342a82c670906a Mon Sep 17 00:00:00 2001
|
From ff1013a0ab485b66783b70145e342a82c670906a Mon Sep 17 00:00:00 2001
|
||||||
From: Ken Sharp <Ken.Sharp@artifex.com>
|
From: Ken Sharp <Ken.Sharp@artifex.com>
|
||||||
Date: Thu, 25 Jan 2024 11:53:44 +0000
|
Date: Thu, 25 Jan 2024 11:53:44 +0000
|
||||||
Subject: [PATCH 4/6] Bug 707510 - review printing of pointers
|
Subject: [PATCH 4/7] Bug 707510 - review printing of pointers
|
||||||
|
http://www.ghostscript.com/cgi-bin/findgit.cgi?ff1013a0ab485b66783b70145e342a82c670906a
|
||||||
|
|
||||||
This is for item 4 of the report, which is addressed by the change in
|
This is for item 4 of the report, which is addressed by the change in
|
||||||
gdevpdtb.c. That change uses a fixed name for fonts which have no name
|
gdevpdtb.c. That change uses a fixed name for fonts which have no name
|
||||||
|
|||||||
31
backport-CVE-2024-46951.patch
Normal file
31
backport-CVE-2024-46951.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
From ada21374f0c90cc3acf7ce0e96302394560c7aee Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Hutyra <zhutyra@centrum.cz>
|
||||||
|
Date: Fri, 30 Aug 2024 13:16:39 +0100
|
||||||
|
Subject: [PATCH] PS interpreter - check the type of the Pattern Implementation
|
||||||
|
|
||||||
|
Bug #707991
|
||||||
|
|
||||||
|
See bug report for details.
|
||||||
|
|
||||||
|
CVE-2024-46951
|
||||||
|
---
|
||||||
|
psi/zcolor.c | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/psi/zcolor.c b/psi/zcolor.c
|
||||||
|
index d4e7a4438..d3384d75d 100644
|
||||||
|
--- a/psi/zcolor.c
|
||||||
|
+++ b/psi/zcolor.c
|
||||||
|
@@ -5276,6 +5276,9 @@ static int patterncomponent(i_ctx_t * i_ctx_p, ref *space, int *n)
|
||||||
|
code = array_get(imemory, pImpl, 0, &pPatInst);
|
||||||
|
if (code < 0)
|
||||||
|
return code;
|
||||||
|
+
|
||||||
|
+ if (!r_is_struct(&pPatInst) || (!r_has_stype(&pPatInst, imemory, st_pattern1_instance) && !r_has_stype(&pPatInst, imemory, st_pattern2_instance)))
|
||||||
|
+ return_error(gs_error_typecheck);
|
||||||
|
cc.pattern = r_ptr(&pPatInst, gs_pattern_instance_t);
|
||||||
|
if (pattern_instance_uses_base_space(cc.pattern))
|
||||||
|
*n = n_comps;
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
|
|
||||||
61
backport-CVE-2024-46952.patch
Normal file
61
backport-CVE-2024-46952.patch
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
From 1fb76aaddac34530242dfbb9579d9997dae41264 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ken Sharp <Ken.Sharp@artifex.com>
|
||||||
|
Date: Mon, 2 Sep 2024 15:14:01 +0100
|
||||||
|
Subject: [PATCH] PDF interpreter - sanitise W array values in Xref streams
|
||||||
|
|
||||||
|
Bug #708001 "Buffer overflow in PDF XRef stream"
|
||||||
|
|
||||||
|
See bug report. I've chosen to fix this by checking the values in the
|
||||||
|
W array; these can (currently at least) only have certain relatively
|
||||||
|
small values.
|
||||||
|
|
||||||
|
As a future proofing fix I've also updated field_size in
|
||||||
|
pdf_xref_stream_entries() to be a 64-bit integer. This is far bigger
|
||||||
|
than required, but matches the W array values and so prevents the
|
||||||
|
mismatch which could lead to a buffer overrun.
|
||||||
|
|
||||||
|
CVE-2024-46952
|
||||||
|
---
|
||||||
|
pdf/pdf_xref.c | 20 +++++++++++++++++++-
|
||||||
|
1 file changed, 19 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/pdf/pdf_xref.c b/pdf/pdf_xref.c
|
||||||
|
index 7e61113..ad45852 100644
|
||||||
|
--- a/pdf/pdf_xref.c
|
||||||
|
+++ b/pdf/pdf_xref.c
|
||||||
|
@@ -53,7 +53,7 @@ static int resize_xref(pdf_context *ctx, uint64_t new_size)
|
||||||
|
static int read_xref_stream_entries(pdf_context *ctx, pdf_c_stream *s, uint64_t first, uint64_t last, uint64_t *W)
|
||||||
|
{
|
||||||
|
uint i, j;
|
||||||
|
- uint field_width = 0;
|
||||||
|
+ uint64_t field_width = 0;
|
||||||
|
uint32_t type = 0;
|
||||||
|
uint64_t objnum = 0, gen = 0;
|
||||||
|
byte *Buffer;
|
||||||
|
@@ -297,6 +297,24 @@ static int pdfi_process_xref_stream(pdf_context *ctx, pdf_stream *stream_obj, pd
|
||||||
|
}
|
||||||
|
pdfi_countdown(a);
|
||||||
|
|
||||||
|
+ /* W[0] is either:
|
||||||
|
+ * 0 (no type field) or a single byte with the type.
|
||||||
|
+ * W[1] is either:
|
||||||
|
+ * The object number of the next free object, the byte offset of this object in the file or the object5 number of the object stream where this object is stored.
|
||||||
|
+ * W[2] is either:
|
||||||
|
+ * The generation number to use if this object is used again, the generation number of the object or the index of this object within the object stream.
|
||||||
|
+ *
|
||||||
|
+ * Object and generation numbers are limited to unsigned 64-bit values, as are bytes offsets in the file, indexes of objects within the stream likewise (actually
|
||||||
|
+ * most of these are generally 32-bit max). So we can limit the field widths to 8 bytes, enough to hold a 64-bit number.
|
||||||
|
+ * Even if a later version of the spec makes these larger (which seems unlikely!) we still cna't cope with integers > 64-bits.
|
||||||
|
+ */
|
||||||
|
+ if (W[0] > 1 || W[1] > 8 || W[2] > 8) {
|
||||||
|
+ pdfi_close_file(ctx, XRefStrm);
|
||||||
|
+ pdfi_countdown(ctx->xref_table);
|
||||||
|
+ ctx->xref_table = NULL;
|
||||||
|
+ return code;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
code = pdfi_dict_get_type(ctx, sdict, "Index", PDF_ARRAY, (pdf_obj **)&a);
|
||||||
|
if (code == gs_error_undefined) {
|
||||||
|
code = read_xref_stream_entries(ctx, XRefStrm, 0, size - 1, (uint64_t *)W);
|
||||||
|
--
|
||||||
|
2.43.0
|
||||||
66
backport-CVE-2024-46953.patch
Normal file
66
backport-CVE-2024-46953.patch
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
From 294a3755e33f453dd92e2a7c4cfceb087ac09d6a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Hutyra <zhutyra@centrum.cz>
|
||||||
|
Date: Mon, 27 May 2024 13:38:36 +0100
|
||||||
|
Subject: [PATCH] Bug 707793: Check for overflow validating format string
|
||||||
|
|
||||||
|
for the output file name
|
||||||
|
|
||||||
|
CVE-2024-46953
|
||||||
|
---
|
||||||
|
base/gsdevice.c | 17 +++++++++++++----
|
||||||
|
1 file changed, 13 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/base/gsdevice.c b/base/gsdevice.c
|
||||||
|
index 90e699ab4..c1eaedd85 100644
|
||||||
|
--- a/base/gsdevice.c
|
||||||
|
+++ b/base/gsdevice.c
|
||||||
|
@@ -1070,7 +1070,7 @@ static int
|
||||||
|
gx_parse_output_format(gs_parsed_file_name_t *pfn, const char **pfmt)
|
||||||
|
{
|
||||||
|
bool have_format = false, field;
|
||||||
|
- int width[2], int_width = sizeof(int) * 3, w = 0;
|
||||||
|
+ uint width[2], int_width = sizeof(int) * 3, w = 0;
|
||||||
|
uint i;
|
||||||
|
|
||||||
|
/* Scan the file name for a format string, and validate it if present. */
|
||||||
|
@@ -1099,6 +1099,8 @@ gx_parse_output_format(gs_parsed_file_name_t *pfn, const char **pfmt)
|
||||||
|
default: /* width (field = 0) and precision (field = 1) */
|
||||||
|
if (strchr("0123456789", pfn->fname[i])) {
|
||||||
|
width[field] = width[field] * 10 + pfn->fname[i] - '0';
|
||||||
|
+ if (width[field] > max_int)
|
||||||
|
+ return_error(gs_error_undefinedfilename);
|
||||||
|
continue;
|
||||||
|
} else if (0 == field && '.' == pfn->fname[i]) {
|
||||||
|
field++;
|
||||||
|
@@ -1127,8 +1129,10 @@ gx_parse_output_format(gs_parsed_file_name_t *pfn, const char **pfmt)
|
||||||
|
/* Calculate a conservative maximum width. */
|
||||||
|
w = max(width[0], width[1]);
|
||||||
|
w = max(w, int_width) + 5;
|
||||||
|
+ if (w > max_int)
|
||||||
|
+ return_error(gs_error_undefinedfilename);
|
||||||
|
}
|
||||||
|
- return w;
|
||||||
|
+ return (int)w;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -1181,10 +1185,15 @@ gx_parse_output_file_name(gs_parsed_file_name_t *pfn, const char **pfmt,
|
||||||
|
if (!pfn->fname)
|
||||||
|
return 0;
|
||||||
|
code = gx_parse_output_format(pfn, pfmt);
|
||||||
|
- if (code < 0)
|
||||||
|
+ if (code < 0) {
|
||||||
|
return code;
|
||||||
|
- if (strlen(pfn->iodev->dname) + pfn->len + code >= gp_file_name_sizeof)
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (pfn->len >= gp_file_name_sizeof - strlen(pfn->iodev->dname) ||
|
||||||
|
+ code >= gp_file_name_sizeof - strlen(pfn->iodev->dname) - pfn->len) {
|
||||||
|
return_error(gs_error_undefinedfilename);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.34.1
|
||||||
60
backport-CVE-2024-46955.patch
Normal file
60
backport-CVE-2024-46955.patch
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
From ca1fc2aefe9796e321d0589afe7efb35063c8b2a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Hutyra <zhutyra@centrum.cz>
|
||||||
|
Date: Fri, 30 Aug 2024 13:11:53 +0100
|
||||||
|
Subject: [PATCH] PS interpreter - check Indexed colour space index
|
||||||
|
|
||||||
|
Bug #707990 "Out of bounds read when reading color in "Indexed" color space"
|
||||||
|
|
||||||
|
Check the 'index' is in the valid range (0 to hival) for the colour
|
||||||
|
space.
|
||||||
|
|
||||||
|
Also a couple of additional checks on the type of the 'proc' for
|
||||||
|
Indexed, DeviceN and Separation spaces. Make sure these really are
|
||||||
|
procs in case the user changed the colour space array.
|
||||||
|
|
||||||
|
CVE-2024-46955
|
||||||
|
---
|
||||||
|
psi/zcolor.c | 6 ++++++
|
||||||
|
1 file changed, 6 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/psi/zcolor.c b/psi/zcolor.c
|
||||||
|
index c0d73c2..7d15ec7 100644
|
||||||
|
--- a/psi/zcolor.c
|
||||||
|
+++ b/psi/zcolor.c
|
||||||
|
@@ -3629,6 +3629,7 @@ static int septransform(i_ctx_t *i_ctx_p, ref *sepspace, int *usealternate, int
|
||||||
|
code = array_get(imemory, sepspace, 3, &proc);
|
||||||
|
if (code < 0)
|
||||||
|
return code;
|
||||||
|
+ check_proc(proc);
|
||||||
|
*esp = proc;
|
||||||
|
return o_push_estack;
|
||||||
|
}
|
||||||
|
@@ -4450,6 +4451,7 @@ static int devicentransform(i_ctx_t *i_ctx_p, ref *devicenspace, int *usealterna
|
||||||
|
code = array_get(imemory, devicenspace, 3, &proc);
|
||||||
|
if (code < 0)
|
||||||
|
return code;
|
||||||
|
+ check_proc(proc);
|
||||||
|
*esp = proc;
|
||||||
|
return o_push_estack;
|
||||||
|
}
|
||||||
|
@@ -4865,6 +4867,7 @@ static int indexedbasecolor(i_ctx_t * i_ctx_p, ref *space, int base, int *stage,
|
||||||
|
code = array_get(imemory, space, 3, &proc);
|
||||||
|
if (code < 0)
|
||||||
|
return code;
|
||||||
|
+ check_proc(proc);
|
||||||
|
*ep = proc; /* lookup proc */
|
||||||
|
return o_push_estack;
|
||||||
|
} else {
|
||||||
|
@@ -4878,6 +4881,9 @@ static int indexedbasecolor(i_ctx_t * i_ctx_p, ref *space, int base, int *stage,
|
||||||
|
if (!r_has_type(op, t_integer))
|
||||||
|
return_error (gs_error_typecheck);
|
||||||
|
index = op->value.intval;
|
||||||
|
+ /* Ensure it is in range. See bug #707990 */
|
||||||
|
+ if (index < 0 || index > pcs->params.indexed.hival)
|
||||||
|
+ return_error(gs_error_rangecheck);
|
||||||
|
/* And remove it from the stack. */
|
||||||
|
ref_stack_pop(&o_stack, 1);
|
||||||
|
op = osp;
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
30
backport-CVE-2024-46956.patch
Normal file
30
backport-CVE-2024-46956.patch
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
From ea69a1388245ad959d31c272b5ba66d40cebba2c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Zdenek Hutyra <zhutyra@centrum.cz>
|
||||||
|
Date: Tue, 23 Jul 2024 11:48:39 +0100
|
||||||
|
Subject: [PATCH] PostScript interpreter - fix buffer length check
|
||||||
|
|
||||||
|
Bug 707895
|
||||||
|
|
||||||
|
See bug report for details.
|
||||||
|
|
||||||
|
CVE-2024-46956
|
||||||
|
---
|
||||||
|
psi/zfile.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/psi/zfile.c b/psi/zfile.c
|
||||||
|
index fe3f7e9..027f412 100644
|
||||||
|
--- a/psi/zfile.c
|
||||||
|
+++ b/psi/zfile.c
|
||||||
|
@@ -440,7 +440,7 @@ file_continue(i_ctx_t *i_ctx_p)
|
||||||
|
if (code == ~(uint) 0) { /* all done */
|
||||||
|
esp -= 5; /* pop proc, pfen, devlen, iodev , mark */
|
||||||
|
return o_pop_estack;
|
||||||
|
- } else if (code > len) { /* overran string */
|
||||||
|
+ } else if (code > len - devlen) { /* overran string */
|
||||||
|
return_error(gs_error_rangecheck);
|
||||||
|
}
|
||||||
|
else if (iodev != iodev_default(imemory)
|
||||||
|
--
|
||||||
|
2.27.0
|
||||||
|
|
||||||
@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
Name: ghostscript
|
Name: ghostscript
|
||||||
Version: 9.56.1
|
Version: 9.56.1
|
||||||
Release: 7
|
Release: 13
|
||||||
Summary: An interpreter for PostScript and PDF files
|
Summary: An interpreter for PostScript and PDF files
|
||||||
License: AGPLv3+
|
License: AGPLv3+
|
||||||
URL: https://ghostscript.com/
|
URL: https://ghostscript.com/
|
||||||
@ -47,16 +47,28 @@ Patch108: fix-CVE-2024-33870.patch
|
|||||||
Patch109: fix-CVE-2024-33871.patch
|
Patch109: fix-CVE-2024-33871.patch
|
||||||
# https://bugs.ghostscript.com/show_bug.cgi?id=707510
|
# https://bugs.ghostscript.com/show_bug.cgi?id=707510
|
||||||
# CVE-2024-29506 CVE-2024-29507 CVE-2024-29508 CVE-2024-29509 CVE-2024-29511
|
# CVE-2024-29506 CVE-2024-29507 CVE-2024-29508 CVE-2024-29509 CVE-2024-29511
|
||||||
|
# CVE-2024-29509
|
||||||
Patch110: Bug-707510-don-t-use-strlen-on-passwords.patch
|
Patch110: Bug-707510-don-t-use-strlen-on-passwords.patch
|
||||||
|
# CVE-2024-29506
|
||||||
Patch111: Bug-707510-don-t-allow-PDF-files-with-bad-Filters-to.patch
|
Patch111: Bug-707510-don-t-allow-PDF-files-with-bad-Filters-to.patch
|
||||||
|
# CVE-2024-29507
|
||||||
Patch112: Bug-707510-3-Bounds-checks-when-using-CIDFont-relate.patch
|
Patch112: Bug-707510-3-Bounds-checks-when-using-CIDFont-relate.patch
|
||||||
|
# CVE-2024-29508
|
||||||
Patch113: Bug-707510-review-printing-of-pointers.patch
|
Patch113: Bug-707510-review-printing-of-pointers.patch
|
||||||
|
# CVE-2024-29511
|
||||||
Patch114: Bug-707510-5-Reject-OCRLanguage-changes-after-SAFER-.patch
|
Patch114: Bug-707510-5-Reject-OCRLanguage-changes-after-SAFER-.patch
|
||||||
Patch115: Bug-707510-fix-LIBIDN-usage.patch
|
Patch115: Bug-707510-5-2-The-original-fix-was-overly-aggressive.patch
|
||||||
|
|
||||||
|
Patch116: Bug-707510-fix-LIBIDN-usage.patch
|
||||||
|
|
||||||
# See bug thread for details
|
# See bug thread for details
|
||||||
#This is the second part of the fix for CVE-2024-33869
|
#This is the second part of the fix for CVE-2024-33869
|
||||||
Patch116: fix-CVE-2024-33869-second.patch
|
Patch117: fix-CVE-2024-33869-second.patch
|
||||||
|
Patch118: backport-CVE-2024-46953.patch
|
||||||
|
Patch119: backport-CVE-2024-46956.patch
|
||||||
|
Patch120: backport-CVE-2024-46951.patch
|
||||||
|
Patch121: backport-CVE-2024-46952.patch
|
||||||
|
Patch122: backport-CVE-2024-46955.patch
|
||||||
|
|
||||||
BuildRequires: automake gcc
|
BuildRequires: automake gcc
|
||||||
BuildRequires: adobe-mappings-cmap-devel adobe-mappings-pdf-devel
|
BuildRequires: adobe-mappings-cmap-devel adobe-mappings-pdf-devel
|
||||||
@ -141,7 +153,12 @@ PDF files using Ghostscript and dvips
|
|||||||
%patch114 -p1
|
%patch114 -p1
|
||||||
%patch115 -p1
|
%patch115 -p1
|
||||||
%patch116 -p1
|
%patch116 -p1
|
||||||
|
%patch117 -p1
|
||||||
|
%patch118 -p1
|
||||||
|
%patch119 -p1
|
||||||
|
%patch120 -p1
|
||||||
|
%patch121 -p1
|
||||||
|
%patch122 -p1
|
||||||
|
|
||||||
# Libraries that we already have packaged(see Build Requirements):
|
# Libraries that we already have packaged(see Build Requirements):
|
||||||
rm -rf cups/libs freetype ijs jbig2dec jpeg lcms2* libpng openjpeg tiff zlib
|
rm -rf cups/libs freetype ijs jbig2dec jpeg lcms2* libpng openjpeg tiff zlib
|
||||||
@ -235,6 +252,42 @@ install -m 0755 -d %{buildroot}%{_datadir}/%{name}/conf.d/
|
|||||||
%{_bindir}/dvipdf
|
%{_bindir}/dvipdf
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Nov 08 2024 liningjie <liningjie@xfusion.com> - 9.56.1-13
|
||||||
|
- Type:CVE
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DECS: Fix CVE-2024-46955
|
||||||
|
|
||||||
|
* Tue Nov 05 2024 liningjie <liningjie@xfusion.com> - 9.56.1-12
|
||||||
|
- Type:CVE
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DECS: Fix CVE-2024-46952
|
||||||
|
|
||||||
|
* Fri Nov 01 2024 liningjie <liningjie@xfusion.com> - 9.56.1-11
|
||||||
|
- Type:CVE
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DECS: Fix CVE-2024-46951
|
||||||
|
|
||||||
|
* Fri Oct 25 2024 liningjie <liningjie@xfusion.com> - 9.56.1-10
|
||||||
|
- Type:CVE
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DECS: Fix CVE-2024-46956
|
||||||
|
|
||||||
|
* Fri Oct 25 2024 liningjie <liningjie@xfusion.com> - 9.56.1-9
|
||||||
|
- Type:CVE
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DECS: Fix CVE-2024-46953
|
||||||
|
|
||||||
|
* Fri Jul 12 2024 zhangxianting <zhangxianting@uniontech.com> - 9.56.1-8
|
||||||
|
- Type:CVE
|
||||||
|
- ID:NA
|
||||||
|
- SUG:NA
|
||||||
|
- DECS: This is the second part of the fix for CVE-2024-29511
|
||||||
|
|
||||||
* Fri Jul 12 2024 zhangxingrong-<zhangxingrong@uniontech.cn> - 9.56.1-7
|
* Fri Jul 12 2024 zhangxingrong-<zhangxingrong@uniontech.cn> - 9.56.1-7
|
||||||
- Type:CVE
|
- Type:CVE
|
||||||
- ID:NA
|
- ID:NA
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user