]> granicus.if.org Git - php/commitdiff
Fixed bug #45141 (setcookie will output expires years of >4 digits).
authorIlia Alshanetsky <iliaa@php.net>
Wed, 29 Jul 2009 13:44:16 +0000 (13:44 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Wed, 29 Jul 2009 13:44:16 +0000 (13:44 +0000)
ext/standard/head.c

index bbbb31890c22eaea16d813d78eac96eb9258a046..4f9aa63da84be533c8ba8d81cb77cbb3b982e219 100644 (file)
@@ -125,8 +125,18 @@ PHPAPI int php_setcookie(char *name, int name_len, char *value, int value_len, t
        } else {
                snprintf(cookie, len + 100, "Set-Cookie: %s=%s", name, value ? encoded_value : "");
                if (expires > 0) {
+                       char *p;
                        strlcat(cookie, "; expires=", len + 100);
                        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);
                        efree(dt);
                }