]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Long cookies caused the web interface to stop working (STR #4619)
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Wed, 6 May 2015 21:32:18 +0000 (21:32 +0000)
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>
Wed, 6 May 2015 21:32:18 +0000 (21:32 +0000)
git-svn-id: svn+ssh://src.apple.com/svn/cups/cups.org/trunk@12621 a1ca3aef-8c08-0410-bb20-df032aa958be

CHANGES.txt
cgi-bin/var.c

index d6a4a2873cebce6095fa75b54bcf4d26bfc86563..f44a83e9b96c8c96375c5300dc6638e7b8c749d3 100644 (file)
@@ -29,4 +29,5 @@ CHANGES IN CUPS V2.1b1
        - The scheduler now checks the return value of rename() calls
          (STR #4589)
        - The scheduler now validates ErrorPolicy values in config files
-         (STR #4591)
\ No newline at end of file
+         (STR #4591)
+       - Long cookies caused the web interface to stop working (STR #4619)
index 408634dac447db202b320e5bea4745bff20364f4..3935508fc2b92fc29c4191fe94964caa948b296c 100644 (file)
@@ -3,7 +3,7 @@
  *
  * CGI form variable and array functions for CUPS.
  *
- * Copyright 2007-2014 by Apple Inc.
+ * Copyright 2007-2015 by Apple Inc.
  * Copyright 1997-2005 by Easy Software Products.
  *
  * These coded instructions, statements, and computer programs are the
@@ -626,6 +626,8 @@ cgi_initialize_cookies(void)
 
   while (*cookie)
   {
+    int        skip = 0;                       /* Skip this cookie? */
+
    /*
     * Skip leading whitespace...
     */
@@ -641,9 +643,14 @@ cgi_initialize_cookies(void)
 
     for (ptr = name; *cookie && *cookie != '=';)
       if (ptr < (name + sizeof(name) - 1))
+      {
         *ptr++ = *cookie++;
+      }
       else
-        break;
+      {
+        skip = 1;
+       cookie ++;
+      }
 
     if (*cookie != '=')
       break;
@@ -659,26 +666,38 @@ cgi_initialize_cookies(void)
     {
       for (cookie ++, ptr = value; *cookie && *cookie != '\"';)
         if (ptr < (value + sizeof(value) - 1))
+       {
          *ptr++ = *cookie++;
+       }
        else
-         break;
+       {
+         skip = 1;
+         cookie ++;
+       }
 
       if (*cookie == '\"')
         cookie ++;
+      else
+        skip = 1;
     }
     else
     {
       for (ptr = value; *cookie && *cookie != ';';)
         if (ptr < (value + sizeof(value) - 1))
+       {
          *ptr++ = *cookie++;
+       }
        else
-         break;
+       {
+         skip = 1;
+         cookie ++;
+       }
     }
 
     if (*cookie == ';')
       cookie ++;
     else if (*cookie)
-      break;
+      skip = 1;
 
     *ptr = '\0';
 
@@ -687,7 +706,7 @@ cgi_initialize_cookies(void)
     * "$"...
     */
 
-    if (name[0] != '$')
+    if (name[0] != '$' && !skip)
       num_cookies = cupsAddOption(name, value, num_cookies, &cookies);
   }
 }