]> git.pld-linux.org Git - packages/cups.git/commitdiff
- fix stringpool corruption (patch from upstream, via fedora, RHBZ#974048) auto/th/cups-1.7.0-2
authorJan Rękorajski <baggins@pld-linux.org>
Wed, 13 Nov 2013 18:41:28 +0000 (19:41 +0100)
committerJan Rękorajski <baggins@pld-linux.org>
Wed, 13 Nov 2013 18:41:28 +0000 (19:41 +0100)
cups-stringpool-rdar15382819.patch [new file with mode: 0644]
cups.spec

diff --git a/cups-stringpool-rdar15382819.patch b/cups-stringpool-rdar15382819.patch
new file mode 100644 (file)
index 0000000..0a22a39
--- /dev/null
@@ -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);
index bc63553910761aa6d9c046cdb5bee7d033797a51..c00449c9d2440c9e9562dd56ed351878a79a0c48 100644 (file)
--- 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
This page took 0.157631 seconds and 4 git commands to generate.