]> granicus.if.org Git - php/commitdiff
The argument must be not changed in session_start
authorXinchen Hui <laruence@php.net>
Thu, 29 Jan 2015 04:22:55 +0000 (12:22 +0800)
committerXinchen Hui <laruence@php.net>
Thu, 29 Jan 2015 04:26:13 +0000 (12:26 +0800)
ext/session/session.c
ext/session/tests/session_basic1.phpt

index 28cda1b137e6bb8131f23bf59948b2573d0d1409..1b2e0823bd67fd37661760e14d7bc0550ff38214 100644 (file)
@@ -2217,13 +2217,13 @@ static PHP_FUNCTION(session_start)
                                        case IS_FALSE:
                                        case IS_LONG:
                                                if (zend_string_equals_literal(str_idx, "read_and_close")) {
-                                                       convert_to_boolean(value);
-                                                       read_and_close = (Z_TYPE_P(value) == IS_TRUE) ? 1 : 0;
+                                                       read_and_close = zval_get_long(value);
                                                } else {
-                                                       convert_to_string(value);
-                                                       if (php_session_start_set_ini(str_idx, Z_STR_P(value)) == FAILURE) {
+                                                       zend_string *val = zval_get_string(value);
+                                                       if (php_session_start_set_ini(str_idx, val) == FAILURE) {
                                                                php_error_docref(NULL, E_WARNING, "Setting option '%s' failed", str_idx->val);
                                                        }
+                                                       zend_string_release(val);
                                                }
                                                break;
                                        default:
index 616fdfc57ae25427b8f0cbad6fd9e6ea550e7a58..8a8f43661089b4bea9cf1270fefb81d6920493d3 100644 (file)
@@ -30,7 +30,9 @@ var_dump(session_save_path($path));
 
 echo "*** Without lazy_write ***\n";
 var_dump(session_id($session_id));
-var_dump(session_start(['lazy_write'=>FALSE]));
+$config = ['lazy_write'=>FALSE];
+var_dump(session_start($config));
+var_dump($config);
 var_dump(session_write_close());
 var_dump(session_id());
 
@@ -53,6 +55,10 @@ string(0) ""
 *** Without lazy_write ***
 string(6) "testid"
 bool(true)
+array(1) {
+  ["lazy_write"]=>
+  bool(false)
+}
 NULL
 string(6) "testid"
 *** With lazy_write ***
@@ -64,4 +70,3 @@ string(6) "testid"
 string(6) "testid"
 bool(true)
 bool(true)
-