Tim Waugh 63f7fa
diff -up cups-1.7b1/scheduler/printers.c.stringpool-setprinterattr cups-1.7b1/scheduler/printers.c
Tim Waugh 63f7fa
--- cups-1.7b1/scheduler/printers.c.stringpool-setprinterattr	2013-06-13 12:18:04.678129506 +0100
Tim Waugh 63f7fa
+++ cups-1.7b1/scheduler/printers.c	2013-06-13 12:18:04.721129670 +0100
Tim Waugh 63f7fa
@@ -1881,6 +1881,7 @@ cupsdSetPrinterAttr(
Tim Waugh 1e7802
   ipp_attribute_t	*attr;		/* Attribute */
Tim Waugh 1e7802
   int			i,		/* Looping var */
Tim Waugh 1e7802
 			count;		/* Number of values */
Tim Waugh 1e7802
+  char			*value_dup;	/* Copy of attribute value string */
Tim Waugh 1e7802
   char			*ptr,		/* Pointer into value */
Tim Waugh 1e7802
 			*start,		/* Start of value */
Tim Waugh 1e7802
 			quote;		/* Quote character */
Tim Waugh 63f7fa
@@ -1949,16 +1950,24 @@ cupsdSetPrinterAttr(
Tim Waugh 1e7802
       return;
Tim Waugh 1e7802
     }
Tim Waugh 1e7802
 
Tim Waugh 1e7802
-    for (i = 0; i < count; i ++)
Tim Waugh 1e7802
+    if ((value_dup = strdup(value)) == NULL)
Tim Waugh 1e7802
     {
Tim Waugh 1e7802
-      if ((ptr = strchr(value, ',')) != NULL)
Tim Waugh 1e7802
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to copy attribute value.");
Tim Waugh 1e7802
+      return;
Tim Waugh 1e7802
+    }
Tim Waugh 1e7802
+
Tim Waugh 1e7802
+    for (i = 0, start = value_dup; i < count; i ++)
Tim Waugh 1e7802
+    {
Tim Waugh 1e7802
+      if ((ptr = strchr(start, ',')) != NULL)
Tim Waugh 1e7802
         *ptr++ = '\0';
Tim Waugh 1e7802
 
Tim Waugh 1e7802
-      attr->values[i].integer = strtol(value, NULL, 10);
Tim Waugh 1e7802
+      attr->values[i].integer = strtol(start, NULL, 10);
Tim Waugh 1e7802
 
Tim Waugh 1e7802
       if (ptr)
Tim Waugh 1e7802
-        value = ptr;
Tim Waugh 1e7802
+        start = ptr;
Tim Waugh 1e7802
     }
Tim Waugh 1e7802
+
Tim Waugh 1e7802
+    free(value_dup);
Tim Waugh 1e7802
   }
Tim Waugh 1e7802
   else
Tim Waugh 1e7802
   {
Tim Waugh 63f7fa
@@ -1999,7 +2008,13 @@ cupsdSetPrinterAttr(
Tim Waugh 1e7802
       return;
Tim Waugh 1e7802
     }
Tim Waugh 1e7802
 
Tim Waugh 1e7802
-    for (i = 0, quote = '\0', ptr = value; i < count; i ++)
Tim Waugh 1e7802
+    if ((value_dup = strdup(value)) == NULL)
Tim Waugh 1e7802
+    {
Tim Waugh 1e7802
+      cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to copy attribute value.");
Tim Waugh 1e7802
+      return;
Tim Waugh 1e7802
+    }
Tim Waugh 1e7802
+
Tim Waugh 1e7802
+    for (i = 0, quote = '\0', ptr = value_dup; i < count; i ++)
Tim Waugh 1e7802
     {
Tim Waugh 1e7802
       for (start = ptr; *ptr; ptr ++)
Tim Waugh 1e7802
       {
Tim Waugh 63f7fa
@@ -2027,6 +2042,8 @@ cupsdSetPrinterAttr(
Tim Waugh 1e7802
 
Tim Waugh 1e7802
       attr->values[i].string.text = _cupsStrAlloc(start);
Tim Waugh 1e7802
     }
Tim Waugh 1e7802
+
Tim Waugh 1e7802
+    free(value_dup);
Tim Waugh 1e7802
   }
Tim Waugh 1e7802
 }
Tim Waugh 1e7802