[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#925874: unblock: cups/2.2.10-5



Package: release.debian.org
Severity: normal
User: release.debian.org@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 <odyx@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 <debian@helgefjell.de>\n"
 "Language-Team: de <debian-l10n-german@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.sweet@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.sweet@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 <odyx@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 <debian@helgefjell.de>\n"
 "Language-Team: de <debian-l10n-german@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.sweet@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.sweet@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.sweet@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.sweet@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.sweet@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.sweet@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.sweet@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.sweet@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 <odyx@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

Reply to: