derick                                   Wed, 18 Nov 2009 22:56:32 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=290958

Log:
- Fixed the setting of cookies in HEAD.

Changed paths:
    U   php/php-src/trunk/ext/standard/head.c

Modified: php/php-src/trunk/ext/standard/head.c
===================================================================
--- php/php-src/trunk/ext/standard/head.c       2009-11-18 22:48:56 UTC (rev 
290957)
+++ php/php-src/trunk/ext/standard/head.c       2009-11-18 22:56:32 UTC (rev 
290958)
@@ -79,7 +79,7 @@
 {
        char *cookie, *encoded_value = NULL;
        int len=sizeof("Set-Cookie: ");
-       char *dt;
+       UChar *dt;
        sapi_header_line ctr = {0};
        int result;

@@ -120,24 +120,25 @@
                 */
                time_t t = time(NULL) - 31536001;
                dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, d-M-Y H:i:s 
T")-1, t, 0 TSRMLS_CC);
-               snprintf(cookie, len + 100, "Set-Cookie: %s=deleted; 
expires=%s", name, dt);
+               snprintf(cookie, len + 100, "Set-Cookie: %s=deleted; 
expires=%v", name, dt);
                efree(dt);
        } else {
+               /* check to make sure that the year does not exceed 4 digits in 
length */
+               if (expires >= 253402300800) {
+                       efree(cookie);
+                       efree(encoded_value);
+                       zend_error(E_WARNING, "Expiry date cannot have a year 
greater then 9999");
+                       return FAILURE;
+               }
                snprintf(cookie, len + 100, "Set-Cookie: %s=%s", name, value ? 
encoded_value : "");
                if (expires > 0) {
                        char *p;
-                       strlcat(cookie, "; expires=", len + 100);
+                       p = emalloc(48);
+
                        dt = php_format_date("D, d-M-Y H:i:s T", sizeof("D, 
d-M-Y H:i:s T")-1, expires, 0 TSRMLS_CC);
-                       /* check to make sure that the year does not exceed 4 
digits in length */
-                       p = zend_memrchr(dt, '-', strlen(dt));
-                       if (*(p + 5) != ' ') {
-                               efree(dt);
-                               efree(cookie);
-                               efree(encoded_value);
-                               zend_error(E_WARNING, "Expiry date cannot have 
a year greater then 9999");
-                               return FAILURE;
-                       }
-                       strlcat(cookie, dt, len + 100);
+                       snprintf(p, 48, "; expires=%v", dt );
+                       strlcat(cookie, p, len + 100);
+                       efree(p);
                        efree(dt);
                }
        }

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to