]> granicus.if.org Git - php/commitdiff
Fixed bug #74833, SID constant created with wrong module number
authorAnatol Belski <ab@php.net>
Wed, 26 Jul 2017 11:19:41 +0000 (13:19 +0200)
committerAnatol Belski <ab@php.net>
Wed, 26 Jul 2017 11:19:41 +0000 (13:19 +0200)
ext/session/session.c
ext/session/tests/bug74833.phpt [new file with mode: 0644]

index 2c4b30fc2b96e6106ad2032ff63541101b4cf3b6..daea59c4ff896b2f2d90cf370fb4d341c593edaa 100644 (file)
@@ -98,6 +98,9 @@ zend_class_entry *php_session_update_timestamp_iface_entry;
 
 static void php_session_send_cookie(void);
 
+/* Initialized in MINIT, readonly otherwise. */
+static int my_module_number = 0;
+
 /* Dispatched by RINIT and by php_session_destroy */
 static inline void php_rinit_session_globals(void) /* {{{ */
 {
@@ -108,6 +111,7 @@ static inline void php_rinit_session_globals(void) /* {{{ */
        PS(mod_user_is_open) = 0;
        PS(define_sid) = 1;
        PS(session_vars) = NULL;
+       PS(module_number) = my_module_number;
        ZVAL_UNDEF(&PS(http_session_vars));
 }
 /* }}} */
@@ -2730,7 +2734,8 @@ static PHP_MINIT_FUNCTION(session) /* {{{ */
 
        zend_register_auto_global(zend_string_init("_SESSION", sizeof("_SESSION") - 1, 1), 0, NULL);
 
-       PS(module_number) = module_number; /* if we really need this var we need to init it in zts mode as well! */
+       my_module_number = module_number;
+       PS(module_number) = module_number;
 
        PS(session_status) = php_session_none;
        REGISTER_INI_ENTRIES();
diff --git a/ext/session/tests/bug74833.phpt b/ext/session/tests/bug74833.phpt
new file mode 100644 (file)
index 0000000..5a0eda7
--- /dev/null
@@ -0,0 +1,22 @@
+--TEST--
+Bug #74833 Session module number is uninitialized when SID is reset
+--SKIPIF--
+<?php include('skipif.inc'); ?>
+--FILE--
+<?php
+
+ob_start();
+
+session_start();
+session_regenerate_id();
+$c = get_defined_constants(true);
+/* Ensure the SID constant has correct module number. */
+var_dump(isset($c['session']['SID']));
+
+ob_end_flush();
+?>
+==DONE==
+--EXPECTF--
+bool(true)
+==DONE==
+