]> granicus.if.org Git - php/commitdiff
fix segfault in php_add_session_var()
authorAntony Dovgal <tony2001@php.net>
Thu, 15 Feb 2007 09:41:31 +0000 (09:41 +0000)
committerAntony Dovgal <tony2001@php.net>
Thu, 15 Feb 2007 09:41:31 +0000 (09:41 +0000)
ext/session/session.c
ext/session/tests/002.phpt

index 26b8fb3244d6f8d15e439caa2595ca05a40b6979..20a1664550738db82a46cb5f77a0bf02f315727d 100644 (file)
@@ -271,8 +271,12 @@ void php_add_session_var(char *name, size_t namelen TSRMLS_DC)
 {
        zval **sym_track = NULL;
        
-       zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name, namelen + 1, 
-                       (void *) &sym_track);
+       IF_SESSION_VARS() {
+               zend_hash_find(Z_ARRVAL_P(PS(http_session_vars)), name, namelen + 1,
+                               (void *) &sym_track);
+       } else {
+               return;
+       }
 
        /*
         * Set up a proper reference between $_SESSION["x"] and $x.
@@ -281,11 +285,10 @@ void php_add_session_var(char *name, size_t namelen TSRMLS_DC)
        if (PG(register_globals)) {
                zval **sym_global = NULL;
                
-               zend_hash_find(&EG(symbol_table), name, namelen + 1, 
-                               (void *) &sym_global);
-                               
-               if ((Z_TYPE_PP(sym_global) == IS_ARRAY && Z_ARRVAL_PP(sym_global) == &EG(symbol_table)) || *sym_global == PS(http_session_vars)) {
-                       return;
+               if (zend_hash_find(&EG(symbol_table), name, namelen + 1, (void *) &sym_global) == SUCCESS) {
+                       if ((Z_TYPE_PP(sym_global) == IS_ARRAY && Z_ARRVAL_PP(sym_global) == &EG(symbol_table)) || *sym_global == PS(http_session_vars)) {
+                               return;
+                       }
                }
 
                if (sym_global == NULL && sym_track == NULL) {
index 7c77fdcf94528dfa22d1e87b0a72ba476ad6fc15..19123560b7334e0604e5c98ebbb03bd1bfc8ae9b 100644 (file)
@@ -7,6 +7,7 @@ session_unset() without a initialized session
 error_reporting(E_ALL);
 session_unset();
 print "ok\n";
+?>
 --GET--
 --POST--
 --EXPECT--