]> granicus.if.org Git - php/commitdiff
Autogolobal $GLOBALS has to be pinged even if auto_globals_jit=0
authorDmitry Stogov <dmitry@zend.com>
Fri, 15 Mar 2013 06:45:49 +0000 (10:45 +0400)
committerDmitry Stogov <dmitry@zend.com>
Fri, 15 Mar 2013 06:45:49 +0000 (10:45 +0400)
ZendAccelerator.c

index e6029cf45434d91e2ce58a7c254df4d9577232ae..bb571a48056eab2587c512748474b5a55f9370be 100644 (file)
@@ -1154,11 +1154,10 @@ static int zend_accel_get_auto_globals(TSRMLS_D)
 {
        int i, ag_size = (sizeof(jit_auto_globals_info) / sizeof(jit_auto_globals_info[0]));
        int n = 1;
-       zval **res;
        int mask = 0;
 
        for (i = 0; i < ag_size ; i++) {
-               if (zend_hash_find(&EG(symbol_table), jit_auto_globals_info[i].name, jit_auto_globals_info[i].len, (void *)&res) == SUCCESS) {
+               if (zend_hash_exists(&EG(symbol_table), jit_auto_globals_info[i].name, jit_auto_globals_info[i].len)) {
                        mask |= n;
                }
                n += n;
@@ -1166,6 +1165,16 @@ static int zend_accel_get_auto_globals(TSRMLS_D)
        return mask;
 }
 
+#if ZEND_EXTENSION_API_NO > PHP_5_3_X_API_NO
+static int zend_accel_get_auto_globals_no_jit(TSRMLS_D)
+{
+       if (zend_hash_exists(&EG(symbol_table), jit_auto_globals_info[3].name, jit_auto_globals_info[3].len)) {
+               return 8;
+       }
+       return 0;
+}
+#endif
+
 static void zend_accel_set_auto_globals(int mask TSRMLS_DC)
 {
        int i, ag_size = (sizeof(jit_auto_globals_info) / sizeof(jit_auto_globals_info[0]));
@@ -1318,11 +1327,15 @@ static zend_persistent_script *compile_and_cache_file(zend_file_handle *file_han
        will have to ping the used auto global variables before execution */
 #if ZEND_EXTENSION_API_NO > PHP_5_3_X_API_NO
        if (PG(auto_globals_jit)) {
+               new_persistent_script->ping_auto_globals_mask = zend_accel_get_auto_globals(TSRMLS_C);
+       } else {
+               new_persistent_script->ping_auto_globals_mask = zend_accel_get_auto_globals_no_jit(TSRMLS_C);
+       }
 #else
        if ((PG(auto_globals_jit) && !PG(register_globals) && !PG(register_long_arrays))) {
-#endif
                new_persistent_script->ping_auto_globals_mask = zend_accel_get_auto_globals(TSRMLS_C);
-    }
+       }
+#endif
 
        if (ZCG(accel_directives).validate_timestamps) {
                /* Obtain the file timestamps, *before* actually compiling them,