[packages/cups] - fix stringpool corruption (patch from upstream, via fedora, RHBZ#974048)

baggins baggins at pld-linux.org
Wed Nov 13 19:45:30 CET 2013


commit 2abe5e573fdee29e46937f3ce4353fcc8826e763
Author: Jan Rękorajski <baggins at pld-linux.org>
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



More information about the pld-cvs-commit mailing list