From 2abe5e573fdee29e46937f3ce4353fcc8826e763 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jan=20R=C4=99korajski?= Date: Wed, 13 Nov 2013 19:41:28 +0100 Subject: [PATCH] - fix stringpool corruption (patch from upstream, via fedora, RHBZ#974048) --- cups-stringpool-rdar15382819.patch | 93 ++++++++++++++++++++++++++++++ cups.spec | 2 + 2 files changed, 95 insertions(+) create mode 100644 cups-stringpool-rdar15382819.patch diff --git a/cups-stringpool-rdar15382819.patch b/cups-stringpool-rdar15382819.patch new file mode 100644 index 0000000..0a22a39 --- /dev/null +++ b/cups-stringpool-rdar15382819.patch @@ -0,0 +1,93 @@ +diff -up cups-1.7.0/scheduler/printers.c.stringpool-rdar15382819 cups-1.7.0/scheduler/printers.c +--- cups-1.7.0/scheduler/printers.c.stringpool-rdar15382819 2013-11-07 13:26:56.077499193 +0000 ++++ cups-1.7.0/scheduler/printers.c 2013-11-07 13:27:54.665787144 +0000 +@@ -1876,12 +1876,13 @@ void + cupsdSetPrinterAttr( + cupsd_printer_t *p, /* I - Printer */ + const char *name, /* I - Attribute name */ +- char *value) /* I - Attribute value string */ ++ const char *value) /* I - Attribute value string */ + { + ipp_attribute_t *attr; /* Attribute */ + int i, /* Looping var */ + count; /* Number of values */ +- char *ptr, /* Pointer into value */ ++ char *temp, /* Temporary copy of value string */ ++ *ptr, /* Pointer into value */ + *start, /* Start of value */ + quote; /* Quote character */ + ipp_tag_t value_tag; /* Value tag for this attribute */ +@@ -1898,10 +1899,21 @@ cupsdSetPrinterAttr( + } + + /* ++ * Copy the value string so we can do what we want with it... ++ */ ++ ++ if ((temp = strdup(value)) == NULL) ++ { ++ cupsdLogMessage(CUPSD_LOG_ERROR, ++ "Unable to duplicate value for \"%s\" attribute.", name); ++ return; ++ } ++ ++ /* + * Count the number of values... + */ + +- for (count = 1, quote = '\0', ptr = value; ++ for (count = 1, quote = '\0', ptr = temp; + *ptr; + ptr ++) + { +@@ -1949,15 +1961,15 @@ cupsdSetPrinterAttr( + return; + } + +- for (i = 0; i < count; i ++) ++ for (i = 0, start = temp; i < count; i ++) + { +- if ((ptr = strchr(value, ',')) != NULL) ++ if ((ptr = strchr(start, ',')) != NULL) + *ptr++ = '\0'; + +- attr->values[i].integer = strtol(value, NULL, 10); ++ attr->values[i].integer = strtol(start, NULL, 10); + + if (ptr) +- value = ptr; ++ start = ptr; + } + } + else +@@ -1999,7 +2011,7 @@ cupsdSetPrinterAttr( + return; + } + +- for (i = 0, quote = '\0', ptr = value; i < count; i ++) ++ for (i = 0, quote = '\0', ptr = temp; i < count; i ++) + { + for (start = ptr; *ptr; ptr ++) + { +@@ -2028,6 +2040,8 @@ cupsdSetPrinterAttr( + attr->values[i].string.text = _cupsStrAlloc(start); + } + } ++ ++ free(temp); + } + + +diff -up cups-1.7.0/scheduler/printers.h.stringpool-rdar15382819 cups-1.7.0/scheduler/printers.h +--- cups-1.7.0/scheduler/printers.h.stringpool-rdar15382819 2013-05-29 12:51:34.000000000 +0100 ++++ cups-1.7.0/scheduler/printers.h 2013-11-07 13:27:54.666787149 +0000 +@@ -166,7 +166,8 @@ extern int cupsdSetAuthInfoRequired(cup + ipp_attribute_t *attr); + extern void cupsdSetDeviceURI(cupsd_printer_t *p, const char *uri); + extern void cupsdSetPrinterAttr(cupsd_printer_t *p, +- const char *name, char *value); ++ const char *name, ++ const char *value); + extern void cupsdSetPrinterAttrs(cupsd_printer_t *p); + extern int cupsdSetPrinterReasons(cupsd_printer_t *p, + const char *s); diff --git a/cups.spec b/cups.spec index bc63553..c00449c 100644 --- a/cups.spec +++ b/cups.spec @@ -47,6 +47,7 @@ Patch16: read-embedded-options-from-incoming-postscript-and-add-to-ipp-attrs.pat Patch17: %{name}-use-ipp1.1.patch Patch18: %{name}-final-content-type.patch Patch19: %{name}-jobhistory.patch +Patch20: %{name}-stringpool-rdar15382819.patch # avahi patches from fedora Patch100: %{name}-avahi-address.patch Patch101: %{name}-avahi-no-threaded.patch @@ -270,6 +271,7 @@ Wsparcie dla LPD w serwerze wydruków CUPS. %patch17 -p1 %patch18 -p1 %patch19 -p1 +%patch20 -p1 %if %{with avahi} %patch100 -p1 -- 2.43.0