2240389 - libppd-2.0.0 is available
This commit is contained in:
parent
719bc77110
commit
a20bae3fcb
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@
|
|||||||
/libppd-2.0b4.tar.gz
|
/libppd-2.0b4.tar.gz
|
||||||
/libppd-2.0rc1.tar.gz
|
/libppd-2.0rc1.tar.gz
|
||||||
/libppd-2.0rc2.tar.gz
|
/libppd-2.0rc2.tar.gz
|
||||||
|
/libppd-2.0.0.tar.gz
|
||||||
|
|||||||
@ -1,149 +0,0 @@
|
|||||||
From 30b35cc751bc312a1f82db849b1c80dbd8d32aa4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Till Kamppeter <till.kamppeter@gmail.com>
|
|
||||||
Date: Sat, 5 Aug 2023 19:15:16 +0200
|
|
||||||
Subject: [PATCH] Decode "JCLToPDFInterpreter" value in ppdEmitJCLPDF()
|
|
||||||
|
|
||||||
In ppdEmitJCLPDF() the "JCLToPDFInterpreter" value from the PPD file
|
|
||||||
is read out without decoding, producing broken PJL before the PDF
|
|
||||||
print data output for "classic" (non-driverless) PDF printing.
|
|
||||||
|
|
||||||
Also promoted the static function "ppd_decode()" of ppd/ppd.c into
|
|
||||||
the API function "ppdDecode()".
|
|
||||||
|
|
||||||
Fixes #24.
|
|
||||||
---
|
|
||||||
ppd/ppd-emit.c | 5 ++++-
|
|
||||||
ppd/ppd.c | 23 +++++++++++------------
|
|
||||||
ppd/ppd.h | 1 +
|
|
||||||
3 files changed, 16 insertions(+), 13 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/ppd/ppd-emit.c b/ppd/ppd-emit.c
|
|
||||||
index a3ea6f12..72c42861 100644
|
|
||||||
--- a/ppd/ppd-emit.c
|
|
||||||
+++ b/ppd/ppd-emit.c
|
|
||||||
@@ -386,7 +386,7 @@ ppdEmitJCLPDF(ppd_file_t *ppd, // I - PPD file record
|
|
||||||
// collate?
|
|
||||||
{
|
|
||||||
ppd_attr_t *attr; // PPD attribute
|
|
||||||
- const char *jcl_pdf = NULL;
|
|
||||||
+ char *jcl_pdf = NULL;
|
|
||||||
char *ptr; // Pointer into JCL string
|
|
||||||
char temp[65], // Local title string
|
|
||||||
displaymsg[33]; // Local display string
|
|
||||||
@@ -403,7 +403,10 @@ ppdEmitJCLPDF(ppd_file_t *ppd, // I - PPD file record
|
|
||||||
jcl_pdf = ppd->jcl_pdf;
|
|
||||||
#else
|
|
||||||
if ((attr = ppdFindAttr(ppd, "JCLToPDFInterpreter", NULL)) != NULL)
|
|
||||||
+ {
|
|
||||||
jcl_pdf = attr->value;
|
|
||||||
+ ppdDecode(jcl_pdf); // Decode quoted string
|
|
||||||
+ }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if ((!ppd->jcl_ps && hw_copies < 0) ||
|
|
||||||
diff --git a/ppd/ppd.c b/ppd/ppd.c
|
|
||||||
index 4354efc7..a8c47810 100644
|
|
||||||
--- a/ppd/ppd.c
|
|
||||||
+++ b/ppd/ppd.c
|
|
||||||
@@ -70,7 +70,6 @@ static int ppd_compare_choices(ppd_choice_t *a, ppd_choice_t *b);
|
|
||||||
static int ppd_compare_coptions(ppd_coption_t *a,
|
|
||||||
ppd_coption_t *b);
|
|
||||||
static int ppd_compare_options(ppd_option_t *a, ppd_option_t *b);
|
|
||||||
-static int ppd_decode(char *string);
|
|
||||||
static void ppd_free_filters(ppd_file_t *ppd);
|
|
||||||
static void ppd_free_group(ppd_group_t *group);
|
|
||||||
static void ppd_free_option(ppd_option_t *option);
|
|
||||||
@@ -872,23 +871,23 @@ ppdOpenWithLocalization(
|
|
||||||
else if (!strcmp(keyword, "JCLBegin"))
|
|
||||||
{
|
|
||||||
ppd->jcl_begin = strdup(string);
|
|
||||||
- ppd_decode(ppd->jcl_begin); // Decode quoted string
|
|
||||||
+ ppdDecode(ppd->jcl_begin); // Decode quoted string
|
|
||||||
}
|
|
||||||
else if (!strcmp(keyword, "JCLEnd"))
|
|
||||||
{
|
|
||||||
ppd->jcl_end = strdup(string);
|
|
||||||
- ppd_decode(ppd->jcl_end); // Decode quoted string
|
|
||||||
+ ppdDecode(ppd->jcl_end); // Decode quoted string
|
|
||||||
}
|
|
||||||
else if (!strcmp(keyword, "JCLToPSInterpreter"))
|
|
||||||
{
|
|
||||||
ppd->jcl_ps = strdup(string);
|
|
||||||
- ppd_decode(ppd->jcl_ps); // Decode quoted string
|
|
||||||
+ ppdDecode(ppd->jcl_ps); // Decode quoted string
|
|
||||||
}
|
|
||||||
#if HAVE_CUPS_3_X
|
|
||||||
else if (!strcmp(keyword, "JCLToPDFInterpreter"))
|
|
||||||
{
|
|
||||||
ppd->jcl_pdf = strdup(string);
|
|
||||||
- ppd_decode(ppd->jcl_pdf); // Decode quoted string
|
|
||||||
+ ppdDecode(ppd->jcl_pdf); // Decode quoted string
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
else if (!strcmp(keyword, "AccurateScreensSupport"))
|
|
||||||
@@ -1164,7 +1163,7 @@ ppdOpenWithLocalization(
|
|
||||||
choice->code = strdup(string);
|
|
||||||
|
|
||||||
if (custom_option->section == PPD_ORDER_JCL)
|
|
||||||
- ppd_decode(choice->code);
|
|
||||||
+ ppdDecode(choice->code);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
@@ -1628,7 +1627,7 @@ ppdOpenWithLocalization(
|
|
||||||
// Fix up the text...
|
|
||||||
//
|
|
||||||
|
|
||||||
- ppd_decode(sptr);
|
|
||||||
+ ppdDecode(sptr);
|
|
||||||
|
|
||||||
//
|
|
||||||
// Find/add the group...
|
|
||||||
@@ -2079,7 +2078,7 @@ ppdOpenWithLocalization(
|
|
||||||
strlcpy(choice->text, name, sizeof(choice->text));
|
|
||||||
|
|
||||||
if (option->section == PPD_ORDER_JCL)
|
|
||||||
- ppd_decode(string); // Decode quoted string
|
|
||||||
+ ppdDecode(string); // Decode quoted string
|
|
||||||
|
|
||||||
choice->code = string;
|
|
||||||
string = NULL; // Don't add as an attribute below
|
|
||||||
@@ -2583,11 +2582,11 @@ ppd_compare_options(ppd_option_t *a, // I - First option
|
|
||||||
|
|
||||||
|
|
||||||
//
|
|
||||||
-// 'ppd_decode()' - Decode a string value...
|
|
||||||
+// 'ppdDecode()' - Decode a string value with hex-encoded characters
|
|
||||||
//
|
|
||||||
|
|
||||||
-static int // O - Length of decoded string
|
|
||||||
-ppd_decode(char *string) // I - String to decode
|
|
||||||
+int // O - Length of decoded string
|
|
||||||
+ppdDecode(char *string) // I - String to decode
|
|
||||||
{
|
|
||||||
char *inptr, // Input pointer
|
|
||||||
*outptr; // Output pointer
|
|
||||||
@@ -3415,7 +3414,7 @@ ppd_read(cups_file_t *fp, // I - File to read from
|
|
||||||
}
|
|
||||||
|
|
||||||
*textptr = '\0';
|
|
||||||
- textlen = ppd_decode(text);
|
|
||||||
+ textlen = ppdDecode(text);
|
|
||||||
|
|
||||||
if (textlen > PPD_MAX_TEXT && pg->ppd_conform == PPD_CONFORM_STRICT)
|
|
||||||
{
|
|
||||||
diff --git a/ppd/ppd.h b/ppd/ppd.h
|
|
||||||
index 64933091..85a0d317 100644
|
|
||||||
--- a/ppd/ppd.h
|
|
||||||
+++ b/ppd/ppd.h
|
|
||||||
@@ -721,6 +721,7 @@ extern int ppdResolveConflicts(ppd_file_t *ppd,
|
|
||||||
cups_option_t **options);
|
|
||||||
|
|
||||||
// **** New in libppd 2.0.0: Formerly CUPS-private functions ****
|
|
||||||
+extern int ppdDecode(char *string);
|
|
||||||
extern int ppdConvertOptions(ipp_t *request,
|
|
||||||
ppd_file_t *ppd,
|
|
||||||
ppd_cache_t *pc,
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
||||||
@ -1,37 +0,0 @@
|
|||||||
From 62d43bb80f8ce5eeae0c71d081532a0be9ff2983 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Dohnal <zdohnal@redhat.com>
|
|
||||||
Date: Fri, 26 May 2023 14:05:00 +0200
|
|
||||||
Subject: [PATCH] ppd/ppd-ipp.c: Use make when constructing printer-make-model
|
|
||||||
attr
|
|
||||||
|
|
||||||
We used only PPD Nickname which does not contain manufacturer in some
|
|
||||||
drivers (like Utax) when constructing printer-make-and-model IPP
|
|
||||||
attribute, and then used the attribute when matching with strings
|
|
||||||
representing manufacturers in filter functions.
|
|
||||||
|
|
||||||
This caused internal hacks for specific printer manufacturers weren't
|
|
||||||
applied, causing breakage during printing.
|
|
||||||
---
|
|
||||||
ppd/ppd-ipp.c | 5 ++++-
|
|
||||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/ppd/ppd-ipp.c b/ppd/ppd-ipp.c
|
|
||||||
index 59556242..374e8a8e 100644
|
|
||||||
--- a/ppd/ppd-ipp.c
|
|
||||||
+++ b/ppd/ppd-ipp.c
|
|
||||||
@@ -1381,8 +1381,11 @@ ppdLoadAttributes(
|
|
||||||
}
|
|
||||||
|
|
||||||
// printer-make-andXS-model
|
|
||||||
+ char make_model[128]; // Manufacturer and Model value
|
|
||||||
+
|
|
||||||
+ snprintf(make_model, sizeof(make_model), "%s %s", ppd->manufacturer, ppd->nickname);
|
|
||||||
ippAddString(attrs, IPP_TAG_PRINTER, IPP_TAG_TEXT, "printer-make-and-model",
|
|
||||||
- NULL, ppd->nickname);
|
|
||||||
+ NULL, make_model);
|
|
||||||
|
|
||||||
// printer-resolution-default
|
|
||||||
ippAddResolution(attrs, IPP_TAG_PRINTER, "printer-resolution-default",
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
||||||
@ -1,41 +0,0 @@
|
|||||||
From 262c909ac5b8676d1c221584c5a760e5e83fae66 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Zdenek Dohnal <zdohnal@redhat.com>
|
|
||||||
Date: Mon, 4 Sep 2023 17:07:14 +0200
|
|
||||||
Subject: [PATCH] raster-interpret.c: Fix CVE-2023-4504
|
|
||||||
|
|
||||||
We didn't check for end of buffer if it looks there is an escaped
|
|
||||||
character - check for NULL terminator there and if found, return NULL
|
|
||||||
as return value and in `ptr`, because a lone backslash is not
|
|
||||||
a valid PostScript character.
|
|
||||||
---
|
|
||||||
ppd/raster-interpret.c | 14 +++++++++++++-
|
|
||||||
1 file changed, 13 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/ppd/raster-interpret.c b/ppd/raster-interpret.c
|
|
||||||
index 91f6c0d3..d120d2fc 100644
|
|
||||||
--- a/ppd/raster-interpret.c
|
|
||||||
+++ b/ppd/raster-interpret.c
|
|
||||||
@@ -1270,7 +1270,19 @@ ppd_scan_ps(_ppd_ps_stack_t *st, // I - Stack
|
|
||||||
|
|
||||||
cur ++;
|
|
||||||
|
|
||||||
- if (*cur == 'b')
|
|
||||||
+ /*
|
|
||||||
+ * Return NULL if we reached NULL terminator, a lone backslash
|
|
||||||
+ * is not a valid character in PostScript.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ if (!*cur)
|
|
||||||
+ {
|
|
||||||
+ *ptr = NULL;
|
|
||||||
+
|
|
||||||
+ return (NULL);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (*cur == 'b')
|
|
||||||
*valptr++ = '\b';
|
|
||||||
else if (*cur == 'f')
|
|
||||||
*valptr++ = '\f';
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
||||||
@ -1,20 +0,0 @@
|
|||||||
diff --git a/Makefile.am b/Makefile.am
|
|
||||||
index 4bb9472b..21a2fb45 100644
|
|
||||||
--- a/Makefile.am
|
|
||||||
+++ b/Makefile.am
|
|
||||||
@@ -143,6 +143,7 @@ EXTRA_DIST += \
|
|
||||||
ppd/test2.ppd \
|
|
||||||
ppd/README.md
|
|
||||||
|
|
||||||
+if ENABLE_TESTPPDFILE
|
|
||||||
# ================
|
|
||||||
# PPD test utility
|
|
||||||
# ================
|
|
||||||
@@ -159,6 +160,7 @@ testppdfile_CFLAGS = \
|
|
||||||
-I$(srcdir)/ppd/ \
|
|
||||||
$(CUPS_CFLAGS) \
|
|
||||||
$(LIBCUPSFILTERS_CFLAGS)
|
|
||||||
+endif
|
|
||||||
|
|
||||||
# ===========================
|
|
||||||
# ppdc PPD compiler utilities
|
|
||||||
21
libppd.spec
21
libppd.spec
@ -1,14 +1,12 @@
|
|||||||
%global _hardened_build 1
|
%global _hardened_build 1
|
||||||
|
|
||||||
%global upstream_version 2.0rc2
|
|
||||||
|
|
||||||
# don't build libppd-tools until CUPS 3.x drops them
|
# don't build libppd-tools until CUPS 3.x drops them
|
||||||
%bcond_with tools
|
%bcond_with tools
|
||||||
|
|
||||||
Name: libppd
|
Name: libppd
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 2.0~rc2
|
Version: 2.0.0
|
||||||
Release: 4%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: Library for retro-fitting legacy printer drivers
|
Summary: Library for retro-fitting legacy printer drivers
|
||||||
|
|
||||||
# the CUPS exception text is the same as LLVM exception, so using that name with
|
# the CUPS exception text is the same as LLVM exception, so using that name with
|
||||||
@ -16,18 +14,10 @@ Summary: Library for retro-fitting legacy printer drivers
|
|||||||
# https://lists.fedoraproject.org/archives/list/legal@lists.fedoraproject.org/message/A7GFSD6M3GYGSI32L2FC5KB22DUAEQI3/
|
# https://lists.fedoraproject.org/archives/list/legal@lists.fedoraproject.org/message/A7GFSD6M3GYGSI32L2FC5KB22DUAEQI3/
|
||||||
License: Apache-2.0 WITH LLVM-exception
|
License: Apache-2.0 WITH LLVM-exception
|
||||||
URL: https://github.com/OpenPrinting/libppd
|
URL: https://github.com/OpenPrinting/libppd
|
||||||
Source0: %{URL}/releases/download/%{upstream_version}/%{name}-%{upstream_version}.tar.gz
|
Source0: %{URL}/releases/download/%{version}/%{name}-%{version}.tar.gz
|
||||||
|
|
||||||
|
|
||||||
# Patches
|
# Patches
|
||||||
# https://github.com/OpenPrinting/libppd/pull/18
|
|
||||||
Patch0001: libppd-disable-testppdfile.patch
|
|
||||||
# https://github.com/OpenPrinting/libppd/pull/21
|
|
||||||
Patch0002: 0001-ppd-ppd-ipp.c-Use-make-when-constructing-printer-mak.patch
|
|
||||||
# https://github.com/OpenPrinting/libppd/commit/30b35cc751bc312a1f82db849b1c80dbd8d32aa4
|
|
||||||
Patch0003: 0001-Decode-JCLToPDFInterpreter-value-in-ppdEmitJCLPDF.patch
|
|
||||||
# https://github.com/OpenPrinting/libppd/commit/262c909ac5
|
|
||||||
Patch0004: 0001-raster-interpret.c-Fix-CVE-2023-4504.patch
|
|
||||||
|
|
||||||
|
|
||||||
# for autogen.sh
|
# for autogen.sh
|
||||||
@ -105,7 +95,7 @@ PPD files from *.drv files.
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
%autosetup -n %{name}-%{upstream_version} -S git
|
%autosetup -S git
|
||||||
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
@ -200,6 +190,9 @@ rm -rf %{buildroot}%{_datadir}/ppdc
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Oct 19 2023 Zdenek Dohnal <zdohnal@redhat.com> - 1:2.0.0-1
|
||||||
|
- 2240389 - libppd-2.0.0 is available
|
||||||
|
|
||||||
* Wed Sep 20 2023 Zdenek Dohnal <zdohnal@redhat.com> - 1:2.0~rc2-4
|
* Wed Sep 20 2023 Zdenek Dohnal <zdohnal@redhat.com> - 1:2.0~rc2-4
|
||||||
- CVE-2023-4504 libppd: Postscript Parsing Heap Overflow
|
- CVE-2023-4504 libppd: Postscript Parsing Heap Overflow
|
||||||
|
|
||||||
|
|||||||
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (libppd-2.0rc2.tar.gz) = 6a8e1edefa191649ba02f93099fb1e05e96f3ce4ebe284d0280ed397d60a655c19bca356d92cfeb47a16e02ad456455a79af50a5b47e341699e39f440036f4e9
|
SHA512 (libppd-2.0.0.tar.gz) = 9eff31bcb7088f9957b1bb7933619316d66c2f0fbbc1656afc654ba067aab47f2187a15fd6d99a8037edb553bc73d2abf4d4e07fd781e040bdebbc5f0d103f99
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user