Package: release.debian.org Severity: normal User: release.debian....@packages.debian.org Usertags: unblock
Please unblock package cups 2.2.10-5 Actually; to be entirely transparent, I uploaded to unstable by mistake; I had considered the changes not to warrant going through an unblock process. Anyway. The changes are non-invasive and non-risky, extend hardware support, and (well), they sit in unstable. :-) Don't hesitate to ask me for a revert, I'm glad to do so. The real debdiff is attached, but given my use of git-dpm, is quite noisy. The real "source diff" is the following (in short, two org.cups.usb-quirks additions and a manpage translation update): diff -Nru cups-2.2.10/debian/changelog cups-2.2.10/debian/changelog --- cups-2.2.10/debian/changelog 2019-02-16 14:48:42.000000000 +0100 +++ cups-2.2.10/debian/changelog 2019-03-27 17:13:07.000000000 +0100 @@ -1,3 +1,15 @@ +cups (2.2.10-5) unstable; urgency=medium + + [ Helge Kreutzmann ] + * Correct error in german manpage translation + + [ Didier Raboud ] + * Backport patches from upstream's 2.2 "stable" branch: + - Add USB quirks rule for Xerox printers (Issue #5523) + - Add a USB quirks rule for the DYMO 450 Turbo (Issue #5521) + + -- Didier Raboud <o...@debian.org> Wed, 27 Mar 2019 17:13:07 +0100 + cups (2.2.10-4) unstable; urgency=low * Backport patches from upstream's 2.2 "stable" branch: diff -Nru cups-2.2.10/debian/manpage-po4a/po/de.po cups-2.2.10/debian/manpage-po4a/po/de.po --- cups-2.2.10/debian/manpage-po4a/po/de.po 2019-02-16 14:48:42.000000000 +0100 +++ cups-2.2.10/debian/manpage-po4a/po/de.po 2019-03-27 17:13:07.000000000 +0100 @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: cups man pages 2.2.7-5\n" "POT-Creation-Date: 2018-12-08 12:54+0100\n" -"PO-Revision-Date: 2018-12-09 06:47+0100\n" +"PO-Revision-Date: 2019-03-03 07:38+0100\n" "Last-Translator: Helge Kreutzmann <deb...@helgefjell.de>\n" "Language-Team: de <debian-l10n-ger...@lists.debian.org>\n" "Language: de\n" @@ -2210,7 +2210,7 @@ msgstr "" "Die Datei I<cupsd.conf> konfiguriert den CUPS-Auftragsplaner (Scheduler), " "B<cupsd>(8). Sie befindet sich normalerweise in dem Verzeichnis I</etc/" -"cups>. B<Hinweis:> Datei, Verzeichnis und Benutzerkonfigurationsdirektiven, " +"cups>. B<Hinweis:> Datei-, Verzeichnis- und Benutzerkonfigurationsdirektiven, " "die früher in der Datei B<cupsd.conf> erlaubt wurden, werden jetzt " "stattdessen in der Datei B<cups-files.conf>(5) gespeichert, um bestimmte " "Arten von Angriffen zur Rechteerweiterung zu vermeiden." diff -Nru cups-2.2.10/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch cups-2.2.10/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch --- cups-2.2.10/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch 1970-01-01 01:00:00.000000000 +0100 +++ cups-2.2.10/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch 2019-03-27 17:13:07.000000000 +0100 @@ -0,0 +1,20 @@ +From f8eac850dfbdb4a8d6a02f4d5eb2a473e7b088b4 Mon Sep 17 00:00:00 2001 +From: Michael R Sweet <michael.r.sw...@gmail.com> +Date: Tue, 19 Feb 2019 11:11:54 -0500 +Subject: Add USB quirks rule for Xerox printers (Issue #5523) + +--- + backend/org.cups.usb-quirks | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks +index 0586602ab..77233ea18 100644 +--- a/backend/org.cups.usb-quirks ++++ b/backend/org.cups.usb-quirks +@@ -293,3 +293,6 @@ + + # Lexmark E120n (Issue #5478) + 0x043d 0x00cc no-reattach ++ ++# All Xerox printers (Issue #5523) ++0x0924 no-reattach diff -Nru cups-2.2.10/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch cups-2.2.10/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch --- cups-2.2.10/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch 1970-01-01 01:00:00.000000000 +0100 +++ cups-2.2.10/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch 2019-03-27 17:13:07.000000000 +0100 @@ -0,0 +1,20 @@ +From d4d7ff4dad47ad4d278ca2c84efd602354a4e627 Mon Sep 17 00:00:00 2001 +From: Michael R Sweet <michael.r.sw...@gmail.com> +Date: Thu, 21 Feb 2019 09:54:59 -0500 +Subject: Add a USB quirks rule for the DYMO 450 Turbo (Issue #5521) + +--- + backend/org.cups.usb-quirks | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks +index 77233ea18..44d6bb8cb 100644 +--- a/backend/org.cups.usb-quirks ++++ b/backend/org.cups.usb-quirks +@@ -296,3 +296,6 @@ + + # All Xerox printers (Issue #5523) + 0x0924 no-reattach ++ ++# Dymo 450 Turbo (Issue #5521) ++0x0922 0x0021 unidir diff -Nru cups-2.2.10/debian/patches/series cups-2.2.10/debian/patches/series --- cups-2.2.10/debian/patches/series 2019-02-16 14:48:42.000000000 +0100 +++ cups-2.2.10/debian/patches/series 2019-03-27 17:13:07.000000000 +0100 @@ -37,7 +37,9 @@ 0037-Use-the-same-requested-attributes-values-for-all-IPP.patch 0038-Add-a-USB-quirk-rule-for-the-Lexmark-E120n-Issue-547.patch 0039-Updated-the-USB-quirks-rule-for-Zebra-label-printers.patch -0040-Fix-compile-error-on-Linux-Issue-5483.patch -0041-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch -0042-Fix-potential-unaligned-accesses-in-the-string-pool-.patch +0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch +0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch +0042-Fix-compile-error-on-Linux-Issue-5483.patch +0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch +0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch manpage-translations.patch unblock cups/2.2.10-5 -- System Information: Debian Release: buster/sid APT prefers buildd-unstable APT policy: (990, 'buildd-unstable'), (500, 'unstable-debug'), (500, 'unstable'), (500, 'testing'), (500, 'stable'), (100, 'experimental'), (1, 'experimental-debug') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 4.19.0-4-amd64 (SMP w/4 CPU cores) Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE Locale: LANG=fr_CH.UTF-8, LC_CTYPE=fr_CH.UTF-8 (charmap=UTF-8), LANGUAGE=fr_CH:fr (charmap=UTF-8) Shell: /bin/sh linked to /usr/bin/dash Init: systemd (via /run/systemd/system) LSM: AppArmor: enabled
diff -Nru cups-2.2.10/debian/changelog cups-2.2.10/debian/changelog --- cups-2.2.10/debian/changelog 2019-02-16 14:48:42.000000000 +0100 +++ cups-2.2.10/debian/changelog 2019-03-27 17:13:07.000000000 +0100 @@ -1,3 +1,15 @@ +cups (2.2.10-5) unstable; urgency=medium + + [ Helge Kreutzmann ] + * Correct error in german manpage translation + + [ Didier Raboud ] + * Backport patches from upstream's 2.2 "stable" branch: + - Add USB quirks rule for Xerox printers (Issue #5523) + - Add a USB quirks rule for the DYMO 450 Turbo (Issue #5521) + + -- Didier Raboud <o...@debian.org> Wed, 27 Mar 2019 17:13:07 +0100 + cups (2.2.10-4) unstable; urgency=low * Backport patches from upstream's 2.2 "stable" branch: diff -Nru cups-2.2.10/debian/.git-dpm cups-2.2.10/debian/.git-dpm --- cups-2.2.10/debian/.git-dpm 2019-02-16 14:48:42.000000000 +0100 +++ cups-2.2.10/debian/.git-dpm 2019-03-27 17:13:07.000000000 +0100 @@ -1,6 +1,6 @@ # see git-dpm(1) from git-dpm package -3a541d1cb57989a954984fb70ba5e45a65eeeaa6 -3a541d1cb57989a954984fb70ba5e45a65eeeaa6 +2fb6d0075ed13f2fd03a8600a6ecb0892818116b +2fb6d0075ed13f2fd03a8600a6ecb0892818116b 25b2338346ef3abbb93ea88476887cba7b2b86f8 25b2338346ef3abbb93ea88476887cba7b2b86f8 cups_2.2.10.orig.tar.gz diff -Nru cups-2.2.10/debian/manpage-po4a/po/de.po cups-2.2.10/debian/manpage-po4a/po/de.po --- cups-2.2.10/debian/manpage-po4a/po/de.po 2019-02-16 14:48:42.000000000 +0100 +++ cups-2.2.10/debian/manpage-po4a/po/de.po 2019-03-27 17:13:07.000000000 +0100 @@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: cups man pages 2.2.7-5\n" "POT-Creation-Date: 2018-12-08 12:54+0100\n" -"PO-Revision-Date: 2018-12-09 06:47+0100\n" +"PO-Revision-Date: 2019-03-03 07:38+0100\n" "Last-Translator: Helge Kreutzmann <deb...@helgefjell.de>\n" "Language-Team: de <debian-l10n-ger...@lists.debian.org>\n" "Language: de\n" @@ -2210,7 +2210,7 @@ msgstr "" "Die Datei I<cupsd.conf> konfiguriert den CUPS-Auftragsplaner (Scheduler), " "B<cupsd>(8). Sie befindet sich normalerweise in dem Verzeichnis I</etc/" -"cups>. B<Hinweis:> Datei, Verzeichnis und Benutzerkonfigurationsdirektiven, " +"cups>. B<Hinweis:> Datei-, Verzeichnis- und Benutzerkonfigurationsdirektiven, " "die früher in der Datei B<cupsd.conf> erlaubt wurden, werden jetzt " "stattdessen in der Datei B<cups-files.conf>(5) gespeichert, um bestimmte " "Arten von Angriffen zur Rechteerweiterung zu vermeiden." diff -Nru cups-2.2.10/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch cups-2.2.10/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch --- cups-2.2.10/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch 1970-01-01 01:00:00.000000000 +0100 +++ cups-2.2.10/debian/patches/0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch 2019-03-27 17:13:07.000000000 +0100 @@ -0,0 +1,20 @@ +From f8eac850dfbdb4a8d6a02f4d5eb2a473e7b088b4 Mon Sep 17 00:00:00 2001 +From: Michael R Sweet <michael.r.sw...@gmail.com> +Date: Tue, 19 Feb 2019 11:11:54 -0500 +Subject: Add USB quirks rule for Xerox printers (Issue #5523) + +--- + backend/org.cups.usb-quirks | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks +index 0586602ab..77233ea18 100644 +--- a/backend/org.cups.usb-quirks ++++ b/backend/org.cups.usb-quirks +@@ -293,3 +293,6 @@ + + # Lexmark E120n (Issue #5478) + 0x043d 0x00cc no-reattach ++ ++# All Xerox printers (Issue #5523) ++0x0924 no-reattach diff -Nru cups-2.2.10/debian/patches/0040-Fix-compile-error-on-Linux-Issue-5483.patch cups-2.2.10/debian/patches/0040-Fix-compile-error-on-Linux-Issue-5483.patch --- cups-2.2.10/debian/patches/0040-Fix-compile-error-on-Linux-Issue-5483.patch 2019-02-16 14:48:42.000000000 +0100 +++ cups-2.2.10/debian/patches/0040-Fix-compile-error-on-Linux-Issue-5483.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,31 +0,0 @@ -From 6a6ba891dfe51dcfda58bfebf71f3bbbcb014583 Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michael.r.sw...@gmail.com> -Date: Mon, 21 Jan 2019 11:54:58 -0500 -Subject: Fix compile error on Linux (Issue #5483) - ---- - cups/hash.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/cups/hash.c b/cups/hash.c -index 50dc5fb30..a31372595 100644 ---- a/cups/hash.c -+++ b/cups/hash.c -@@ -1,7 +1,7 @@ - /* - * Hashing function for CUPS. - * -- * Copyright © 2015-2018 by Apple Inc. -+ * Copyright © 2015-2019 by Apple Inc. - * - * These coded instructions, statements, and computer programs are the - * property of Apple Inc. and are protected by Federal copyright -@@ -235,7 +235,7 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */ - - gnutls_hash_fast(alg, data, datalen, hash); - -- return (gnutls_hash_get_len(alg)); -+ return ((ssize_t)gnutls_hash_get_len(alg)); - } - - #else diff -Nru cups-2.2.10/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch cups-2.2.10/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch --- cups-2.2.10/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch 1970-01-01 01:00:00.000000000 +0100 +++ cups-2.2.10/debian/patches/0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch 2019-03-27 17:13:07.000000000 +0100 @@ -0,0 +1,20 @@ +From d4d7ff4dad47ad4d278ca2c84efd602354a4e627 Mon Sep 17 00:00:00 2001 +From: Michael R Sweet <michael.r.sw...@gmail.com> +Date: Thu, 21 Feb 2019 09:54:59 -0500 +Subject: Add a USB quirks rule for the DYMO 450 Turbo (Issue #5521) + +--- + backend/org.cups.usb-quirks | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/backend/org.cups.usb-quirks b/backend/org.cups.usb-quirks +index 77233ea18..44d6bb8cb 100644 +--- a/backend/org.cups.usb-quirks ++++ b/backend/org.cups.usb-quirks +@@ -296,3 +296,6 @@ + + # All Xerox printers (Issue #5523) + 0x0924 no-reattach ++ ++# Dymo 450 Turbo (Issue #5521) ++0x0922 0x0021 unidir diff -Nru cups-2.2.10/debian/patches/0041-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch cups-2.2.10/debian/patches/0041-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch --- cups-2.2.10/debian/patches/0041-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch 2019-02-16 14:48:42.000000000 +0100 +++ cups-2.2.10/debian/patches/0041-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,159 +0,0 @@ -From 4e956a93177237e3fd75574efb0bb1d6ae017e5c Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michael.r.sw...@gmail.com> -Date: Mon, 21 Jan 2019 13:44:43 -0500 -Subject: Stop parsing the Emulators keywords in PPD files (Issue #5475) - -This also addresses a potential memory leak... ---- - cups/ppd.c | 76 ++---------------------------------------------------- - cups/ppd.h | 8 +++--- - 2 files changed, 6 insertions(+), 78 deletions(-) - -diff --git a/cups/ppd.c b/cups/ppd.c -index 5f27484aa..968ea8bf3 100644 ---- a/cups/ppd.c -+++ b/cups/ppd.c -@@ -1,8 +1,8 @@ - /* - * PPD file routines for CUPS. - * -- * Copyright 2007-2018 by Apple Inc. -- * Copyright 1997-2007 by Easy Software Products, all rights reserved. -+ * Copyright © 2007-2019 by Apple Inc. -+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the - * property of Apple Inc. and are protected by Federal copyright -@@ -117,7 +117,6 @@ void - ppdClose(ppd_file_t *ppd) /* I - PPD file record */ - { - int i; /* Looping var */ -- ppd_emul_t *emul; /* Current emulation */ - ppd_group_t *group; /* Current group */ - char **font; /* Current font */ - ppd_attr_t **attr; /* Current attribute */ -@@ -144,21 +143,6 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ - _cupsStrFree(ppd->jcl_end); - _cupsStrFree(ppd->jcl_ps); - -- /* -- * Free any emulations... -- */ -- -- if (ppd->num_emulations > 0) -- { -- for (i = ppd->num_emulations, emul = ppd->emulations; i > 0; i --, emul ++) -- { -- _cupsStrFree(emul->start); -- _cupsStrFree(emul->stop); -- } -- -- ppd_free(ppd->emulations); -- } -- - /* - * Free any UI groups, subgroups, and options... - */ -@@ -443,7 +427,6 @@ _ppdOpen( - _ppd_localization_t localization) /* I - Localization to load */ - { - int i, j, k; /* Looping vars */ -- int count; /* Temporary count */ - _ppd_line_t line; /* Line buffer */ - ppd_file_t *ppd; /* PPD file record */ - ppd_group_t *group, /* Current group */ -@@ -461,7 +444,6 @@ _ppdOpen( - /* Human-readable text from file */ - *string, /* Code/text from file */ - *sptr, /* Pointer into string */ -- *nameptr, /* Pointer into name */ - *temp, /* Temporary string pointer */ - **tempfonts; /* Temporary fonts pointer */ - float order; /* Order dependency number */ -@@ -1203,60 +1185,6 @@ _ppdOpen( - else if (!strcmp(string, "Plus90")) - ppd->landscape = 90; - } -- else if (!strcmp(keyword, "Emulators") && string) -- { -- for (count = 1, sptr = string; sptr != NULL;) -- if ((sptr = strchr(sptr, ' ')) != NULL) -- { -- count ++; -- while (*sptr == ' ') -- sptr ++; -- } -- -- ppd->num_emulations = count; -- if ((ppd->emulations = calloc((size_t)count, sizeof(ppd_emul_t))) == NULL) -- { -- pg->ppd_status = PPD_ALLOC_ERROR; -- -- goto error; -- } -- -- for (i = 0, sptr = string; i < count; i ++) -- { -- for (nameptr = ppd->emulations[i].name; -- *sptr != '\0' && *sptr != ' '; -- sptr ++) -- if (nameptr < (ppd->emulations[i].name + sizeof(ppd->emulations[i].name) - 1)) -- *nameptr++ = *sptr; -- -- *nameptr = '\0'; -- -- while (*sptr == ' ') -- sptr ++; -- } -- } -- else if (!strncmp(keyword, "StartEmulator_", 14)) -- { -- ppd_decode(string); -- -- for (i = 0; i < ppd->num_emulations; i ++) -- if (!strcmp(keyword + 14, ppd->emulations[i].name)) -- { -- ppd->emulations[i].start = string; -- string = NULL; -- } -- } -- else if (!strncmp(keyword, "StopEmulator_", 13)) -- { -- ppd_decode(string); -- -- for (i = 0; i < ppd->num_emulations; i ++) -- if (!strcmp(keyword + 13, ppd->emulations[i].name)) -- { -- ppd->emulations[i].stop = string; -- string = NULL; -- } -- } - else if (!strcmp(keyword, "JobPatchFile")) - { - /* -diff --git a/cups/ppd.h b/cups/ppd.h -index 6e628cb60..ae63c0d66 100644 ---- a/cups/ppd.h -+++ b/cups/ppd.h -@@ -5,8 +5,8 @@ - * -D_PPD_DEPRECATED="" TO YOUR COMPILE OPTIONS. THIS HEADER AND THESE - * FUNCTIONS WILL BE REMOVED IN A FUTURE RELEASE OF CUPS. - * -- * Copyright 2007-2015 by Apple Inc. -- * Copyright 1997-2007 by Easy Software Products, all rights reserved. -+ * Copyright © 2007-2019 by Apple Inc. -+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the - * property of Apple Inc. and are protected by Federal copyright -@@ -304,8 +304,8 @@ typedef struct ppd_file_s /**** PPD File ****/ - int throughput; /* Pages per minute */ - ppd_cs_t colorspace; /* Default colorspace */ - char *patches; /* Patch commands to be sent to printer */ -- int num_emulations; /* Number of emulations supported */ -- ppd_emul_t *emulations; /* Emulations and the code to invoke them */ -+ int num_emulations; /* Number of emulations supported (no longer supported) @private@ */ -+ ppd_emul_t *emulations; /* Emulations and the code to invoke them (no longer supported) @private@ */ - char *jcl_begin; /* Start JCL commands */ - char *jcl_ps; /* Enter PostScript interpreter */ - char *jcl_end; /* End JCL commands */ diff -Nru cups-2.2.10/debian/patches/0042-Fix-compile-error-on-Linux-Issue-5483.patch cups-2.2.10/debian/patches/0042-Fix-compile-error-on-Linux-Issue-5483.patch --- cups-2.2.10/debian/patches/0042-Fix-compile-error-on-Linux-Issue-5483.patch 1970-01-01 01:00:00.000000000 +0100 +++ cups-2.2.10/debian/patches/0042-Fix-compile-error-on-Linux-Issue-5483.patch 2019-03-27 17:13:07.000000000 +0100 @@ -0,0 +1,31 @@ +From 6f2402e51d47e9cebe27eec5bfdb0e5543127e2a Mon Sep 17 00:00:00 2001 +From: Michael R Sweet <michael.r.sw...@gmail.com> +Date: Mon, 21 Jan 2019 11:54:58 -0500 +Subject: Fix compile error on Linux (Issue #5483) + +--- + cups/hash.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/cups/hash.c b/cups/hash.c +index 50dc5fb30..a31372595 100644 +--- a/cups/hash.c ++++ b/cups/hash.c +@@ -1,7 +1,7 @@ + /* + * Hashing function for CUPS. + * +- * Copyright © 2015-2018 by Apple Inc. ++ * Copyright © 2015-2019 by Apple Inc. + * + * These coded instructions, statements, and computer programs are the + * property of Apple Inc. and are protected by Federal copyright +@@ -235,7 +235,7 @@ cupsHashData(const char *algorithm, /* I - Algorithm name */ + + gnutls_hash_fast(alg, data, datalen, hash); + +- return (gnutls_hash_get_len(alg)); ++ return ((ssize_t)gnutls_hash_get_len(alg)); + } + + #else diff -Nru cups-2.2.10/debian/patches/0042-Fix-potential-unaligned-accesses-in-the-string-pool-.patch cups-2.2.10/debian/patches/0042-Fix-potential-unaligned-accesses-in-the-string-pool-.patch --- cups-2.2.10/debian/patches/0042-Fix-potential-unaligned-accesses-in-the-string-pool-.patch 2019-02-16 14:48:42.000000000 +0100 +++ cups-2.2.10/debian/patches/0042-Fix-potential-unaligned-accesses-in-the-string-pool-.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,1130 +0,0 @@ -From 285ff5788b33ae73ebf73656ceb9a6a912e0d0c9 Mon Sep 17 00:00:00 2001 -From: Michael R Sweet <michael.r.sw...@gmail.com> -Date: Mon, 21 Jan 2019 14:21:57 -0500 -Subject: Fix potential unaligned accesses in the string pool (Issue #5474) - -This set of changes makes the PPD functions use strdup and free - they were -modifying the contents of the string in places and doing other things that -were not safe for (immutable) strings in the pool. - -Clean out some more _cupsStr cruft that might potentially cause an unaligned memory access (Issue #5474) - -Don't directly use the string pool in the CGI programs or scheduler. ---- - cgi-bin/admin.c | 12 ++--- - cgi-bin/var.c | 42 +++++++-------- - cups/ppd-cache.c | 134 +++++++++++++++++++++-------------------------- - cups/ppd-mark.c | 12 ++--- - cups/ppd.c | 115 ++++++++++++++++++++-------------------- - cups/string.c | 21 ++++---- - scheduler/ipp.c | 8 +-- - 7 files changed, 161 insertions(+), 183 deletions(-) - -diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c -index 690fbbc73..06199a96b 100644 ---- a/cgi-bin/admin.c -+++ b/cgi-bin/admin.c -@@ -767,7 +767,7 @@ do_am_class(http_t *http, /* I - HTTP connection */ - attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_URI, "member-uris", - num_printers, NULL, NULL); - for (i = 0; i < num_printers; i ++) -- attr->values[i].string.text = _cupsStrAlloc(cgiGetArray("MEMBER_URIS", i)); -+ ippSetString(request, &attr, i, cgiGetArray("MEMBER_URIS", i)); - } - - /* -@@ -2417,7 +2417,7 @@ do_list_printers(http_t *http) /* I - HTTP connection */ - attr; - attr = ippFindNextAttribute(response, "device-uri", IPP_TAG_URI)) - { -- cupsArrayAdd(printer_devices, _cupsStrAlloc(attr->values[0].string.text)); -+ cupsArrayAdd(printer_devices, strdup(attr->values[0].string.text)); - } - - /* -@@ -2555,7 +2555,7 @@ do_list_printers(http_t *http) /* I - HTTP connection */ - for (printer_device = (char *)cupsArrayFirst(printer_devices); - printer_device; - printer_device = (char *)cupsArrayNext(printer_devices)) -- _cupsStrFree(printer_device); -+ free(printer_device); - - cupsArrayDelete(printer_devices); - } -@@ -2952,7 +2952,7 @@ do_set_allowed_users(http_t *http) /* I - HTTP connection */ - * Add the name... - */ - -- attr->values[i].string.text = _cupsStrAlloc(ptr); -+ ippSetString(request, &attr, i, ptr); - - /* - * Advance to the next name... -@@ -3761,8 +3761,8 @@ do_set_options(http_t *http, /* I - HTTP connection */ - - attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_NAME, - "job-sheets-default", 2, NULL, NULL); -- attr->values[0].string.text = _cupsStrAlloc(cgiGetVariable("job_sheets_start")); -- attr->values[1].string.text = _cupsStrAlloc(cgiGetVariable("job_sheets_end")); -+ ippSetString(request, &attr, 0, cgiGetVariable("job_sheets_start")); -+ ippSetString(request, &attr, 1, cgiGetVariable("job_sheets_end")); - - if ((var = cgiGetVariable("printer_error_policy")) != NULL) - ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, -diff --git a/cgi-bin/var.c b/cgi-bin/var.c -index 579f23ba3..8b8f26472 100644 ---- a/cgi-bin/var.c -+++ b/cgi-bin/var.c -@@ -1,8 +1,8 @@ - /* - * CGI form variable and array functions for CUPS. - * -- * Copyright 2007-2015 by Apple Inc. -- * Copyright 1997-2005 by Easy Software Products. -+ * Copyright © 2007-2019 by Apple Inc. -+ * Copyright © 1997-2005 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the - * property of Apple Inc. and are protected by Federal copyright -@@ -33,10 +33,10 @@ - - typedef struct /**** Form variable structure ****/ - { -- const char *name; /* Name of variable */ -+ char *name; /* Name of variable */ - int nvalues, /* Number of values */ - avalues; /* Number of values allocated */ -- const char **values; /* Value(s) of variable */ -+ char **values; /* Value(s) of variable */ - } _cgi_var_t; - - -@@ -139,10 +139,10 @@ cgiClearVariables(void) - - for (v = form_vars, i = form_count; i > 0; v ++, i --) - { -- _cupsStrFree(v->name); -+ free(v->name); - for (j = 0; j < v->nvalues; j ++) - if (v->values[j]) -- _cupsStrFree(v->values[j]); -+ free(v->values[j]); - } - - form_count = 0; -@@ -168,7 +168,7 @@ cgiGetArray(const char *name, /* I - Name of array variable */ - if (element < 0 || element >= var->nvalues) - return (NULL); - -- return (_cupsStrRetain(var->values[element])); -+ return (strdup(var->values[element])); - } - - -@@ -234,7 +234,7 @@ cgiGetVariable(const char *name) /* I - Name of variable */ - var->values[var->nvalues - 1])); - #endif /* DEBUG */ - -- return ((var == NULL) ? NULL : _cupsStrRetain(var->values[var->nvalues - 1])); -+ return ((var == NULL) ? NULL : strdup(var->values[var->nvalues - 1])); - } - - -@@ -382,10 +382,9 @@ cgiSetArray(const char *name, /* I - Name of variable */ - { - if (element >= var->avalues) - { -- const char **temp; /* Temporary pointer */ -+ char **temp; /* Temporary pointer */ - -- temp = (const char **)realloc((void *)(var->values), -- sizeof(char *) * (size_t)(element + 16)); -+ temp = (char **)realloc((void *)(var->values), sizeof(char *) * (size_t)(element + 16)); - if (!temp) - return; - -@@ -401,9 +400,9 @@ cgiSetArray(const char *name, /* I - Name of variable */ - var->nvalues = element + 1; - } - else if (var->values[element]) -- _cupsStrFree((char *)var->values[element]); -+ free((char *)var->values[element]); - -- var->values[element] = _cupsStrAlloc(value); -+ var->values[element] = strdup(value); - } - } - -@@ -460,10 +459,9 @@ cgiSetSize(const char *name, /* I - Name of variable */ - - if (size >= var->avalues) - { -- const char **temp; /* Temporary pointer */ -+ char **temp; /* Temporary pointer */ - -- temp = (const char **)realloc((void *)(var->values), -- sizeof(char *) * (size_t)(size + 16)); -+ temp = (char **)realloc((void *)(var->values), sizeof(char *) * (size_t)(size + 16)); - if (!temp) - return; - -@@ -480,7 +478,7 @@ cgiSetSize(const char *name, /* I - Name of variable */ - { - for (i = size; i < var->nvalues; i ++) - if (var->values[i]) -- _cupsStrFree((void *)(var->values[i])); -+ free((void *)(var->values[i])); - } - - var->nvalues = size; -@@ -515,9 +513,9 @@ cgiSetVariable(const char *name, /* I - Name of variable */ - { - for (i = 0; i < var->nvalues; i ++) - if (var->values[i]) -- _cupsStrFree((char *)var->values[i]); -+ free((char *)var->values[i]); - -- var->values[0] = _cupsStrAlloc(value); -+ var->values[0] = strdup(value); - var->nvalues = 1; - } - } -@@ -563,10 +561,10 @@ cgi_add_variable(const char *name, /* I - Variable name */ - if ((var->values = calloc((size_t)element + 1, sizeof(char *))) == NULL) - return; - -- var->name = _cupsStrAlloc(name); -+ var->name = strdup(name); - var->nvalues = element + 1; - var->avalues = element + 1; -- var->values[element] = _cupsStrAlloc(value); -+ var->values[element] = strdup(value); - - form_count ++; - } -@@ -598,7 +596,7 @@ cgi_find_variable(const char *name) /* I - Name of variable */ - if (form_count < 1 || name == NULL) - return (NULL); - -- key.name = name; -+ key.name = (char *)name; - - return ((_cgi_var_t *)bsearch(&key, form_vars, (size_t)form_count, sizeof(_cgi_var_t), - (int (*)(const void *, const void *))cgi_compare_variables)); -diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c -index ab91f0fd4..8b496e3b2 100644 ---- a/cups/ppd-cache.c -+++ b/cups/ppd-cache.c -@@ -1,7 +1,7 @@ - /* - * PPD cache implementation for CUPS. - * -- * Copyright © 2010-2018 by Apple Inc. -+ * Copyright © 2010-2019 by Apple Inc. - * - * These coded instructions, statements, and computer programs are the - * property of Apple Inc. and are protected by Federal copyright -@@ -508,24 +508,20 @@ _ppdCacheCreateWithFile( - else if (!_cups_strcasecmp(line, "Filter")) - { - if (!pc->filters) -- pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, -- (cups_acopy_func_t)_cupsStrAlloc, -- (cups_afree_func_t)_cupsStrFree); -+ pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); - - cupsArrayAdd(pc->filters, value); - } - else if (!_cups_strcasecmp(line, "PreFilter")) - { - if (!pc->prefilters) -- pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, -- (cups_acopy_func_t)_cupsStrAlloc, -- (cups_afree_func_t)_cupsStrFree); -+ pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); - - cupsArrayAdd(pc->prefilters, value); - } - else if (!_cups_strcasecmp(line, "Product")) - { -- pc->product = _cupsStrAlloc(value); -+ pc->product = strdup(value); - } - else if (!_cups_strcasecmp(line, "SingleFile")) - { -@@ -625,8 +621,8 @@ _ppdCacheCreateWithFile( - } - - map = pc->bins + pc->num_bins; -- map->pwg = _cupsStrAlloc(pwg_keyword); -- map->ppd = _cupsStrAlloc(ppd_keyword); -+ map->pwg = strdup(pwg_keyword); -+ map->ppd = strdup(ppd_keyword); - - pc->num_bins ++; - } -@@ -680,8 +676,8 @@ _ppdCacheCreateWithFile( - goto create_error; - } - -- size->map.pwg = _cupsStrAlloc(pwg_keyword); -- size->map.ppd = _cupsStrAlloc(ppd_keyword); -+ size->map.pwg = strdup(pwg_keyword); -+ size->map.ppd = strdup(ppd_keyword); - - pc->num_sizes ++; - } -@@ -709,15 +705,15 @@ _ppdCacheCreateWithFile( - - pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "max", - pc->custom_max_width, pc->custom_max_length, NULL); -- pc->custom_max_keyword = _cupsStrAlloc(pwg_keyword); -+ pc->custom_max_keyword = strdup(pwg_keyword); - - pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "min", - pc->custom_min_width, pc->custom_min_length, NULL); -- pc->custom_min_keyword = _cupsStrAlloc(pwg_keyword); -+ pc->custom_min_keyword = strdup(pwg_keyword); - } - else if (!_cups_strcasecmp(line, "SourceOption")) - { -- pc->source_option = _cupsStrAlloc(value); -+ pc->source_option = strdup(value); - } - else if (!_cups_strcasecmp(line, "NumSources")) - { -@@ -764,8 +760,8 @@ _ppdCacheCreateWithFile( - } - - map = pc->sources + pc->num_sources; -- map->pwg = _cupsStrAlloc(pwg_keyword); -- map->ppd = _cupsStrAlloc(ppd_keyword); -+ map->pwg = strdup(pwg_keyword); -+ map->ppd = strdup(ppd_keyword); - - pc->num_sources ++; - } -@@ -813,8 +809,8 @@ _ppdCacheCreateWithFile( - } - - map = pc->types + pc->num_types; -- map->pwg = _cupsStrAlloc(pwg_keyword); -- map->ppd = _cupsStrAlloc(ppd_keyword); -+ map->pwg = strdup(pwg_keyword); -+ map->ppd = strdup(ppd_keyword); - - pc->num_types ++; - } -@@ -844,13 +840,13 @@ _ppdCacheCreateWithFile( - pc->presets[print_color_mode] + print_quality); - } - else if (!_cups_strcasecmp(line, "SidesOption")) -- pc->sides_option = _cupsStrAlloc(value); -+ pc->sides_option = strdup(value); - else if (!_cups_strcasecmp(line, "Sides1Sided")) -- pc->sides_1sided = _cupsStrAlloc(value); -+ pc->sides_1sided = strdup(value); - else if (!_cups_strcasecmp(line, "Sides2SidedLong")) -- pc->sides_2sided_long = _cupsStrAlloc(value); -+ pc->sides_2sided_long = strdup(value); - else if (!_cups_strcasecmp(line, "Sides2SidedShort")) -- pc->sides_2sided_short = _cupsStrAlloc(value); -+ pc->sides_2sided_short = strdup(value); - else if (!_cups_strcasecmp(line, "Finishings")) - { - if (!pc->finishings) -@@ -871,13 +867,13 @@ _ppdCacheCreateWithFile( - else if (!_cups_strcasecmp(line, "MaxCopies")) - pc->max_copies = atoi(value); - else if (!_cups_strcasecmp(line, "ChargeInfoURI")) -- pc->charge_info_uri = _cupsStrAlloc(value); -+ pc->charge_info_uri = strdup(value); - else if (!_cups_strcasecmp(line, "JobAccountId")) - pc->account_id = !_cups_strcasecmp(value, "true"); - else if (!_cups_strcasecmp(line, "JobAccountingUserId")) - pc->accounting_user_id = !_cups_strcasecmp(value, "true"); - else if (!_cups_strcasecmp(line, "JobPassword")) -- pc->password = _cupsStrAlloc(value); -+ pc->password = strdup(value); - else if (!_cups_strcasecmp(line, "Mandatory")) - { - if (pc->mandatory) -@@ -888,9 +884,7 @@ _ppdCacheCreateWithFile( - else if (!_cups_strcasecmp(line, "SupportFile")) - { - if (!pc->support_files) -- pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, -- (cups_acopy_func_t)_cupsStrAlloc, -- (cups_afree_func_t)_cupsStrFree); -+ pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); - - cupsArrayAdd(pc->support_files, value); - } -@@ -1130,8 +1124,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - */ - - new_size = old_size; -- _cupsStrFree(old_size->map.ppd); -- _cupsStrFree(old_size->map.pwg); -+ free(old_size->map.ppd); -+ free(old_size->map.pwg); - } - } - -@@ -1152,8 +1146,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - * Save this size... - */ - -- new_size->map.ppd = _cupsStrAlloc(ppd_size->name); -- new_size->map.pwg = _cupsStrAlloc(pwg_name); -+ new_size->map.ppd = strdup(ppd_size->name); -+ new_size->map.pwg = strdup(pwg_name); - new_size->width = new_width; - new_size->length = new_length; - new_size->left = new_left; -@@ -1173,14 +1167,14 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "max", - PWG_FROM_POINTS(ppd->custom_max[0]), - PWG_FROM_POINTS(ppd->custom_max[1]), NULL); -- pc->custom_max_keyword = _cupsStrAlloc(pwg_keyword); -+ pc->custom_max_keyword = strdup(pwg_keyword); - pc->custom_max_width = PWG_FROM_POINTS(ppd->custom_max[0]); - pc->custom_max_length = PWG_FROM_POINTS(ppd->custom_max[1]); - - pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "min", - PWG_FROM_POINTS(ppd->custom_min[0]), - PWG_FROM_POINTS(ppd->custom_min[1]), NULL); -- pc->custom_min_keyword = _cupsStrAlloc(pwg_keyword); -+ pc->custom_min_keyword = strdup(pwg_keyword); - pc->custom_min_width = PWG_FROM_POINTS(ppd->custom_min[0]); - pc->custom_min_length = PWG_FROM_POINTS(ppd->custom_min[1]); - -@@ -1199,7 +1193,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - - if (input_slot) - { -- pc->source_option = _cupsStrAlloc(input_slot->keyword); -+ pc->source_option = strdup(input_slot->keyword); - - if ((pc->sources = calloc((size_t)input_slot->num_choices, sizeof(pwg_map_t))) == NULL) - { -@@ -1251,8 +1245,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - "_"); - } - -- map->pwg = _cupsStrAlloc(pwg_name); -- map->ppd = _cupsStrAlloc(choice->choice); -+ map->pwg = strdup(pwg_name); -+ map->ppd = strdup(choice->choice); - } - } - -@@ -1315,8 +1309,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - "_"); - } - -- map->pwg = _cupsStrAlloc(pwg_name); -- map->ppd = _cupsStrAlloc(choice->choice); -+ map->pwg = strdup(pwg_name); -+ map->ppd = strdup(choice->choice); - } - } - -@@ -1342,8 +1336,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - { - pwg_unppdize_name(choice->choice, pwg_keyword, sizeof(pwg_keyword), "_"); - -- map->pwg = _cupsStrAlloc(pwg_keyword); -- map->ppd = _cupsStrAlloc(choice->choice); -+ map->pwg = strdup(pwg_keyword); -+ map->ppd = strdup(choice->choice); - } - } - -@@ -1558,7 +1552,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - - if (duplex) - { -- pc->sides_option = _cupsStrAlloc(duplex->keyword); -+ pc->sides_option = strdup(duplex->keyword); - - for (i = duplex->num_choices, choice = duplex->choices; - i > 0; -@@ -1566,16 +1560,16 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - { - if ((!_cups_strcasecmp(choice->choice, "None") || - !_cups_strcasecmp(choice->choice, "False")) && !pc->sides_1sided) -- pc->sides_1sided = _cupsStrAlloc(choice->choice); -+ pc->sides_1sided = strdup(choice->choice); - else if ((!_cups_strcasecmp(choice->choice, "DuplexNoTumble") || - !_cups_strcasecmp(choice->choice, "LongEdge") || - !_cups_strcasecmp(choice->choice, "Top")) && !pc->sides_2sided_long) -- pc->sides_2sided_long = _cupsStrAlloc(choice->choice); -+ pc->sides_2sided_long = strdup(choice->choice); - else if ((!_cups_strcasecmp(choice->choice, "DuplexTumble") || - !_cups_strcasecmp(choice->choice, "ShortEdge") || - !_cups_strcasecmp(choice->choice, "Bottom")) && - !pc->sides_2sided_short) -- pc->sides_2sided_short = _cupsStrAlloc(choice->choice); -+ pc->sides_2sided_short = strdup(choice->choice); - } - } - -@@ -1583,9 +1577,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - * Copy filters and pre-filters... - */ - -- pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, -- (cups_acopy_func_t)_cupsStrAlloc, -- (cups_afree_func_t)_cupsStrFree); -+ pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); - - cupsArrayAdd(pc->filters, - "application/vnd.cups-raw application/octet-stream 0 -"); -@@ -1642,9 +1634,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - - if ((ppd_attr = ppdFindAttr(ppd, "cupsPreFilter", NULL)) != NULL) - { -- pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, -- (cups_acopy_func_t)_cupsStrAlloc, -- (cups_afree_func_t)_cupsStrFree); -+ pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); - - do - { -@@ -1661,7 +1651,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - */ - - if (ppd->product) -- pc->product = _cupsStrAlloc(ppd->product); -+ pc->product = strdup(ppd->product); - - /* - * Copy finishings mapping data... -@@ -1818,7 +1808,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - */ - - if ((ppd_attr = ppdFindAttr(ppd, "cupsChargeInfoURI", NULL)) != NULL) -- pc->charge_info_uri = _cupsStrAlloc(ppd_attr->value); -+ pc->charge_info_uri = strdup(ppd_attr->value); - - if ((ppd_attr = ppdFindAttr(ppd, "cupsJobAccountId", NULL)) != NULL) - pc->account_id = !_cups_strcasecmp(ppd_attr->value, "true"); -@@ -1827,7 +1817,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - pc->accounting_user_id = !_cups_strcasecmp(ppd_attr->value, "true"); - - if ((ppd_attr = ppdFindAttr(ppd, "cupsJobPassword", NULL)) != NULL) -- pc->password = _cupsStrAlloc(ppd_attr->value); -+ pc->password = strdup(ppd_attr->value); - - if ((ppd_attr = ppdFindAttr(ppd, "cupsMandatory", NULL)) != NULL) - pc->mandatory = _cupsArrayNewStrings(ppd_attr->value, ' '); -@@ -1836,9 +1826,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ - * Support files... - */ - -- pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, -- (cups_acopy_func_t)_cupsStrAlloc, -- (cups_afree_func_t)_cupsStrFree); -+ pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); - - for (ppd_attr = ppdFindAttr(ppd, "cupsICCProfile", NULL); - ppd_attr; -@@ -1894,8 +1882,8 @@ _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */ - { - for (i = pc->num_bins, map = pc->bins; i > 0; i --, map ++) - { -- _cupsStrFree(map->pwg); -- _cupsStrFree(map->ppd); -+ free(map->pwg); -+ free(map->ppd); - } - - free(pc->bins); -@@ -1905,22 +1893,21 @@ _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */ - { - for (i = pc->num_sizes, size = pc->sizes; i > 0; i --, size ++) - { -- _cupsStrFree(size->map.pwg); -- _cupsStrFree(size->map.ppd); -+ free(size->map.pwg); -+ free(size->map.ppd); - } - - free(pc->sizes); - } - -- if (pc->source_option) -- _cupsStrFree(pc->source_option); -+ free(pc->source_option); - - if (pc->sources) - { - for (i = pc->num_sources, map = pc->sources; i > 0; i --, map ++) - { -- _cupsStrFree(map->pwg); -- _cupsStrFree(map->ppd); -+ free(map->pwg); -+ free(map->ppd); - } - - free(pc->sources); -@@ -1930,26 +1917,23 @@ _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */ - { - for (i = pc->num_types, map = pc->types; i > 0; i --, map ++) - { -- _cupsStrFree(map->pwg); -- _cupsStrFree(map->ppd); -+ free(map->pwg); -+ free(map->ppd); - } - - free(pc->types); - } - -- if (pc->custom_max_keyword) -- _cupsStrFree(pc->custom_max_keyword); -- -- if (pc->custom_min_keyword) -- _cupsStrFree(pc->custom_min_keyword); -+ free(pc->custom_max_keyword); -+ free(pc->custom_min_keyword); - -- _cupsStrFree(pc->product); -+ free(pc->product); - cupsArrayDelete(pc->filters); - cupsArrayDelete(pc->prefilters); - cupsArrayDelete(pc->finishings); - -- _cupsStrFree(pc->charge_info_uri); -- _cupsStrFree(pc->password); -+ free(pc->charge_info_uri); -+ free(pc->password); - - cupsArrayDelete(pc->mandatory); - -diff --git a/cups/ppd-mark.c b/cups/ppd-mark.c -index 464c09a98..2d106ba9e 100644 ---- a/cups/ppd-mark.c -+++ b/cups/ppd-mark.c -@@ -1,8 +1,8 @@ - /* - * Option marking routines for CUPS. - * -- * Copyright 2007-2017 by Apple Inc. -- * Copyright 1997-2007 by Easy Software Products, all rights reserved. -+ * Copyright © 2007-2019 by Apple Inc. -+ * Copyright © 1997-2007 by Easy Software Products, all rights reserved. - * - * These coded instructions, statements, and computer programs are the - * property of Apple Inc. and are protected by Federal copyright -@@ -890,9 +890,9 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */ - case PPD_CUSTOM_PASSWORD : - case PPD_CUSTOM_STRING : - if (cparam->current.custom_string) -- _cupsStrFree(cparam->current.custom_string); -+ free(cparam->current.custom_string); - -- cparam->current.custom_string = _cupsStrAlloc(choice + 7); -+ cparam->current.custom_string = strdup(choice + 7); - break; - } - } -@@ -967,9 +967,9 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */ - case PPD_CUSTOM_PASSWORD : - case PPD_CUSTOM_STRING : - if (cparam->current.custom_string) -- _cupsStrFree(cparam->current.custom_string); -+ free(cparam->current.custom_string); - -- cparam->current.custom_string = _cupsStrRetain(val->value); -+ cparam->current.custom_string = strdup(val->value); - break; - } - } -diff --git a/cups/ppd.c b/cups/ppd.c -index 968ea8bf3..435b992f4 100644 ---- a/cups/ppd.c -+++ b/cups/ppd.c -@@ -34,8 +34,6 @@ - * Definitions... - */ - --#define ppd_free(p) if (p) free(p) /* Safe free macro */ -- - #define PPD_KEYWORD 1 /* Line contained a keyword */ - #define PPD_OPTION 2 /* Line contained an option name */ - #define PPD_TEXT 4 /* Line contained human-readable text */ -@@ -135,13 +133,12 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ - * Free all strings at the top level... - */ - -- _cupsStrFree(ppd->lang_encoding); -- _cupsStrFree(ppd->nickname); -- if (ppd->patches) -- free(ppd->patches); -- _cupsStrFree(ppd->jcl_begin); -- _cupsStrFree(ppd->jcl_end); -- _cupsStrFree(ppd->jcl_ps); -+ free(ppd->lang_encoding); -+ free(ppd->nickname); -+ free(ppd->patches); -+ free(ppd->jcl_begin); -+ free(ppd->jcl_end); -+ free(ppd->jcl_ps); - - /* - * Free any UI groups, subgroups, and options... -@@ -152,7 +149,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ - for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++) - ppd_free_group(group); - -- ppd_free(ppd->groups); -+ free(ppd->groups); - } - - cupsArrayDelete(ppd->options); -@@ -163,14 +160,14 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ - */ - - if (ppd->num_sizes > 0) -- ppd_free(ppd->sizes); -+ free(ppd->sizes); - - /* - * Free any constraints... - */ - - if (ppd->num_consts > 0) -- ppd_free(ppd->consts); -+ free(ppd->consts); - - /* - * Free any filters... -@@ -185,9 +182,9 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ - if (ppd->num_fonts > 0) - { - for (i = ppd->num_fonts, font = ppd->fonts; i > 0; i --, font ++) -- _cupsStrFree(*font); -+ free(*font); - -- ppd_free(ppd->fonts); -+ free(ppd->fonts); - } - - /* -@@ -195,7 +192,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ - */ - - if (ppd->num_profiles > 0) -- ppd_free(ppd->profiles); -+ free(ppd->profiles); - - /* - * Free any attributes... -@@ -205,11 +202,11 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ - { - for (i = ppd->num_attrs, attr = ppd->attrs; i > 0; i --, attr ++) - { -- _cupsStrFree((*attr)->value); -- ppd_free(*attr); -+ free((*attr)->value); -+ free(*attr); - } - -- ppd_free(ppd->attrs); -+ free(ppd->attrs); - } - - cupsArrayDelete(ppd->sorted_attrs); -@@ -231,7 +228,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ - case PPD_CUSTOM_PASSCODE : - case PPD_CUSTOM_PASSWORD : - case PPD_CUSTOM_STRING : -- _cupsStrFree(cparam->current.custom_string); -+ free(cparam->current.custom_string); - break; - - default : -@@ -279,7 +276,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ - * Free the whole record... - */ - -- ppd_free(ppd); -+ free(ppd); - } - - -@@ -617,15 +614,15 @@ _ppdOpen( - if (pg->ppd_status == PPD_OK) - pg->ppd_status = PPD_MISSING_PPDADOBE4; - -- _cupsStrFree(string); -- ppd_free(line.buffer); -+ free(string); -+ free(line.buffer); - - return (NULL); - } - - DEBUG_printf(("2_ppdOpen: keyword=%s, string=%p", keyword, string)); - -- _cupsStrFree(string); -+ free(string); - - /* - * Allocate memory for the PPD file record... -@@ -635,8 +632,8 @@ _ppdOpen( - { - pg->ppd_status = PPD_ALLOC_ERROR; - -- _cupsStrFree(string); -- ppd_free(line.buffer); -+ free(string); -+ free(line.buffer); - - return (NULL); - } -@@ -833,7 +830,7 @@ _ppdOpen( - * Say all PPD files are UTF-8, since we convert to UTF-8... - */ - -- ppd->lang_encoding = _cupsStrAlloc("UTF-8"); -+ ppd->lang_encoding = strdup("UTF-8"); - encoding = _ppdGetEncoding(string); - } - else if (!strcmp(keyword, "LanguageVersion")) -@@ -854,10 +851,10 @@ _ppdOpen( - - - cupsCharsetToUTF8(utf8, string, sizeof(utf8), encoding); -- ppd->nickname = _cupsStrAlloc((char *)utf8); -+ ppd->nickname = strdup((char *)utf8); - } - else -- ppd->nickname = _cupsStrAlloc(string); -+ ppd->nickname = strdup(string); - } - else if (!strcmp(keyword, "Product")) - ppd->product = string; -@@ -867,17 +864,17 @@ _ppdOpen( - ppd->ttrasterizer = string; - else if (!strcmp(keyword, "JCLBegin")) - { -- ppd->jcl_begin = _cupsStrAlloc(string); -+ ppd->jcl_begin = strdup(string); - ppd_decode(ppd->jcl_begin); /* Decode quoted string */ - } - else if (!strcmp(keyword, "JCLEnd")) - { -- ppd->jcl_end = _cupsStrAlloc(string); -+ ppd->jcl_end = strdup(string); - ppd_decode(ppd->jcl_end); /* Decode quoted string */ - } - else if (!strcmp(keyword, "JCLToPSInterpreter")) - { -- ppd->jcl_ps = _cupsStrAlloc(string); -+ ppd->jcl_ps = strdup(string); - ppd_decode(ppd->jcl_ps); /* Decode quoted string */ - } - else if (!strcmp(keyword, "AccurateScreensSupport")) -@@ -945,10 +942,10 @@ _ppdOpen( - ppd->num_filters ++; - - /* -- * Retain a copy of the filter string... -+ * Make a copy of the filter string... - */ - -- *filter = _cupsStrRetain(string); -+ *filter = strdup(string); - } - else if (!strcmp(keyword, "Throughput")) - ppd->throughput = atoi(string); -@@ -971,7 +968,7 @@ _ppdOpen( - } - - ppd->fonts = tempfonts; -- ppd->fonts[ppd->num_fonts] = _cupsStrAlloc(name); -+ ppd->fonts[ppd->num_fonts] = strdup(name); - ppd->num_fonts ++; - } - else if (!strncmp(keyword, "ParamCustom", 11)) -@@ -1136,7 +1133,7 @@ _ppdOpen( - strlcpy(choice->text, text[0] ? text : _("Custom"), - sizeof(choice->text)); - -- choice->code = _cupsStrAlloc(string); -+ choice->code = strdup(string); - - if (custom_option->section == PPD_ORDER_JCL) - ppd_decode(choice->code); -@@ -1338,7 +1335,7 @@ _ppdOpen( - - option->section = PPD_ORDER_ANY; - -- _cupsStrFree(string); -+ free(string); - string = NULL; - - /* -@@ -1366,7 +1363,7 @@ _ppdOpen( - strlcpy(choice->text, - custom_attr->text[0] ? custom_attr->text : _("Custom"), - sizeof(choice->text)); -- choice->code = _cupsStrRetain(custom_attr->value); -+ choice->code = strdup(custom_attr->value); - } - } - else if (!strcmp(keyword, "JCLOpenUI")) -@@ -1445,7 +1442,7 @@ _ppdOpen( - option->section = PPD_ORDER_JCL; - group = NULL; - -- _cupsStrFree(string); -+ free(string); - string = NULL; - - /* -@@ -1469,7 +1466,7 @@ _ppdOpen( - strlcpy(choice->text, - custom_attr->text[0] ? custom_attr->text : _("Custom"), - sizeof(choice->text)); -- choice->code = _cupsStrRetain(custom_attr->value); -+ choice->code = strdup(custom_attr->value); - } - } - else if (!strcmp(keyword, "CloseUI")) -@@ -1483,7 +1480,7 @@ _ppdOpen( - - option = NULL; - -- _cupsStrFree(string); -+ free(string); - string = NULL; - } - else if (!strcmp(keyword, "JCLCloseUI")) -@@ -1497,7 +1494,7 @@ _ppdOpen( - - option = NULL; - -- _cupsStrFree(string); -+ free(string); - string = NULL; - } - else if (!strcmp(keyword, "OpenGroup")) -@@ -1544,14 +1541,14 @@ _ppdOpen( - if (group == NULL) - goto error; - -- _cupsStrFree(string); -+ free(string); - string = NULL; - } - else if (!strcmp(keyword, "CloseGroup")) - { - group = NULL; - -- _cupsStrFree(string); -+ free(string); - string = NULL; - } - else if (!strcmp(keyword, "OrderDependency")) -@@ -1609,7 +1606,7 @@ _ppdOpen( - option->order = order; - } - -- _cupsStrFree(string); -+ free(string); - string = NULL; - } - else if (!strncmp(keyword, "Default", 7)) -@@ -1852,7 +1849,7 @@ _ppdOpen( - * Don't add this one as an attribute... - */ - -- _cupsStrFree(string); -+ free(string); - string = NULL; - } - else if (!strcmp(keyword, "PaperDimension")) -@@ -1874,7 +1871,7 @@ _ppdOpen( - size->width = (float)_cupsStrScand(string, &sptr, loc); - size->length = (float)_cupsStrScand(sptr, NULL, loc); - -- _cupsStrFree(string); -+ free(string); - string = NULL; - } - else if (!strcmp(keyword, "ImageableArea")) -@@ -1898,7 +1895,7 @@ _ppdOpen( - size->right = (float)_cupsStrScand(sptr, &sptr, loc); - size->top = (float)_cupsStrScand(sptr, NULL, loc); - -- _cupsStrFree(string); -+ free(string); - string = NULL; - } - else if (option != NULL && -@@ -1954,7 +1951,7 @@ _ppdOpen( - (mask & (PPD_KEYWORD | PPD_STRING)) == (PPD_KEYWORD | PPD_STRING)) - ppd_add_attr(ppd, keyword, name, text, string); - else -- _cupsStrFree(string); -+ free(string); - } - - /* -@@ -1977,7 +1974,7 @@ _ppdOpen( - goto error; - } - -- ppd_free(line.buffer); -+ free(line.buffer); - - /* - * Reset language preferences... -@@ -2059,8 +2056,8 @@ _ppdOpen( - - error: - -- _cupsStrFree(string); -- ppd_free(line.buffer); -+ free(string); -+ free(line.buffer); - - ppdClose(ppd); - -@@ -2498,9 +2495,9 @@ ppd_free_filters(ppd_file_t *ppd) /* I - PPD file */ - if (ppd->num_filters > 0) - { - for (i = ppd->num_filters, filter = ppd->filters; i > 0; i --, filter ++) -- _cupsStrFree(*filter); -+ free(*filter); - -- ppd_free(ppd->filters); -+ free(ppd->filters); - - ppd->num_filters = 0; - ppd->filters = NULL; -@@ -2527,7 +2524,7 @@ ppd_free_group(ppd_group_t *group) /* I - Group to free */ - i --, option ++) - ppd_free_option(option); - -- ppd_free(group->options); -+ free(group->options); - } - - if (group->num_subgroups > 0) -@@ -2537,7 +2534,7 @@ ppd_free_group(ppd_group_t *group) /* I - Group to free */ - i --, subgroup ++) - ppd_free_group(subgroup); - -- ppd_free(group->subgroups); -+ free(group->subgroups); - } - } - -@@ -2559,10 +2556,10 @@ ppd_free_option(ppd_option_t *option) /* I - Option to free */ - i > 0; - i --, choice ++) - { -- _cupsStrFree(choice->code); -+ free(choice->code); - } - -- ppd_free(option->choices); -+ free(option->choices); - } - } - -@@ -3299,7 +3296,7 @@ ppd_read(cups_file_t *fp, /* I - File to read from */ - lineptr ++; - } - -- *string = _cupsStrAlloc(lineptr); -+ *string = strdup(lineptr); - - mask |= PPD_STRING; - } -@@ -3421,7 +3418,7 @@ ppd_update_filters(ppd_file_t *ppd, /* I - PPD file */ - filter += ppd->num_filters; - ppd->num_filters ++; - -- *filter = _cupsStrAlloc(buffer); -+ *filter = strdup(buffer); - } - while ((attr = ppdFindNextAttr(ppd, "cupsFilter2", NULL)) != NULL); - -diff --git a/cups/string.c b/cups/string.c -index 0d4ed0f50..dd9c12ce8 100644 ---- a/cups/string.c -+++ b/cups/string.c -@@ -1,8 +1,8 @@ - /* - * String functions for CUPS. - * -- * Copyright 2007-2014 by Apple Inc. -- * Copyright 1997-2007 by Easy Software Products. -+ * Copyright © 2007-2019 by Apple Inc. -+ * Copyright © 1997-2007 by Easy Software Products. - * - * These coded instructions, statements, and computer programs are the - * property of Apple Inc. and are protected by Federal copyright -@@ -316,15 +316,6 @@ _cupsStrFree(const char *s) /* I - String to free */ - - key = (_cups_sp_item_t *)(s - offsetof(_cups_sp_item_t, str)); - --#ifdef DEBUG_GUARDS -- if (key->guard != _CUPS_STR_GUARD) -- { -- DEBUG_printf(("5_cupsStrFree: Freeing string %p(%s), guard=%08x, " -- "ref_count=%d", key, key->str, key->guard, key->ref_count)); -- abort(); -- } --#endif /* DEBUG_GUARDS */ -- - if ((item = (_cups_sp_item_t *)cupsArrayFind(stringpool, key)) != NULL && - item == key) - { -@@ -332,6 +323,14 @@ _cupsStrFree(const char *s) /* I - String to free */ - * Found it, dereference... - */ - -+#ifdef DEBUG_GUARDS -+ if (key->guard != _CUPS_STR_GUARD) -+ { -+ DEBUG_printf(("5_cupsStrFree: Freeing string %p(%s), guard=%08x, ref_count=%d", key, key->str, key->guard, key->ref_count)); -+ abort(); -+ } -+#endif /* DEBUG_GUARDS */ -+ - item->ref_count --; - - if (!item->ref_count) -diff --git a/scheduler/ipp.c b/scheduler/ipp.c -index e00275b09..9be8a7f3b 100644 ---- a/scheduler/ipp.c -+++ b/scheduler/ipp.c -@@ -2601,8 +2601,7 @@ add_printer(cupsd_client_t *con, /* I - Client connection */ - if (!strcmp(attr->values[i].string.text, "none")) - continue; - -- printer->reasons[printer->num_reasons] = -- _cupsStrRetain(attr->values[i].string.text); -+ printer->reasons[printer->num_reasons] = _cupsStrAlloc(attr->values[i].string.text); - printer->num_reasons ++; - - if (!strcmp(attr->values[i].string.text, "paused") && -@@ -4892,8 +4891,9 @@ copy_printer_attrs( - - if ((p2_uri = ippFindAttribute(p2->attrs, "printer-uri-supported", - IPP_TAG_URI)) != NULL) -- member_uris->values[i].string.text = -- _cupsStrRetain(p2_uri->values[0].string.text); -+ { -+ member_uris->values[i].string.text = _cupsStrAlloc(p2_uri->values[0].string.text); -+ } - else - { - httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, diff -Nru cups-2.2.10/debian/patches/0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch cups-2.2.10/debian/patches/0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch --- cups-2.2.10/debian/patches/0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch 1970-01-01 01:00:00.000000000 +0100 +++ cups-2.2.10/debian/patches/0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch 2019-03-27 17:13:07.000000000 +0100 @@ -0,0 +1,159 @@ +From fb2f9b86fabc11f9b0fad804199064bdd555201e Mon Sep 17 00:00:00 2001 +From: Michael R Sweet <michael.r.sw...@gmail.com> +Date: Mon, 21 Jan 2019 13:44:43 -0500 +Subject: Stop parsing the Emulators keywords in PPD files (Issue #5475) + +This also addresses a potential memory leak... +--- + cups/ppd.c | 76 ++---------------------------------------------------- + cups/ppd.h | 8 +++--- + 2 files changed, 6 insertions(+), 78 deletions(-) + +diff --git a/cups/ppd.c b/cups/ppd.c +index 5f27484aa..968ea8bf3 100644 +--- a/cups/ppd.c ++++ b/cups/ppd.c +@@ -1,8 +1,8 @@ + /* + * PPD file routines for CUPS. + * +- * Copyright 2007-2018 by Apple Inc. +- * Copyright 1997-2007 by Easy Software Products, all rights reserved. ++ * Copyright © 2007-2019 by Apple Inc. ++ * Copyright © 1997-2007 by Easy Software Products, all rights reserved. + * + * These coded instructions, statements, and computer programs are the + * property of Apple Inc. and are protected by Federal copyright +@@ -117,7 +117,6 @@ void + ppdClose(ppd_file_t *ppd) /* I - PPD file record */ + { + int i; /* Looping var */ +- ppd_emul_t *emul; /* Current emulation */ + ppd_group_t *group; /* Current group */ + char **font; /* Current font */ + ppd_attr_t **attr; /* Current attribute */ +@@ -144,21 +143,6 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ + _cupsStrFree(ppd->jcl_end); + _cupsStrFree(ppd->jcl_ps); + +- /* +- * Free any emulations... +- */ +- +- if (ppd->num_emulations > 0) +- { +- for (i = ppd->num_emulations, emul = ppd->emulations; i > 0; i --, emul ++) +- { +- _cupsStrFree(emul->start); +- _cupsStrFree(emul->stop); +- } +- +- ppd_free(ppd->emulations); +- } +- + /* + * Free any UI groups, subgroups, and options... + */ +@@ -443,7 +427,6 @@ _ppdOpen( + _ppd_localization_t localization) /* I - Localization to load */ + { + int i, j, k; /* Looping vars */ +- int count; /* Temporary count */ + _ppd_line_t line; /* Line buffer */ + ppd_file_t *ppd; /* PPD file record */ + ppd_group_t *group, /* Current group */ +@@ -461,7 +444,6 @@ _ppdOpen( + /* Human-readable text from file */ + *string, /* Code/text from file */ + *sptr, /* Pointer into string */ +- *nameptr, /* Pointer into name */ + *temp, /* Temporary string pointer */ + **tempfonts; /* Temporary fonts pointer */ + float order; /* Order dependency number */ +@@ -1203,60 +1185,6 @@ _ppdOpen( + else if (!strcmp(string, "Plus90")) + ppd->landscape = 90; + } +- else if (!strcmp(keyword, "Emulators") && string) +- { +- for (count = 1, sptr = string; sptr != NULL;) +- if ((sptr = strchr(sptr, ' ')) != NULL) +- { +- count ++; +- while (*sptr == ' ') +- sptr ++; +- } +- +- ppd->num_emulations = count; +- if ((ppd->emulations = calloc((size_t)count, sizeof(ppd_emul_t))) == NULL) +- { +- pg->ppd_status = PPD_ALLOC_ERROR; +- +- goto error; +- } +- +- for (i = 0, sptr = string; i < count; i ++) +- { +- for (nameptr = ppd->emulations[i].name; +- *sptr != '\0' && *sptr != ' '; +- sptr ++) +- if (nameptr < (ppd->emulations[i].name + sizeof(ppd->emulations[i].name) - 1)) +- *nameptr++ = *sptr; +- +- *nameptr = '\0'; +- +- while (*sptr == ' ') +- sptr ++; +- } +- } +- else if (!strncmp(keyword, "StartEmulator_", 14)) +- { +- ppd_decode(string); +- +- for (i = 0; i < ppd->num_emulations; i ++) +- if (!strcmp(keyword + 14, ppd->emulations[i].name)) +- { +- ppd->emulations[i].start = string; +- string = NULL; +- } +- } +- else if (!strncmp(keyword, "StopEmulator_", 13)) +- { +- ppd_decode(string); +- +- for (i = 0; i < ppd->num_emulations; i ++) +- if (!strcmp(keyword + 13, ppd->emulations[i].name)) +- { +- ppd->emulations[i].stop = string; +- string = NULL; +- } +- } + else if (!strcmp(keyword, "JobPatchFile")) + { + /* +diff --git a/cups/ppd.h b/cups/ppd.h +index 6e628cb60..ae63c0d66 100644 +--- a/cups/ppd.h ++++ b/cups/ppd.h +@@ -5,8 +5,8 @@ + * -D_PPD_DEPRECATED="" TO YOUR COMPILE OPTIONS. THIS HEADER AND THESE + * FUNCTIONS WILL BE REMOVED IN A FUTURE RELEASE OF CUPS. + * +- * Copyright 2007-2015 by Apple Inc. +- * Copyright 1997-2007 by Easy Software Products, all rights reserved. ++ * Copyright © 2007-2019 by Apple Inc. ++ * Copyright © 1997-2007 by Easy Software Products, all rights reserved. + * + * These coded instructions, statements, and computer programs are the + * property of Apple Inc. and are protected by Federal copyright +@@ -304,8 +304,8 @@ typedef struct ppd_file_s /**** PPD File ****/ + int throughput; /* Pages per minute */ + ppd_cs_t colorspace; /* Default colorspace */ + char *patches; /* Patch commands to be sent to printer */ +- int num_emulations; /* Number of emulations supported */ +- ppd_emul_t *emulations; /* Emulations and the code to invoke them */ ++ int num_emulations; /* Number of emulations supported (no longer supported) @private@ */ ++ ppd_emul_t *emulations; /* Emulations and the code to invoke them (no longer supported) @private@ */ + char *jcl_begin; /* Start JCL commands */ + char *jcl_ps; /* Enter PostScript interpreter */ + char *jcl_end; /* End JCL commands */ diff -Nru cups-2.2.10/debian/patches/0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch cups-2.2.10/debian/patches/0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch --- cups-2.2.10/debian/patches/0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch 1970-01-01 01:00:00.000000000 +0100 +++ cups-2.2.10/debian/patches/0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch 2019-03-27 17:13:07.000000000 +0100 @@ -0,0 +1,1130 @@ +From ffbb46708544f6408bc72f200aa7365ba1222f97 Mon Sep 17 00:00:00 2001 +From: Michael R Sweet <michael.r.sw...@gmail.com> +Date: Mon, 21 Jan 2019 14:21:57 -0500 +Subject: Fix potential unaligned accesses in the string pool (Issue #5474) + +This set of changes makes the PPD functions use strdup and free - they were +modifying the contents of the string in places and doing other things that +were not safe for (immutable) strings in the pool. + +Clean out some more _cupsStr cruft that might potentially cause an unaligned memory access (Issue #5474) + +Don't directly use the string pool in the CGI programs or scheduler. +--- + cgi-bin/admin.c | 12 ++--- + cgi-bin/var.c | 42 +++++++-------- + cups/ppd-cache.c | 134 +++++++++++++++++++++-------------------------- + cups/ppd-mark.c | 12 ++--- + cups/ppd.c | 115 ++++++++++++++++++++-------------------- + cups/string.c | 21 ++++---- + scheduler/ipp.c | 8 +-- + 7 files changed, 161 insertions(+), 183 deletions(-) + +diff --git a/cgi-bin/admin.c b/cgi-bin/admin.c +index 690fbbc73..06199a96b 100644 +--- a/cgi-bin/admin.c ++++ b/cgi-bin/admin.c +@@ -767,7 +767,7 @@ do_am_class(http_t *http, /* I - HTTP connection */ + attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_URI, "member-uris", + num_printers, NULL, NULL); + for (i = 0; i < num_printers; i ++) +- attr->values[i].string.text = _cupsStrAlloc(cgiGetArray("MEMBER_URIS", i)); ++ ippSetString(request, &attr, i, cgiGetArray("MEMBER_URIS", i)); + } + + /* +@@ -2417,7 +2417,7 @@ do_list_printers(http_t *http) /* I - HTTP connection */ + attr; + attr = ippFindNextAttribute(response, "device-uri", IPP_TAG_URI)) + { +- cupsArrayAdd(printer_devices, _cupsStrAlloc(attr->values[0].string.text)); ++ cupsArrayAdd(printer_devices, strdup(attr->values[0].string.text)); + } + + /* +@@ -2555,7 +2555,7 @@ do_list_printers(http_t *http) /* I - HTTP connection */ + for (printer_device = (char *)cupsArrayFirst(printer_devices); + printer_device; + printer_device = (char *)cupsArrayNext(printer_devices)) +- _cupsStrFree(printer_device); ++ free(printer_device); + + cupsArrayDelete(printer_devices); + } +@@ -2952,7 +2952,7 @@ do_set_allowed_users(http_t *http) /* I - HTTP connection */ + * Add the name... + */ + +- attr->values[i].string.text = _cupsStrAlloc(ptr); ++ ippSetString(request, &attr, i, ptr); + + /* + * Advance to the next name... +@@ -3761,8 +3761,8 @@ do_set_options(http_t *http, /* I - HTTP connection */ + + attr = ippAddStrings(request, IPP_TAG_PRINTER, IPP_TAG_NAME, + "job-sheets-default", 2, NULL, NULL); +- attr->values[0].string.text = _cupsStrAlloc(cgiGetVariable("job_sheets_start")); +- attr->values[1].string.text = _cupsStrAlloc(cgiGetVariable("job_sheets_end")); ++ ippSetString(request, &attr, 0, cgiGetVariable("job_sheets_start")); ++ ippSetString(request, &attr, 1, cgiGetVariable("job_sheets_end")); + + if ((var = cgiGetVariable("printer_error_policy")) != NULL) + ippAddString(request, IPP_TAG_PRINTER, IPP_TAG_NAME, +diff --git a/cgi-bin/var.c b/cgi-bin/var.c +index 579f23ba3..8b8f26472 100644 +--- a/cgi-bin/var.c ++++ b/cgi-bin/var.c +@@ -1,8 +1,8 @@ + /* + * CGI form variable and array functions for CUPS. + * +- * Copyright 2007-2015 by Apple Inc. +- * Copyright 1997-2005 by Easy Software Products. ++ * Copyright © 2007-2019 by Apple Inc. ++ * Copyright © 1997-2005 by Easy Software Products. + * + * These coded instructions, statements, and computer programs are the + * property of Apple Inc. and are protected by Federal copyright +@@ -33,10 +33,10 @@ + + typedef struct /**** Form variable structure ****/ + { +- const char *name; /* Name of variable */ ++ char *name; /* Name of variable */ + int nvalues, /* Number of values */ + avalues; /* Number of values allocated */ +- const char **values; /* Value(s) of variable */ ++ char **values; /* Value(s) of variable */ + } _cgi_var_t; + + +@@ -139,10 +139,10 @@ cgiClearVariables(void) + + for (v = form_vars, i = form_count; i > 0; v ++, i --) + { +- _cupsStrFree(v->name); ++ free(v->name); + for (j = 0; j < v->nvalues; j ++) + if (v->values[j]) +- _cupsStrFree(v->values[j]); ++ free(v->values[j]); + } + + form_count = 0; +@@ -168,7 +168,7 @@ cgiGetArray(const char *name, /* I - Name of array variable */ + if (element < 0 || element >= var->nvalues) + return (NULL); + +- return (_cupsStrRetain(var->values[element])); ++ return (strdup(var->values[element])); + } + + +@@ -234,7 +234,7 @@ cgiGetVariable(const char *name) /* I - Name of variable */ + var->values[var->nvalues - 1])); + #endif /* DEBUG */ + +- return ((var == NULL) ? NULL : _cupsStrRetain(var->values[var->nvalues - 1])); ++ return ((var == NULL) ? NULL : strdup(var->values[var->nvalues - 1])); + } + + +@@ -382,10 +382,9 @@ cgiSetArray(const char *name, /* I - Name of variable */ + { + if (element >= var->avalues) + { +- const char **temp; /* Temporary pointer */ ++ char **temp; /* Temporary pointer */ + +- temp = (const char **)realloc((void *)(var->values), +- sizeof(char *) * (size_t)(element + 16)); ++ temp = (char **)realloc((void *)(var->values), sizeof(char *) * (size_t)(element + 16)); + if (!temp) + return; + +@@ -401,9 +400,9 @@ cgiSetArray(const char *name, /* I - Name of variable */ + var->nvalues = element + 1; + } + else if (var->values[element]) +- _cupsStrFree((char *)var->values[element]); ++ free((char *)var->values[element]); + +- var->values[element] = _cupsStrAlloc(value); ++ var->values[element] = strdup(value); + } + } + +@@ -460,10 +459,9 @@ cgiSetSize(const char *name, /* I - Name of variable */ + + if (size >= var->avalues) + { +- const char **temp; /* Temporary pointer */ ++ char **temp; /* Temporary pointer */ + +- temp = (const char **)realloc((void *)(var->values), +- sizeof(char *) * (size_t)(size + 16)); ++ temp = (char **)realloc((void *)(var->values), sizeof(char *) * (size_t)(size + 16)); + if (!temp) + return; + +@@ -480,7 +478,7 @@ cgiSetSize(const char *name, /* I - Name of variable */ + { + for (i = size; i < var->nvalues; i ++) + if (var->values[i]) +- _cupsStrFree((void *)(var->values[i])); ++ free((void *)(var->values[i])); + } + + var->nvalues = size; +@@ -515,9 +513,9 @@ cgiSetVariable(const char *name, /* I - Name of variable */ + { + for (i = 0; i < var->nvalues; i ++) + if (var->values[i]) +- _cupsStrFree((char *)var->values[i]); ++ free((char *)var->values[i]); + +- var->values[0] = _cupsStrAlloc(value); ++ var->values[0] = strdup(value); + var->nvalues = 1; + } + } +@@ -563,10 +561,10 @@ cgi_add_variable(const char *name, /* I - Variable name */ + if ((var->values = calloc((size_t)element + 1, sizeof(char *))) == NULL) + return; + +- var->name = _cupsStrAlloc(name); ++ var->name = strdup(name); + var->nvalues = element + 1; + var->avalues = element + 1; +- var->values[element] = _cupsStrAlloc(value); ++ var->values[element] = strdup(value); + + form_count ++; + } +@@ -598,7 +596,7 @@ cgi_find_variable(const char *name) /* I - Name of variable */ + if (form_count < 1 || name == NULL) + return (NULL); + +- key.name = name; ++ key.name = (char *)name; + + return ((_cgi_var_t *)bsearch(&key, form_vars, (size_t)form_count, sizeof(_cgi_var_t), + (int (*)(const void *, const void *))cgi_compare_variables)); +diff --git a/cups/ppd-cache.c b/cups/ppd-cache.c +index ab91f0fd4..8b496e3b2 100644 +--- a/cups/ppd-cache.c ++++ b/cups/ppd-cache.c +@@ -1,7 +1,7 @@ + /* + * PPD cache implementation for CUPS. + * +- * Copyright © 2010-2018 by Apple Inc. ++ * Copyright © 2010-2019 by Apple Inc. + * + * These coded instructions, statements, and computer programs are the + * property of Apple Inc. and are protected by Federal copyright +@@ -508,24 +508,20 @@ _ppdCacheCreateWithFile( + else if (!_cups_strcasecmp(line, "Filter")) + { + if (!pc->filters) +- pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, +- (cups_acopy_func_t)_cupsStrAlloc, +- (cups_afree_func_t)_cupsStrFree); ++ pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); + + cupsArrayAdd(pc->filters, value); + } + else if (!_cups_strcasecmp(line, "PreFilter")) + { + if (!pc->prefilters) +- pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, +- (cups_acopy_func_t)_cupsStrAlloc, +- (cups_afree_func_t)_cupsStrFree); ++ pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); + + cupsArrayAdd(pc->prefilters, value); + } + else if (!_cups_strcasecmp(line, "Product")) + { +- pc->product = _cupsStrAlloc(value); ++ pc->product = strdup(value); + } + else if (!_cups_strcasecmp(line, "SingleFile")) + { +@@ -625,8 +621,8 @@ _ppdCacheCreateWithFile( + } + + map = pc->bins + pc->num_bins; +- map->pwg = _cupsStrAlloc(pwg_keyword); +- map->ppd = _cupsStrAlloc(ppd_keyword); ++ map->pwg = strdup(pwg_keyword); ++ map->ppd = strdup(ppd_keyword); + + pc->num_bins ++; + } +@@ -680,8 +676,8 @@ _ppdCacheCreateWithFile( + goto create_error; + } + +- size->map.pwg = _cupsStrAlloc(pwg_keyword); +- size->map.ppd = _cupsStrAlloc(ppd_keyword); ++ size->map.pwg = strdup(pwg_keyword); ++ size->map.ppd = strdup(ppd_keyword); + + pc->num_sizes ++; + } +@@ -709,15 +705,15 @@ _ppdCacheCreateWithFile( + + pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "max", + pc->custom_max_width, pc->custom_max_length, NULL); +- pc->custom_max_keyword = _cupsStrAlloc(pwg_keyword); ++ pc->custom_max_keyword = strdup(pwg_keyword); + + pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "min", + pc->custom_min_width, pc->custom_min_length, NULL); +- pc->custom_min_keyword = _cupsStrAlloc(pwg_keyword); ++ pc->custom_min_keyword = strdup(pwg_keyword); + } + else if (!_cups_strcasecmp(line, "SourceOption")) + { +- pc->source_option = _cupsStrAlloc(value); ++ pc->source_option = strdup(value); + } + else if (!_cups_strcasecmp(line, "NumSources")) + { +@@ -764,8 +760,8 @@ _ppdCacheCreateWithFile( + } + + map = pc->sources + pc->num_sources; +- map->pwg = _cupsStrAlloc(pwg_keyword); +- map->ppd = _cupsStrAlloc(ppd_keyword); ++ map->pwg = strdup(pwg_keyword); ++ map->ppd = strdup(ppd_keyword); + + pc->num_sources ++; + } +@@ -813,8 +809,8 @@ _ppdCacheCreateWithFile( + } + + map = pc->types + pc->num_types; +- map->pwg = _cupsStrAlloc(pwg_keyword); +- map->ppd = _cupsStrAlloc(ppd_keyword); ++ map->pwg = strdup(pwg_keyword); ++ map->ppd = strdup(ppd_keyword); + + pc->num_types ++; + } +@@ -844,13 +840,13 @@ _ppdCacheCreateWithFile( + pc->presets[print_color_mode] + print_quality); + } + else if (!_cups_strcasecmp(line, "SidesOption")) +- pc->sides_option = _cupsStrAlloc(value); ++ pc->sides_option = strdup(value); + else if (!_cups_strcasecmp(line, "Sides1Sided")) +- pc->sides_1sided = _cupsStrAlloc(value); ++ pc->sides_1sided = strdup(value); + else if (!_cups_strcasecmp(line, "Sides2SidedLong")) +- pc->sides_2sided_long = _cupsStrAlloc(value); ++ pc->sides_2sided_long = strdup(value); + else if (!_cups_strcasecmp(line, "Sides2SidedShort")) +- pc->sides_2sided_short = _cupsStrAlloc(value); ++ pc->sides_2sided_short = strdup(value); + else if (!_cups_strcasecmp(line, "Finishings")) + { + if (!pc->finishings) +@@ -871,13 +867,13 @@ _ppdCacheCreateWithFile( + else if (!_cups_strcasecmp(line, "MaxCopies")) + pc->max_copies = atoi(value); + else if (!_cups_strcasecmp(line, "ChargeInfoURI")) +- pc->charge_info_uri = _cupsStrAlloc(value); ++ pc->charge_info_uri = strdup(value); + else if (!_cups_strcasecmp(line, "JobAccountId")) + pc->account_id = !_cups_strcasecmp(value, "true"); + else if (!_cups_strcasecmp(line, "JobAccountingUserId")) + pc->accounting_user_id = !_cups_strcasecmp(value, "true"); + else if (!_cups_strcasecmp(line, "JobPassword")) +- pc->password = _cupsStrAlloc(value); ++ pc->password = strdup(value); + else if (!_cups_strcasecmp(line, "Mandatory")) + { + if (pc->mandatory) +@@ -888,9 +884,7 @@ _ppdCacheCreateWithFile( + else if (!_cups_strcasecmp(line, "SupportFile")) + { + if (!pc->support_files) +- pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, +- (cups_acopy_func_t)_cupsStrAlloc, +- (cups_afree_func_t)_cupsStrFree); ++ pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); + + cupsArrayAdd(pc->support_files, value); + } +@@ -1130,8 +1124,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + */ + + new_size = old_size; +- _cupsStrFree(old_size->map.ppd); +- _cupsStrFree(old_size->map.pwg); ++ free(old_size->map.ppd); ++ free(old_size->map.pwg); + } + } + +@@ -1152,8 +1146,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + * Save this size... + */ + +- new_size->map.ppd = _cupsStrAlloc(ppd_size->name); +- new_size->map.pwg = _cupsStrAlloc(pwg_name); ++ new_size->map.ppd = strdup(ppd_size->name); ++ new_size->map.pwg = strdup(pwg_name); + new_size->width = new_width; + new_size->length = new_length; + new_size->left = new_left; +@@ -1173,14 +1167,14 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "max", + PWG_FROM_POINTS(ppd->custom_max[0]), + PWG_FROM_POINTS(ppd->custom_max[1]), NULL); +- pc->custom_max_keyword = _cupsStrAlloc(pwg_keyword); ++ pc->custom_max_keyword = strdup(pwg_keyword); + pc->custom_max_width = PWG_FROM_POINTS(ppd->custom_max[0]); + pc->custom_max_length = PWG_FROM_POINTS(ppd->custom_max[1]); + + pwgFormatSizeName(pwg_keyword, sizeof(pwg_keyword), "custom", "min", + PWG_FROM_POINTS(ppd->custom_min[0]), + PWG_FROM_POINTS(ppd->custom_min[1]), NULL); +- pc->custom_min_keyword = _cupsStrAlloc(pwg_keyword); ++ pc->custom_min_keyword = strdup(pwg_keyword); + pc->custom_min_width = PWG_FROM_POINTS(ppd->custom_min[0]); + pc->custom_min_length = PWG_FROM_POINTS(ppd->custom_min[1]); + +@@ -1199,7 +1193,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + + if (input_slot) + { +- pc->source_option = _cupsStrAlloc(input_slot->keyword); ++ pc->source_option = strdup(input_slot->keyword); + + if ((pc->sources = calloc((size_t)input_slot->num_choices, sizeof(pwg_map_t))) == NULL) + { +@@ -1251,8 +1245,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + "_"); + } + +- map->pwg = _cupsStrAlloc(pwg_name); +- map->ppd = _cupsStrAlloc(choice->choice); ++ map->pwg = strdup(pwg_name); ++ map->ppd = strdup(choice->choice); + } + } + +@@ -1315,8 +1309,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + "_"); + } + +- map->pwg = _cupsStrAlloc(pwg_name); +- map->ppd = _cupsStrAlloc(choice->choice); ++ map->pwg = strdup(pwg_name); ++ map->ppd = strdup(choice->choice); + } + } + +@@ -1342,8 +1336,8 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + { + pwg_unppdize_name(choice->choice, pwg_keyword, sizeof(pwg_keyword), "_"); + +- map->pwg = _cupsStrAlloc(pwg_keyword); +- map->ppd = _cupsStrAlloc(choice->choice); ++ map->pwg = strdup(pwg_keyword); ++ map->ppd = strdup(choice->choice); + } + } + +@@ -1558,7 +1552,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + + if (duplex) + { +- pc->sides_option = _cupsStrAlloc(duplex->keyword); ++ pc->sides_option = strdup(duplex->keyword); + + for (i = duplex->num_choices, choice = duplex->choices; + i > 0; +@@ -1566,16 +1560,16 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + { + if ((!_cups_strcasecmp(choice->choice, "None") || + !_cups_strcasecmp(choice->choice, "False")) && !pc->sides_1sided) +- pc->sides_1sided = _cupsStrAlloc(choice->choice); ++ pc->sides_1sided = strdup(choice->choice); + else if ((!_cups_strcasecmp(choice->choice, "DuplexNoTumble") || + !_cups_strcasecmp(choice->choice, "LongEdge") || + !_cups_strcasecmp(choice->choice, "Top")) && !pc->sides_2sided_long) +- pc->sides_2sided_long = _cupsStrAlloc(choice->choice); ++ pc->sides_2sided_long = strdup(choice->choice); + else if ((!_cups_strcasecmp(choice->choice, "DuplexTumble") || + !_cups_strcasecmp(choice->choice, "ShortEdge") || + !_cups_strcasecmp(choice->choice, "Bottom")) && + !pc->sides_2sided_short) +- pc->sides_2sided_short = _cupsStrAlloc(choice->choice); ++ pc->sides_2sided_short = strdup(choice->choice); + } + } + +@@ -1583,9 +1577,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + * Copy filters and pre-filters... + */ + +- pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, +- (cups_acopy_func_t)_cupsStrAlloc, +- (cups_afree_func_t)_cupsStrFree); ++ pc->filters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); + + cupsArrayAdd(pc->filters, + "application/vnd.cups-raw application/octet-stream 0 -"); +@@ -1642,9 +1634,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + + if ((ppd_attr = ppdFindAttr(ppd, "cupsPreFilter", NULL)) != NULL) + { +- pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, +- (cups_acopy_func_t)_cupsStrAlloc, +- (cups_afree_func_t)_cupsStrFree); ++ pc->prefilters = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); + + do + { +@@ -1661,7 +1651,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + */ + + if (ppd->product) +- pc->product = _cupsStrAlloc(ppd->product); ++ pc->product = strdup(ppd->product); + + /* + * Copy finishings mapping data... +@@ -1818,7 +1808,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + */ + + if ((ppd_attr = ppdFindAttr(ppd, "cupsChargeInfoURI", NULL)) != NULL) +- pc->charge_info_uri = _cupsStrAlloc(ppd_attr->value); ++ pc->charge_info_uri = strdup(ppd_attr->value); + + if ((ppd_attr = ppdFindAttr(ppd, "cupsJobAccountId", NULL)) != NULL) + pc->account_id = !_cups_strcasecmp(ppd_attr->value, "true"); +@@ -1827,7 +1817,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + pc->accounting_user_id = !_cups_strcasecmp(ppd_attr->value, "true"); + + if ((ppd_attr = ppdFindAttr(ppd, "cupsJobPassword", NULL)) != NULL) +- pc->password = _cupsStrAlloc(ppd_attr->value); ++ pc->password = strdup(ppd_attr->value); + + if ((ppd_attr = ppdFindAttr(ppd, "cupsMandatory", NULL)) != NULL) + pc->mandatory = _cupsArrayNewStrings(ppd_attr->value, ' '); +@@ -1836,9 +1826,7 @@ _ppdCacheCreateWithPPD(ppd_file_t *ppd) /* I - PPD file */ + * Support files... + */ + +- pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, +- (cups_acopy_func_t)_cupsStrAlloc, +- (cups_afree_func_t)_cupsStrFree); ++ pc->support_files = cupsArrayNew3(NULL, NULL, NULL, 0, (cups_acopy_func_t)strdup, (cups_afree_func_t)free); + + for (ppd_attr = ppdFindAttr(ppd, "cupsICCProfile", NULL); + ppd_attr; +@@ -1894,8 +1882,8 @@ _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */ + { + for (i = pc->num_bins, map = pc->bins; i > 0; i --, map ++) + { +- _cupsStrFree(map->pwg); +- _cupsStrFree(map->ppd); ++ free(map->pwg); ++ free(map->ppd); + } + + free(pc->bins); +@@ -1905,22 +1893,21 @@ _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */ + { + for (i = pc->num_sizes, size = pc->sizes; i > 0; i --, size ++) + { +- _cupsStrFree(size->map.pwg); +- _cupsStrFree(size->map.ppd); ++ free(size->map.pwg); ++ free(size->map.ppd); + } + + free(pc->sizes); + } + +- if (pc->source_option) +- _cupsStrFree(pc->source_option); ++ free(pc->source_option); + + if (pc->sources) + { + for (i = pc->num_sources, map = pc->sources; i > 0; i --, map ++) + { +- _cupsStrFree(map->pwg); +- _cupsStrFree(map->ppd); ++ free(map->pwg); ++ free(map->ppd); + } + + free(pc->sources); +@@ -1930,26 +1917,23 @@ _ppdCacheDestroy(_ppd_cache_t *pc) /* I - PPD cache and mapping data */ + { + for (i = pc->num_types, map = pc->types; i > 0; i --, map ++) + { +- _cupsStrFree(map->pwg); +- _cupsStrFree(map->ppd); ++ free(map->pwg); ++ free(map->ppd); + } + + free(pc->types); + } + +- if (pc->custom_max_keyword) +- _cupsStrFree(pc->custom_max_keyword); +- +- if (pc->custom_min_keyword) +- _cupsStrFree(pc->custom_min_keyword); ++ free(pc->custom_max_keyword); ++ free(pc->custom_min_keyword); + +- _cupsStrFree(pc->product); ++ free(pc->product); + cupsArrayDelete(pc->filters); + cupsArrayDelete(pc->prefilters); + cupsArrayDelete(pc->finishings); + +- _cupsStrFree(pc->charge_info_uri); +- _cupsStrFree(pc->password); ++ free(pc->charge_info_uri); ++ free(pc->password); + + cupsArrayDelete(pc->mandatory); + +diff --git a/cups/ppd-mark.c b/cups/ppd-mark.c +index 464c09a98..2d106ba9e 100644 +--- a/cups/ppd-mark.c ++++ b/cups/ppd-mark.c +@@ -1,8 +1,8 @@ + /* + * Option marking routines for CUPS. + * +- * Copyright 2007-2017 by Apple Inc. +- * Copyright 1997-2007 by Easy Software Products, all rights reserved. ++ * Copyright © 2007-2019 by Apple Inc. ++ * Copyright © 1997-2007 by Easy Software Products, all rights reserved. + * + * These coded instructions, statements, and computer programs are the + * property of Apple Inc. and are protected by Federal copyright +@@ -890,9 +890,9 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */ + case PPD_CUSTOM_PASSWORD : + case PPD_CUSTOM_STRING : + if (cparam->current.custom_string) +- _cupsStrFree(cparam->current.custom_string); ++ free(cparam->current.custom_string); + +- cparam->current.custom_string = _cupsStrAlloc(choice + 7); ++ cparam->current.custom_string = strdup(choice + 7); + break; + } + } +@@ -967,9 +967,9 @@ ppd_mark_option(ppd_file_t *ppd, /* I - PPD file */ + case PPD_CUSTOM_PASSWORD : + case PPD_CUSTOM_STRING : + if (cparam->current.custom_string) +- _cupsStrFree(cparam->current.custom_string); ++ free(cparam->current.custom_string); + +- cparam->current.custom_string = _cupsStrRetain(val->value); ++ cparam->current.custom_string = strdup(val->value); + break; + } + } +diff --git a/cups/ppd.c b/cups/ppd.c +index 968ea8bf3..435b992f4 100644 +--- a/cups/ppd.c ++++ b/cups/ppd.c +@@ -34,8 +34,6 @@ + * Definitions... + */ + +-#define ppd_free(p) if (p) free(p) /* Safe free macro */ +- + #define PPD_KEYWORD 1 /* Line contained a keyword */ + #define PPD_OPTION 2 /* Line contained an option name */ + #define PPD_TEXT 4 /* Line contained human-readable text */ +@@ -135,13 +133,12 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ + * Free all strings at the top level... + */ + +- _cupsStrFree(ppd->lang_encoding); +- _cupsStrFree(ppd->nickname); +- if (ppd->patches) +- free(ppd->patches); +- _cupsStrFree(ppd->jcl_begin); +- _cupsStrFree(ppd->jcl_end); +- _cupsStrFree(ppd->jcl_ps); ++ free(ppd->lang_encoding); ++ free(ppd->nickname); ++ free(ppd->patches); ++ free(ppd->jcl_begin); ++ free(ppd->jcl_end); ++ free(ppd->jcl_ps); + + /* + * Free any UI groups, subgroups, and options... +@@ -152,7 +149,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ + for (i = ppd->num_groups, group = ppd->groups; i > 0; i --, group ++) + ppd_free_group(group); + +- ppd_free(ppd->groups); ++ free(ppd->groups); + } + + cupsArrayDelete(ppd->options); +@@ -163,14 +160,14 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ + */ + + if (ppd->num_sizes > 0) +- ppd_free(ppd->sizes); ++ free(ppd->sizes); + + /* + * Free any constraints... + */ + + if (ppd->num_consts > 0) +- ppd_free(ppd->consts); ++ free(ppd->consts); + + /* + * Free any filters... +@@ -185,9 +182,9 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ + if (ppd->num_fonts > 0) + { + for (i = ppd->num_fonts, font = ppd->fonts; i > 0; i --, font ++) +- _cupsStrFree(*font); ++ free(*font); + +- ppd_free(ppd->fonts); ++ free(ppd->fonts); + } + + /* +@@ -195,7 +192,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ + */ + + if (ppd->num_profiles > 0) +- ppd_free(ppd->profiles); ++ free(ppd->profiles); + + /* + * Free any attributes... +@@ -205,11 +202,11 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ + { + for (i = ppd->num_attrs, attr = ppd->attrs; i > 0; i --, attr ++) + { +- _cupsStrFree((*attr)->value); +- ppd_free(*attr); ++ free((*attr)->value); ++ free(*attr); + } + +- ppd_free(ppd->attrs); ++ free(ppd->attrs); + } + + cupsArrayDelete(ppd->sorted_attrs); +@@ -231,7 +228,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ + case PPD_CUSTOM_PASSCODE : + case PPD_CUSTOM_PASSWORD : + case PPD_CUSTOM_STRING : +- _cupsStrFree(cparam->current.custom_string); ++ free(cparam->current.custom_string); + break; + + default : +@@ -279,7 +276,7 @@ ppdClose(ppd_file_t *ppd) /* I - PPD file record */ + * Free the whole record... + */ + +- ppd_free(ppd); ++ free(ppd); + } + + +@@ -617,15 +614,15 @@ _ppdOpen( + if (pg->ppd_status == PPD_OK) + pg->ppd_status = PPD_MISSING_PPDADOBE4; + +- _cupsStrFree(string); +- ppd_free(line.buffer); ++ free(string); ++ free(line.buffer); + + return (NULL); + } + + DEBUG_printf(("2_ppdOpen: keyword=%s, string=%p", keyword, string)); + +- _cupsStrFree(string); ++ free(string); + + /* + * Allocate memory for the PPD file record... +@@ -635,8 +632,8 @@ _ppdOpen( + { + pg->ppd_status = PPD_ALLOC_ERROR; + +- _cupsStrFree(string); +- ppd_free(line.buffer); ++ free(string); ++ free(line.buffer); + + return (NULL); + } +@@ -833,7 +830,7 @@ _ppdOpen( + * Say all PPD files are UTF-8, since we convert to UTF-8... + */ + +- ppd->lang_encoding = _cupsStrAlloc("UTF-8"); ++ ppd->lang_encoding = strdup("UTF-8"); + encoding = _ppdGetEncoding(string); + } + else if (!strcmp(keyword, "LanguageVersion")) +@@ -854,10 +851,10 @@ _ppdOpen( + + + cupsCharsetToUTF8(utf8, string, sizeof(utf8), encoding); +- ppd->nickname = _cupsStrAlloc((char *)utf8); ++ ppd->nickname = strdup((char *)utf8); + } + else +- ppd->nickname = _cupsStrAlloc(string); ++ ppd->nickname = strdup(string); + } + else if (!strcmp(keyword, "Product")) + ppd->product = string; +@@ -867,17 +864,17 @@ _ppdOpen( + ppd->ttrasterizer = string; + else if (!strcmp(keyword, "JCLBegin")) + { +- ppd->jcl_begin = _cupsStrAlloc(string); ++ ppd->jcl_begin = strdup(string); + ppd_decode(ppd->jcl_begin); /* Decode quoted string */ + } + else if (!strcmp(keyword, "JCLEnd")) + { +- ppd->jcl_end = _cupsStrAlloc(string); ++ ppd->jcl_end = strdup(string); + ppd_decode(ppd->jcl_end); /* Decode quoted string */ + } + else if (!strcmp(keyword, "JCLToPSInterpreter")) + { +- ppd->jcl_ps = _cupsStrAlloc(string); ++ ppd->jcl_ps = strdup(string); + ppd_decode(ppd->jcl_ps); /* Decode quoted string */ + } + else if (!strcmp(keyword, "AccurateScreensSupport")) +@@ -945,10 +942,10 @@ _ppdOpen( + ppd->num_filters ++; + + /* +- * Retain a copy of the filter string... ++ * Make a copy of the filter string... + */ + +- *filter = _cupsStrRetain(string); ++ *filter = strdup(string); + } + else if (!strcmp(keyword, "Throughput")) + ppd->throughput = atoi(string); +@@ -971,7 +968,7 @@ _ppdOpen( + } + + ppd->fonts = tempfonts; +- ppd->fonts[ppd->num_fonts] = _cupsStrAlloc(name); ++ ppd->fonts[ppd->num_fonts] = strdup(name); + ppd->num_fonts ++; + } + else if (!strncmp(keyword, "ParamCustom", 11)) +@@ -1136,7 +1133,7 @@ _ppdOpen( + strlcpy(choice->text, text[0] ? text : _("Custom"), + sizeof(choice->text)); + +- choice->code = _cupsStrAlloc(string); ++ choice->code = strdup(string); + + if (custom_option->section == PPD_ORDER_JCL) + ppd_decode(choice->code); +@@ -1338,7 +1335,7 @@ _ppdOpen( + + option->section = PPD_ORDER_ANY; + +- _cupsStrFree(string); ++ free(string); + string = NULL; + + /* +@@ -1366,7 +1363,7 @@ _ppdOpen( + strlcpy(choice->text, + custom_attr->text[0] ? custom_attr->text : _("Custom"), + sizeof(choice->text)); +- choice->code = _cupsStrRetain(custom_attr->value); ++ choice->code = strdup(custom_attr->value); + } + } + else if (!strcmp(keyword, "JCLOpenUI")) +@@ -1445,7 +1442,7 @@ _ppdOpen( + option->section = PPD_ORDER_JCL; + group = NULL; + +- _cupsStrFree(string); ++ free(string); + string = NULL; + + /* +@@ -1469,7 +1466,7 @@ _ppdOpen( + strlcpy(choice->text, + custom_attr->text[0] ? custom_attr->text : _("Custom"), + sizeof(choice->text)); +- choice->code = _cupsStrRetain(custom_attr->value); ++ choice->code = strdup(custom_attr->value); + } + } + else if (!strcmp(keyword, "CloseUI")) +@@ -1483,7 +1480,7 @@ _ppdOpen( + + option = NULL; + +- _cupsStrFree(string); ++ free(string); + string = NULL; + } + else if (!strcmp(keyword, "JCLCloseUI")) +@@ -1497,7 +1494,7 @@ _ppdOpen( + + option = NULL; + +- _cupsStrFree(string); ++ free(string); + string = NULL; + } + else if (!strcmp(keyword, "OpenGroup")) +@@ -1544,14 +1541,14 @@ _ppdOpen( + if (group == NULL) + goto error; + +- _cupsStrFree(string); ++ free(string); + string = NULL; + } + else if (!strcmp(keyword, "CloseGroup")) + { + group = NULL; + +- _cupsStrFree(string); ++ free(string); + string = NULL; + } + else if (!strcmp(keyword, "OrderDependency")) +@@ -1609,7 +1606,7 @@ _ppdOpen( + option->order = order; + } + +- _cupsStrFree(string); ++ free(string); + string = NULL; + } + else if (!strncmp(keyword, "Default", 7)) +@@ -1852,7 +1849,7 @@ _ppdOpen( + * Don't add this one as an attribute... + */ + +- _cupsStrFree(string); ++ free(string); + string = NULL; + } + else if (!strcmp(keyword, "PaperDimension")) +@@ -1874,7 +1871,7 @@ _ppdOpen( + size->width = (float)_cupsStrScand(string, &sptr, loc); + size->length = (float)_cupsStrScand(sptr, NULL, loc); + +- _cupsStrFree(string); ++ free(string); + string = NULL; + } + else if (!strcmp(keyword, "ImageableArea")) +@@ -1898,7 +1895,7 @@ _ppdOpen( + size->right = (float)_cupsStrScand(sptr, &sptr, loc); + size->top = (float)_cupsStrScand(sptr, NULL, loc); + +- _cupsStrFree(string); ++ free(string); + string = NULL; + } + else if (option != NULL && +@@ -1954,7 +1951,7 @@ _ppdOpen( + (mask & (PPD_KEYWORD | PPD_STRING)) == (PPD_KEYWORD | PPD_STRING)) + ppd_add_attr(ppd, keyword, name, text, string); + else +- _cupsStrFree(string); ++ free(string); + } + + /* +@@ -1977,7 +1974,7 @@ _ppdOpen( + goto error; + } + +- ppd_free(line.buffer); ++ free(line.buffer); + + /* + * Reset language preferences... +@@ -2059,8 +2056,8 @@ _ppdOpen( + + error: + +- _cupsStrFree(string); +- ppd_free(line.buffer); ++ free(string); ++ free(line.buffer); + + ppdClose(ppd); + +@@ -2498,9 +2495,9 @@ ppd_free_filters(ppd_file_t *ppd) /* I - PPD file */ + if (ppd->num_filters > 0) + { + for (i = ppd->num_filters, filter = ppd->filters; i > 0; i --, filter ++) +- _cupsStrFree(*filter); ++ free(*filter); + +- ppd_free(ppd->filters); ++ free(ppd->filters); + + ppd->num_filters = 0; + ppd->filters = NULL; +@@ -2527,7 +2524,7 @@ ppd_free_group(ppd_group_t *group) /* I - Group to free */ + i --, option ++) + ppd_free_option(option); + +- ppd_free(group->options); ++ free(group->options); + } + + if (group->num_subgroups > 0) +@@ -2537,7 +2534,7 @@ ppd_free_group(ppd_group_t *group) /* I - Group to free */ + i --, subgroup ++) + ppd_free_group(subgroup); + +- ppd_free(group->subgroups); ++ free(group->subgroups); + } + } + +@@ -2559,10 +2556,10 @@ ppd_free_option(ppd_option_t *option) /* I - Option to free */ + i > 0; + i --, choice ++) + { +- _cupsStrFree(choice->code); ++ free(choice->code); + } + +- ppd_free(option->choices); ++ free(option->choices); + } + } + +@@ -3299,7 +3296,7 @@ ppd_read(cups_file_t *fp, /* I - File to read from */ + lineptr ++; + } + +- *string = _cupsStrAlloc(lineptr); ++ *string = strdup(lineptr); + + mask |= PPD_STRING; + } +@@ -3421,7 +3418,7 @@ ppd_update_filters(ppd_file_t *ppd, /* I - PPD file */ + filter += ppd->num_filters; + ppd->num_filters ++; + +- *filter = _cupsStrAlloc(buffer); ++ *filter = strdup(buffer); + } + while ((attr = ppdFindNextAttr(ppd, "cupsFilter2", NULL)) != NULL); + +diff --git a/cups/string.c b/cups/string.c +index 0d4ed0f50..dd9c12ce8 100644 +--- a/cups/string.c ++++ b/cups/string.c +@@ -1,8 +1,8 @@ + /* + * String functions for CUPS. + * +- * Copyright 2007-2014 by Apple Inc. +- * Copyright 1997-2007 by Easy Software Products. ++ * Copyright © 2007-2019 by Apple Inc. ++ * Copyright © 1997-2007 by Easy Software Products. + * + * These coded instructions, statements, and computer programs are the + * property of Apple Inc. and are protected by Federal copyright +@@ -316,15 +316,6 @@ _cupsStrFree(const char *s) /* I - String to free */ + + key = (_cups_sp_item_t *)(s - offsetof(_cups_sp_item_t, str)); + +-#ifdef DEBUG_GUARDS +- if (key->guard != _CUPS_STR_GUARD) +- { +- DEBUG_printf(("5_cupsStrFree: Freeing string %p(%s), guard=%08x, " +- "ref_count=%d", key, key->str, key->guard, key->ref_count)); +- abort(); +- } +-#endif /* DEBUG_GUARDS */ +- + if ((item = (_cups_sp_item_t *)cupsArrayFind(stringpool, key)) != NULL && + item == key) + { +@@ -332,6 +323,14 @@ _cupsStrFree(const char *s) /* I - String to free */ + * Found it, dereference... + */ + ++#ifdef DEBUG_GUARDS ++ if (key->guard != _CUPS_STR_GUARD) ++ { ++ DEBUG_printf(("5_cupsStrFree: Freeing string %p(%s), guard=%08x, ref_count=%d", key, key->str, key->guard, key->ref_count)); ++ abort(); ++ } ++#endif /* DEBUG_GUARDS */ ++ + item->ref_count --; + + if (!item->ref_count) +diff --git a/scheduler/ipp.c b/scheduler/ipp.c +index e00275b09..9be8a7f3b 100644 +--- a/scheduler/ipp.c ++++ b/scheduler/ipp.c +@@ -2601,8 +2601,7 @@ add_printer(cupsd_client_t *con, /* I - Client connection */ + if (!strcmp(attr->values[i].string.text, "none")) + continue; + +- printer->reasons[printer->num_reasons] = +- _cupsStrRetain(attr->values[i].string.text); ++ printer->reasons[printer->num_reasons] = _cupsStrAlloc(attr->values[i].string.text); + printer->num_reasons ++; + + if (!strcmp(attr->values[i].string.text, "paused") && +@@ -4892,8 +4891,9 @@ copy_printer_attrs( + + if ((p2_uri = ippFindAttribute(p2->attrs, "printer-uri-supported", + IPP_TAG_URI)) != NULL) +- member_uris->values[i].string.text = +- _cupsStrRetain(p2_uri->values[0].string.text); ++ { ++ member_uris->values[i].string.text = _cupsStrAlloc(p2_uri->values[0].string.text); ++ } + else + { + httpAssembleURIf(HTTP_URI_CODING_ALL, printer_uri, diff -Nru cups-2.2.10/debian/patches/manpage-translations.patch cups-2.2.10/debian/patches/manpage-translations.patch --- cups-2.2.10/debian/patches/manpage-translations.patch 2019-02-16 14:48:42.000000000 +0100 +++ cups-2.2.10/debian/patches/manpage-translations.patch 2019-03-27 17:13:07.000000000 +0100 @@ -1,4 +1,4 @@ -From 3a541d1cb57989a954984fb70ba5e45a65eeeaa6 Mon Sep 17 00:00:00 2001 +From 2fb6d0075ed13f2fd03a8600a6ecb0892818116b Mon Sep 17 00:00:00 2001 From: Didier Raboud <o...@debian.org> Date: Tue, 9 Aug 2016 18:11:50 +0200 Subject: po4a infrastructure and translations for manpages. diff -Nru cups-2.2.10/debian/patches/series cups-2.2.10/debian/patches/series --- cups-2.2.10/debian/patches/series 2019-02-16 14:48:42.000000000 +0100 +++ cups-2.2.10/debian/patches/series 2019-03-27 17:13:07.000000000 +0100 @@ -37,7 +37,9 @@ 0037-Use-the-same-requested-attributes-values-for-all-IPP.patch 0038-Add-a-USB-quirk-rule-for-the-Lexmark-E120n-Issue-547.patch 0039-Updated-the-USB-quirks-rule-for-Zebra-label-printers.patch -0040-Fix-compile-error-on-Linux-Issue-5483.patch -0041-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch -0042-Fix-potential-unaligned-accesses-in-the-string-pool-.patch +0040-Add-USB-quirks-rule-for-Xerox-printers-Issue-5523.patch +0041-Add-a-USB-quirks-rule-for-the-DYMO-450-Turbo-Issue-5.patch +0042-Fix-compile-error-on-Linux-Issue-5483.patch +0043-Stop-parsing-the-Emulators-keywords-in-PPD-files-Iss.patch +0044-Fix-potential-unaligned-accesses-in-the-string-pool-.patch manpage-translations.patch