if (!EG(active_symbol_table)) {
ZVAL_NULL(¶ms[4]);
} else {
- array_init_size(¶ms[4], zend_hash_num_elements(EG(active_symbol_table)));
- zend_hash_copy(Z_ARRVAL(params[4]), EG(active_symbol_table), zval_add_ref);
+ array_init_size(¶ms[4], zend_hash_num_elements(&EG(active_symbol_table)->ht));
+ zend_hash_copy(Z_ARRVAL(params[4]), &EG(active_symbol_table)->ht, zval_add_ref);
}
ZVAL_COPY_VALUE(&orig_user_error_handler, &EG(user_error_handler));
size_t size;
HashTable *function_table;
zval function_name;
- HashTable *symbol_table;
+ zend_array *symbol_table;
zval *retval;
zend_uint param_count;
zval *params;
ZEND_API int call_user_function(HashTable *function_table, zval *object, zval *function_name, zval *retval_ptr, zend_uint param_count, zval params[] TSRMLS_DC);
-ZEND_API int call_user_function_ex(HashTable *function_table, zval *object, zval *function_name, zval *retval_ptr, zend_uint param_count, zval params[], int no_separation, HashTable *symbol_table TSRMLS_DC);
+ZEND_API int call_user_function_ex(HashTable *function_table, zval *object, zval *function_name, zval *retval_ptr, zend_uint param_count, zval params[], int no_separation, zend_array *symbol_table TSRMLS_DC);
ZEND_API extern const zend_fcall_info empty_fcall_info;
ZEND_API extern const zend_fcall_info_cache empty_fcall_info_cache;
ZEND_API int zend_delete_global_variable(zend_string *name TSRMLS_DC);
-ZEND_API void zend_reset_all_cv(HashTable *symbol_table TSRMLS_DC);
+ZEND_API void zend_reset_all_cv(zend_array *symbol_table TSRMLS_DC);
ZEND_API void zend_rebuild_symbol_table(TSRMLS_D);
zend_rebuild_symbol_table(TSRMLS_C);
}
- array_init_size(return_value, zend_hash_num_elements(EG(active_symbol_table)));
+ array_init_size(return_value, zend_hash_num_elements(&EG(active_symbol_table)->ht));
- zend_hash_copy(Z_ARRVAL_P(return_value), EG(active_symbol_table), zval_add_ref);
+ zend_hash_copy(Z_ARRVAL_P(return_value), &EG(active_symbol_table)->ht, zval_add_ref);
}
/* }}} */
zend_function_state function_state;
zend_op_array *op_array;
zval object;
- HashTable *symbol_table;
+ zend_array *symbol_table;
struct _zend_execute_data *prev_execute_data;
zval old_error_reporting;
zend_bool nested;
zval *ret = NULL;
if (EG(active_symbol_table)) {
- ret = zend_hash_find(EG(active_symbol_table), cv);
+ ret = zend_hash_find(&EG(active_symbol_table)->ht, cv);
if (ret) {
ZVAL_INDIRECT(ptr, ret);
return ret;
/* break missing intentionally */
case BP_VAR_W:
if (EG(active_symbol_table)) {
- ret = zend_hash_update(EG(active_symbol_table), cv, ret);
+ ret = zend_hash_update(&EG(active_symbol_table)->ht, cv, ret);
ZVAL_INDIRECT(ptr, ret);
} else {
ZVAL_NULL(ptr);
zval *ret = NULL;
if (EG(active_symbol_table)) {
- ret = zend_hash_find(EG(active_symbol_table), cv);
+ ret = zend_hash_find(&EG(active_symbol_table)->ht, cv);
if (ret) {
ZVAL_INDIRECT(ptr, ret);
return ret;
zval *ret;
if (EG(active_symbol_table)) {
- ret = zend_hash_find(EG(active_symbol_table), cv);
+ ret = zend_hash_find(&EG(active_symbol_table)->ht, cv);
if (ret) {
ZVAL_INDIRECT(ptr, ret);
return ret;
zval *ret;
if (EG(active_symbol_table)) {
- ret = zend_hash_find(EG(active_symbol_table), cv);
+ ret = zend_hash_find(&EG(active_symbol_table)->ht, cv);
if (ret) {
ZVAL_INDIRECT(ptr, ret);
return ret;
zval *ret;
if (EG(active_symbol_table)) {
- ret = zend_hash_find(EG(active_symbol_table), cv);
+ ret = zend_hash_find(&EG(active_symbol_table)->ht, cv);
if (ret) {
ZVAL_INDIRECT(ptr, ret);
return ret;
}
- ret = zend_hash_update(EG(active_symbol_table), cv, &EG(uninitialized_zval));
+ ret = zend_hash_update(&EG(active_symbol_table)->ht, cv, &EG(uninitialized_zval));
ZVAL_INDIRECT(ptr, ret);
zend_error(E_NOTICE, "Undefined variable: %s", cv->val);
return ret;
zval *ret;
if (EG(active_symbol_table)) {
- ret = zend_hash_find(EG(active_symbol_table), cv);
+ ret = zend_hash_find(&EG(active_symbol_table)->ht, cv);
if (ret) {
ZVAL_INDIRECT(ptr, ret);
return ret;
}
- ret = zend_hash_update(EG(active_symbol_table), cv, &EG(uninitialized_zval));
+ ret = zend_hash_update(&EG(active_symbol_table)->ht, cv, &EG(uninitialized_zval));
ZVAL_INDIRECT(ptr, ret);
return ret;
} else {
if (!EG(active_symbol_table)) {
zend_rebuild_symbol_table(TSRMLS_C);
}
- return EG(active_symbol_table);
+ return &EG(active_symbol_table)->ht;
break;
case ZEND_FETCH_GLOBAL:
case ZEND_FETCH_GLOBAL_LOCK:
}
}
-void zend_clean_and_cache_symbol_table(HashTable *symbol_table TSRMLS_DC) /* {{{ */
+void zend_clean_and_cache_symbol_table(zend_array *symbol_table TSRMLS_DC) /* {{{ */
{
if (EG(symtable_cache_ptr) >= EG(symtable_cache_limit)) {
- zend_hash_destroy(symbol_table);
- FREE_HASHTABLE(symbol_table);
+ zend_hash_destroy(&symbol_table->ht);
+ efree(symbol_table);
} else {
/* clean before putting into the cache, since clean
could call dtors, which could use cached hash */
- zend_hash_clean(symbol_table);
+ zend_hash_clean(&symbol_table->ht);
*(++EG(symtable_cache_ptr)) = symbol_table;
}
}
ZVAL_COPY(EX_VAR_NUM(op_array->this_var), &EG(This));
} else {
ZVAL_COPY(EX_VAR_NUM(op_array->this_var), &EG(This));
- zval *zv = zend_hash_str_add(EG(active_symbol_table), "this", sizeof("this")-1, EX_VAR(op_array->this_var));
+ zval *zv = zend_hash_str_add(&EG(active_symbol_table)->ht, "this", sizeof("this")-1, EX_VAR(op_array->this_var));
if (zv) {
ZVAL_INDIRECT(EX_VAR_NUM(op_array->this_var), zv);
}
ZEND_API int zend_do_fcall(ZEND_OPCODE_HANDLER_ARGS);
-void zend_clean_and_cache_symbol_table(HashTable *symbol_table TSRMLS_DC);
+void zend_clean_and_cache_symbol_table(zend_array *symbol_table TSRMLS_DC);
void zend_free_compiled_variables(zend_execute_data *execute_data TSRMLS_DC);
#define CACHED_PTR(num) \
zend_vm_stack_push(&tmp TSRMLS_CC);
zend_hash_init(&EG(symbol_table).ht, 50, NULL, ZVAL_PTR_DTOR, 0);
- EG(active_symbol_table) = &EG(symbol_table).ht;
+ EG(active_symbol_table) = &EG(symbol_table);
zend_llist_apply(&zend_extensions, (llist_apply_func_t) zend_extension_activator TSRMLS_CC);
EG(opline_ptr) = NULL;
}
while (EG(symtable_cache_ptr)>=EG(symtable_cache)) {
- zend_hash_destroy(*EG(symtable_cache_ptr));
- FREE_HASHTABLE(*EG(symtable_cache_ptr));
+ zend_hash_destroy(&(*EG(symtable_cache_ptr))->ht);
+ efree(*EG(symtable_cache_ptr));
EG(symtable_cache_ptr)--;
}
} zend_end_try();
}
/* }}} */
-int call_user_function_ex(HashTable *function_table, zval *object, zval *function_name, zval *retval_ptr, zend_uint param_count, zval params[], int no_separation, HashTable *symbol_table TSRMLS_DC) /* {{{ */
+int call_user_function_ex(HashTable *function_table, zval *object, zval *function_name, zval *retval_ptr, zend_uint param_count, zval params[], int no_separation, zend_array *symbol_table TSRMLS_DC) /* {{{ */
{
zend_fcall_info fci;
int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TSRMLS_DC) /* {{{ */
{
zend_uint i;
- HashTable *calling_symbol_table;
+ zend_array *calling_symbol_table;
zend_op_array *original_op_array;
zend_op **original_opline_ptr;
zend_class_entry *current_scope;
}
/* }}} */
-ZEND_API void zend_reset_all_cv(HashTable *symbol_table TSRMLS_DC) /* {{{ */
+ZEND_API void zend_reset_all_cv(zend_array *symbol_table TSRMLS_DC) /* {{{ */
{
zend_execute_data *ex;
int i;
ZEND_API void zend_delete_variable(zend_execute_data *ex, HashTable *ht, zend_string *name TSRMLS_DC) /* {{{ */
{
if (zend_hash_del(ht, name) == SUCCESS) {
- while (ex && ex->symbol_table == ht) {
+ while (ex && &ex->symbol_table->ht == ht) {
int i;
if (ex->op_array) {
if (zend_hash_del(&EG(symbol_table).ht, name) == SUCCESS) {
for (ex = EG(current_execute_data); ex; ex = ex->prev_execute_data) {
- if (ex->op_array && ex->symbol_table == &EG(symbol_table).ht) {
+ if (ex->op_array && ex->symbol_table == &EG(symbol_table)) {
int i;
for (i = 0; i < ex->op_array->last_var; i++) {
if (ex->op_array->vars[i]->h == name->h &&
/*printf("Cache hit! Reusing %x\n", symtable_cache[symtable_cache_ptr]);*/
EG(active_symbol_table) = *(EG(symtable_cache_ptr)--);
} else {
- ALLOC_HASHTABLE(EG(active_symbol_table));
- zend_hash_init(EG(active_symbol_table), ex->op_array->last_var, NULL, ZVAL_PTR_DTOR, 0);
+ EG(active_symbol_table) = emalloc(sizeof(zend_array));
+ EG(active_symbol_table)->gc.refcount = 0;
+ EG(active_symbol_table)->gc.u.v.type = IS_ARRAY;
+ zend_hash_init(&EG(active_symbol_table)->ht, ex->op_array->last_var, NULL, ZVAL_PTR_DTOR, 0);
/*printf("Cache miss! Initialized %x\n", EG(active_symbol_table));*/
}
ex->symbol_table = EG(active_symbol_table);
}
for (i = 0; i < ex->op_array->last_var; i++) {
if (Z_TYPE_P(EX_VAR_NUM_2(ex, i)) != IS_UNDEF) {
- zval *zv = zend_hash_update(EG(active_symbol_table),
+ zval *zv = zend_hash_update(&EG(active_symbol_table)->ht,
ex->op_array->vars[i],
EX_VAR_NUM_2(ex, i));
ZVAL_INDIRECT(EX_VAR_NUM_2(ex, i), zv);
zend_generator *generator;
zend_execute_data *current_execute_data;
zend_op **opline_ptr;
- HashTable *current_symbol_table;
+ zend_array *current_symbol_table;
zend_execute_data *execute_data;
zend_vm_stack current_stack = EG(argument_stack);
zend_execute_data *original_execute_data = EG(current_execute_data);
zend_op **original_opline_ptr = EG(opline_ptr);
zend_op_array *original_active_op_array = EG(active_op_array);
- HashTable *original_active_symbol_table = EG(active_symbol_table);
+ zend_array *original_active_symbol_table = EG(active_symbol_table);
zval original_This;
zend_class_entry *original_scope = EG(scope);
zend_class_entry *original_called_scope = EG(called_scope);
zval error_zval;
/* symbol table cache */
- HashTable *symtable_cache[SYMTABLE_CACHE_SIZE];
- HashTable **symtable_cache_limit;
- HashTable **symtable_cache_ptr;
+ zend_array *symtable_cache[SYMTABLE_CACHE_SIZE];
+ zend_array **symtable_cache_limit;
+ zend_array **symtable_cache_ptr;
zend_op **opline_ptr;
- HashTable *active_symbol_table;
+ zend_array *active_symbol_table;
zend_array symbol_table; /* main symbol table */
HashTable included_files; /* files already included */
if (!EG(active_symbol_table)) {
zend_rebuild_symbol_table(TSRMLS_C);
}
- p = zend_hash_find(EG(active_symbol_table), key->key);
+ p = zend_hash_find(&EG(active_symbol_table)->ht, key->key);
if (!p) {
p = &tmp;
ZVAL_NULL(&tmp);
if (is_ref) {
ZVAL_NEW_REF(&tmp, &tmp);
- zend_hash_add(EG(active_symbol_table), key->key, &tmp);
+ zend_hash_add(&EG(active_symbol_table)->ht, key->key, &tmp);
} else {
zend_error(E_NOTICE,"Undefined variable: %s", key->key->val);
}
ZVAL_OBJ(EX_VAR_NUM(opline->op2.var), EG(exception));
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op2.var);
- zval *zv = zend_hash_update(EG(active_symbol_table), cv, EX_VAR_NUM(opline->op2.var));
+ zval *zv = zend_hash_update(&EG(active_symbol_table)->ht, cv, EX_VAR_NUM(opline->op2.var));
ZVAL_INDIRECT(EX_VAR_NUM(opline->op2.var), zv);
}
if (UNEXPECTED(EG(exception) != exception)) {
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table), cv TSRMLS_CC);
+ zend_delete_variable(EX(prev_execute_data), &EG(active_symbol_table)->ht, cv TSRMLS_CC);
ZVAL_UNDEF(EX_VAR_NUM(opline->op1.var));
} else if (Z_TYPE_P(EX_VAR_NUM(opline->op1.var)) != IS_UNDEF) {
zval_ptr_dtor(EX_VAR_NUM(opline->op1.var));
} else if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- if ((value = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
+ if ((value = zend_hash_find(&EG(active_symbol_table)->ht, cv)) == NULL) {
isset = 0;
}
} else {
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table), cv TSRMLS_CC);
+ zend_delete_variable(EX(prev_execute_data), &EG(active_symbol_table)->ht, cv TSRMLS_CC);
ZVAL_UNDEF(EX_VAR_NUM(opline->op1.var));
} else if (Z_TYPE_P(EX_VAR_NUM(opline->op1.var)) != IS_UNDEF) {
zval_ptr_dtor(EX_VAR_NUM(opline->op1.var));
} else if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- if ((value = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
+ if ((value = zend_hash_find(&EG(active_symbol_table)->ht, cv)) == NULL) {
isset = 0;
}
} else {
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table), cv TSRMLS_CC);
+ zend_delete_variable(EX(prev_execute_data), &EG(active_symbol_table)->ht, cv TSRMLS_CC);
ZVAL_UNDEF(EX_VAR_NUM(opline->op1.var));
} else if (Z_TYPE_P(EX_VAR_NUM(opline->op1.var)) != IS_UNDEF) {
zval_ptr_dtor(EX_VAR_NUM(opline->op1.var));
} else if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- if ((value = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
+ if ((value = zend_hash_find(&EG(active_symbol_table)->ht, cv)) == NULL) {
isset = 0;
}
} else {
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table), cv TSRMLS_CC);
+ zend_delete_variable(EX(prev_execute_data), &EG(active_symbol_table)->ht, cv TSRMLS_CC);
ZVAL_UNDEF(EX_VAR_NUM(opline->op1.var));
} else if (Z_TYPE_P(EX_VAR_NUM(opline->op1.var)) != IS_UNDEF) {
zval_ptr_dtor(EX_VAR_NUM(opline->op1.var));
} else if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- if ((value = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
+ if ((value = zend_hash_find(&EG(active_symbol_table)->ht, cv)) == NULL) {
isset = 0;
}
} else {
ZVAL_OBJ(EX_VAR_NUM(opline->op2.var), EG(exception));
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op2.var);
- zval *zv = zend_hash_update(EG(active_symbol_table), cv, EX_VAR_NUM(opline->op2.var));
+ zval *zv = zend_hash_update(&EG(active_symbol_table)->ht, cv, EX_VAR_NUM(opline->op2.var));
ZVAL_INDIRECT(EX_VAR_NUM(opline->op2.var), zv);
}
if (UNEXPECTED(EG(exception) != exception)) {
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table), cv TSRMLS_CC);
+ zend_delete_variable(EX(prev_execute_data), &EG(active_symbol_table)->ht, cv TSRMLS_CC);
ZVAL_UNDEF(EX_VAR_NUM(opline->op1.var));
} else if (Z_TYPE_P(EX_VAR_NUM(opline->op1.var)) != IS_UNDEF) {
zval_ptr_dtor(EX_VAR_NUM(opline->op1.var));
} else if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- if ((value = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
+ if ((value = zend_hash_find(&EG(active_symbol_table)->ht, cv)) == NULL) {
isset = 0;
}
} else {
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table), cv TSRMLS_CC);
+ zend_delete_variable(EX(prev_execute_data), &EG(active_symbol_table)->ht, cv TSRMLS_CC);
ZVAL_UNDEF(EX_VAR_NUM(opline->op1.var));
} else if (Z_TYPE_P(EX_VAR_NUM(opline->op1.var)) != IS_UNDEF) {
zval_ptr_dtor(EX_VAR_NUM(opline->op1.var));
} else if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- if ((value = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
+ if ((value = zend_hash_find(&EG(active_symbol_table)->ht, cv)) == NULL) {
isset = 0;
}
} else {
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table), cv TSRMLS_CC);
+ zend_delete_variable(EX(prev_execute_data), &EG(active_symbol_table)->ht, cv TSRMLS_CC);
ZVAL_UNDEF(EX_VAR_NUM(opline->op1.var));
} else if (Z_TYPE_P(EX_VAR_NUM(opline->op1.var)) != IS_UNDEF) {
zval_ptr_dtor(EX_VAR_NUM(opline->op1.var));
} else if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- if ((value = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
+ if ((value = zend_hash_find(&EG(active_symbol_table)->ht, cv)) == NULL) {
isset = 0;
}
} else {
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table), cv TSRMLS_CC);
+ zend_delete_variable(EX(prev_execute_data), &EG(active_symbol_table)->ht, cv TSRMLS_CC);
ZVAL_UNDEF(EX_VAR_NUM(opline->op1.var));
} else if (Z_TYPE_P(EX_VAR_NUM(opline->op1.var)) != IS_UNDEF) {
zval_ptr_dtor(EX_VAR_NUM(opline->op1.var));
} else if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- if ((value = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
+ if ((value = zend_hash_find(&EG(active_symbol_table)->ht, cv)) == NULL) {
isset = 0;
}
} else {
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table), cv TSRMLS_CC);
+ zend_delete_variable(EX(prev_execute_data), &EG(active_symbol_table)->ht, cv TSRMLS_CC);
ZVAL_UNDEF(EX_VAR_NUM(opline->op1.var));
} else if (Z_TYPE_P(EX_VAR_NUM(opline->op1.var)) != IS_UNDEF) {
zval_ptr_dtor(EX_VAR_NUM(opline->op1.var));
} else if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- if ((value = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
+ if ((value = zend_hash_find(&EG(active_symbol_table)->ht, cv)) == NULL) {
isset = 0;
}
} else {
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table), cv TSRMLS_CC);
+ zend_delete_variable(EX(prev_execute_data), &EG(active_symbol_table)->ht, cv TSRMLS_CC);
ZVAL_UNDEF(EX_VAR_NUM(opline->op1.var));
} else if (Z_TYPE_P(EX_VAR_NUM(opline->op1.var)) != IS_UNDEF) {
zval_ptr_dtor(EX_VAR_NUM(opline->op1.var));
} else if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- if ((value = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
+ if ((value = zend_hash_find(&EG(active_symbol_table)->ht, cv)) == NULL) {
isset = 0;
}
} else {
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table), cv TSRMLS_CC);
+ zend_delete_variable(EX(prev_execute_data), &EG(active_symbol_table)->ht, cv TSRMLS_CC);
ZVAL_UNDEF(EX_VAR_NUM(opline->op1.var));
} else if (Z_TYPE_P(EX_VAR_NUM(opline->op1.var)) != IS_UNDEF) {
zval_ptr_dtor(EX_VAR_NUM(opline->op1.var));
} else if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- if ((value = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
+ if ((value = zend_hash_find(&EG(active_symbol_table)->ht, cv)) == NULL) {
isset = 0;
}
} else {
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table), cv TSRMLS_CC);
+ zend_delete_variable(EX(prev_execute_data), &EG(active_symbol_table)->ht, cv TSRMLS_CC);
ZVAL_UNDEF(EX_VAR_NUM(opline->op1.var));
} else if (Z_TYPE_P(EX_VAR_NUM(opline->op1.var)) != IS_UNDEF) {
zval_ptr_dtor(EX_VAR_NUM(opline->op1.var));
} else if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- if ((value = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
+ if ((value = zend_hash_find(&EG(active_symbol_table)->ht, cv)) == NULL) {
isset = 0;
}
} else {
if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- zend_delete_variable(EX(prev_execute_data), EG(active_symbol_table), cv TSRMLS_CC);
+ zend_delete_variable(EX(prev_execute_data), &EG(active_symbol_table)->ht, cv TSRMLS_CC);
ZVAL_UNDEF(EX_VAR_NUM(opline->op1.var));
} else if (Z_TYPE_P(EX_VAR_NUM(opline->op1.var)) != IS_UNDEF) {
zval_ptr_dtor(EX_VAR_NUM(opline->op1.var));
} else if (EG(active_symbol_table)) {
zend_string *cv = CV_DEF_OF(opline->op1.var);
- if ((value = zend_hash_find(EG(active_symbol_table), cv)) == NULL) {
+ if ((value = zend_hash_find(&EG(active_symbol_table)->ht, cv)) == NULL) {
isset = 0;
}
} else {
var_exists = 0;
if (key_type == HASH_KEY_IS_STRING) {
- var_exists = zend_hash_exists(EG(active_symbol_table), var_name);
+ var_exists = zend_hash_exists(&EG(active_symbol_table)->ht, var_name);
} else if (key_type == HASH_KEY_IS_LONG && (extract_type == EXTR_PREFIX_ALL || extract_type == EXTR_PREFIX_INVALID)) {
zval num;
SEPARATE_ZVAL_TO_MAKE_IS_REF(entry);
Z_ADDREF_P(entry);
- if ((orig_var = zend_hash_find(EG(active_symbol_table), Z_STR(final_name))) != NULL) {
+ if ((orig_var = zend_hash_find(&EG(active_symbol_table)->ht, Z_STR(final_name))) != NULL) {
zval_ptr_dtor(orig_var);
ZVAL_COPY_VALUE(orig_var, entry);
} else {
- zend_hash_update(EG(active_symbol_table), Z_STR(final_name), entry);
+ zend_hash_update(&EG(active_symbol_table)->ht, Z_STR(final_name), entry);
}
} else {
ZVAL_DUP(&data, entry);
- ZEND_SET_SYMBOL_WITH_LENGTH(EG(active_symbol_table), Z_STRVAL(final_name), Z_STRLEN(final_name), &data, 1, 0);
+ ZEND_SET_SYMBOL_WITH_LENGTH(&EG(active_symbol_table)->ht, Z_STRVAL(final_name), Z_STRLEN(final_name), &data, 1, 0);
}
count++;
}
}
for (i=0; i<ZEND_NUM_ARGS(); i++) {
- php_compact_var(EG(active_symbol_table), return_value, &args[i] TSRMLS_CC);
+ php_compact_var(&EG(active_symbol_table)->ht, return_value, &args[i] TSRMLS_CC);
}
}
/* }}} */
new_hash = php_splice(Z_ARRVAL_P(stack), 0, 0, &args[0], argc, NULL);
old_hash = *Z_ARRVAL_P(stack);
if (Z_ARRVAL_P(stack) == &EG(symbol_table).ht) {
- zend_reset_all_cv(&EG(symbol_table).ht TSRMLS_CC);
+ zend_reset_all_cv(&EG(symbol_table) TSRMLS_CC);
}
*Z_ARRVAL_P(stack) = *new_hash;
FREE_HASHTABLE(new_hash);
/* Replace input array's hashtable with the new one */
old_hash = *Z_ARRVAL_P(array);
if (Z_ARRVAL_P(array) == &EG(symbol_table).ht) {
- zend_reset_all_cv(&EG(symbol_table).ht TSRMLS_CC);
+ zend_reset_all_cv(&EG(symbol_table) TSRMLS_CC);
}
*Z_ARRVAL_P(array) = *new_hash;
FREE_HASHTABLE(new_hash);
/* Copy the result hash into return value */
old_hash = *Z_ARRVAL_P(return_value);
if (Z_ARRVAL_P(return_value) == &EG(symbol_table).ht) {
- zend_reset_all_cv(&EG(symbol_table).ht TSRMLS_CC);
+ zend_reset_all_cv(&EG(symbol_table) TSRMLS_CC);
}
*Z_ARRVAL_P(return_value) = *new_hash;
FREE_HASHTABLE(new_hash);
if (header_init) {
zval ztmp;
array_init(&ztmp);
- ZEND_SET_SYMBOL(EG(active_symbol_table), "http_response_header", &ztmp);
+ ZEND_SET_SYMBOL(&EG(active_symbol_table)->ht, "http_response_header", &ztmp);
}
- response_header = zend_hash_str_find(EG(active_symbol_table), "http_response_header", sizeof("http_response_header")-1);
+ response_header = zend_hash_str_find(&EG(active_symbol_table)->ht, "http_response_header", sizeof("http_response_header")-1);
if (!php_stream_eof(stream)) {
size_t tmp_line_len;
if (!EG(active_symbol_table)) {
zend_rebuild_symbol_table(TSRMLS_C);
}
-//??? Z_ARRVAL(tmp) = EG(active_symbol_table);
+ ZVAL_ARR(&tmp, EG(active_symbol_table));
sapi_module.treat_data(PARSE_STRING, res, &tmp TSRMLS_CC);
} else {
zval ret;
array_init(&ret);
sapi_module.treat_data(PARSE_STRING, res, &ret TSRMLS_CC);
/* Clear out the array that was passed in. */
+ if (Z_ISREF_P(arrayArg)) {
+ arrayArg = Z_REFVAL_P(arrayArg);
+ }
zval_dtor(arrayArg);
ZVAL_COPY_VALUE(arrayArg, &ret);
}
if (EG(active_symbol_table)) {
zval tmp;
ZVAL_STRINGL(&tmp, buffer, buffer_len);
- zend_hash_str_update(EG(active_symbol_table), "php_errormsg", sizeof("php_errormsg")-1, &tmp);
+ zend_hash_str_update(&EG(active_symbol_table)->ht, "php_errormsg", sizeof("php_errormsg")-1, &tmp);
}
}
if (replace_buffer) {
if (EG(active_symbol_table)) {
zval tmp;
ZVAL_STRINGL(&tmp, buffer, buffer_len);
- zend_hash_str_update(EG(active_symbol_table), "php_errormsg", sizeof("php_errormsg")-1, &tmp);
+ zend_hash_str_update(&EG(active_symbol_table)->ht, "php_errormsg", sizeof("php_errormsg")-1, &tmp);
}
}
assert(var_name != NULL);
- if (track_vars_array) {
+ if (track_vars_array && Z_TYPE_P(track_vars_array) == IS_ARRAY) {
symtable1 = Z_ARRVAL_P(track_vars_array);
}
}
/* GLOBALS hijack attempt, reject parameter */
- if (symtable1 == EG(active_symbol_table) &&
+ if (symtable1 && EG(active_symbol_table) &&
+ symtable1 == &EG(active_symbol_table)->ht &&
var_len == sizeof("GLOBALS")-1 &&
!memcmp(var, "GLOBALS", sizeof("GLOBALS")-1)) {
zval_dtor(val);
char *strtok_buf = NULL;
long count = 0;
+ ZVAL_UNDEF(&array);
switch (arg) {
case PARSE_POST:
case PARSE_GET:
zend_hash_init(&vars, 8, NULL, NULL, 0);
- zend_hash_internal_pointer_reset_ex(EG(active_symbol_table), &pos);
- while (zend_hash_get_current_key_ex(EG(active_symbol_table), &var, NULL, 0, &pos) == HASH_KEY_IS_STRING) {
- data = zend_hash_get_current_data_ex(EG(active_symbol_table), &pos);
+ zend_hash_internal_pointer_reset_ex(&EG(active_symbol_table)->ht, &pos);
+ while (zend_hash_get_current_key_ex(&EG(active_symbol_table)->ht, &var, NULL, 0, &pos) == HASH_KEY_IS_STRING) {
+ data = zend_hash_get_current_data_ex(&EG(active_symbol_table)->ht, &pos);
if (*(var->val) != '_') {
zend_hash_update(&vars, var, data);
}
- zend_hash_move_forward_ex(EG(active_symbol_table), &pos);
+ zend_hash_move_forward_ex(&EG(active_symbol_table)->ht, &pos);
}
{