commit 2abe5e573fdee29e46937f3ce4353fcc8826e763
Author: Jan Rękorajski <[email protected]>
Date:   Wed Nov 13 19:41:28 2013 +0100

    - fix stringpool corruption (patch from upstream, via fedora, RHBZ#974048)

 cups-stringpool-rdar15382819.patch | 93 ++++++++++++++++++++++++++++++++++++++
 cups.spec                          |  2 +
 2 files changed, 95 insertions(+)
---
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
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);
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/cups.git/commitdiff/2abe5e573fdee29e46937f3ce4353fcc8826e763

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to