]> granicus.if.org Git - php/commitdiff
Fix #67131: setcookie() conditional for empty values not met
authorChristoph M. Becker <cmb@php.net>
Mon, 24 Aug 2015 21:03:50 +0000 (23:03 +0200)
committerChristoph M. Becker <cmb@php.net>
Mon, 24 Aug 2015 21:03:50 +0000 (23:03 +0200)
PHP applies a workaround for old MSIE where setting an empty cookie value would
not delete the cookie. This workaround is only triggered if an empty string (or
a value that converts to an empty string) is actually given as $value parameter
of setcookie. If the $value parameter is omitted, an empty cookie value is
sent. This commit fixes the inconsistent behavior.

ext/standard/head.c
ext/standard/tests/network/setcookie.phpt

index f66c60437bb08886c2e216fea62beb3dc2857390..56a48a0be3200260e5999e680941c15ebbef6634 100644 (file)
@@ -110,7 +110,7 @@ PHPAPI int php_setcookie(char *name, int name_len, char *value, int value_len, t
 
        cookie = emalloc(len + 100);
 
-       if (value && value_len == 0) {
+       if (value == NULL || value_len == 0) {
                /*
                 * MSIE doesn't delete a cookie when you set it to a null value
                 * so in order to force cookies to be deleted, even on MSIE, we
index bf04ec78de13cd4da905d0010a958ea2e5ee9d49..f63c6ec8150f08a4c048413883dcb881b49af015 100644 (file)
@@ -6,6 +6,7 @@ date.timezone=UTC
 --FILE--
 <?php
 setcookie('name');
+setcookie('name', '');
 setcookie('name', 'value');
 setcookie('name', 'space value');
 setcookie('name', 'value', 0);
@@ -19,7 +20,8 @@ setcookie('name', 'value', 0, '', '', FALSE, TRUE);
 
 
 $expected = array(
-       'Set-Cookie: name=',
+       'Set-Cookie: name=deleted; expires='.date('D, d-M-Y H:i:s', 1).' GMT; Max-Age=0',
+       'Set-Cookie: name=deleted; expires='.date('D, d-M-Y H:i:s', 1).' GMT; Max-Age=0',
        'Set-Cookie: name=value',
        'Set-Cookie: name=space+value',
        'Set-Cookie: name=value',
@@ -64,6 +66,7 @@ while (next($headers) !== FALSE);
 echo ($i === 0)
        ? 'OK'
        : 'A total of '.$i.' errors found.';
+?>
 --EXPECTHEADERS--
 
 --EXPECT--