cvs: /php4/ext/standard basic_functions.c
| From: | Andrei Zmievski | Date: | Tue, 19 Oct 1999 14:44:19 +0000 |
| Subject: | cvs: /php4/ext/standard basic_functions.c | ||
| Groups: | php.version4 | ||
| Request: | Send a blank email to php-version4+get-5572@lists.php.net to get a copy of this message | ||
andrei Tue Oct 19 10:44:19 1999 EDT
Modified files:
/php4/ext/standard basic_functions.c
Log:
(PHP extract): Fixed bug that would mess up global and referenced
variables in certain cases.
Index: php4/ext/standard/basic_functions.c
diff -u php4/ext/standard/basic_functions.c:1.105 php4/ext/standard/basic_functions.c:1.106
--- php4/ext/standard/basic_functions.c:1.105 Sat Oct 16 06:14:46 1999
+++ php4/ext/standard/basic_functions.c Tue Oct 19 10:43:48 1999
@@ -2237,8 +2237,7 @@
PHP_FUNCTION(extract)
{
zval **var_array, **etype, **prefix;
- zval **entry_ptr, *entry, *exist;
- zval *data;
+ zval **entry, *exist, *data;
char *varname, *finalname;
ulong lkey;
int res, extype;
@@ -2288,8 +2287,7 @@
}
zend_hash_internal_pointer_reset((*var_array)->value.ht);
- while(zend_hash_get_current_data((*var_array)->value.ht, (void **)&entry_ptr) == SUCCESS) {
- entry = *entry_ptr;
+ while(zend_hash_get_current_data((*var_array)->value.ht, (void **)&entry) == SUCCESS) {
if (zend_hash_get_current_key((*var_array)->value.ht, &varname, &lkey) ==
HASH_KEY_IS_STRING) {
@@ -2297,7 +2295,7 @@
finalname = NULL;
res = zend_hash_find(EG(active_symbol_table),
- varname, strlen(varname)+1, (void**)&exist);
+ varname, strlen(varname)+1, (void**)&exist);
switch (extype) {
case EXTR_OVERWRITE:
finalname = estrdup(varname);
@@ -2324,13 +2322,11 @@
}
if (finalname) {
- data = (zval *)emalloc(sizeof(zval));
- *data = *entry;
+ MAKE_STD_ZVAL(data);
+ *data = **entry;
zval_copy_ctor(data);
- INIT_PZVAL(data);
- zend_hash_update(EG(active_symbol_table), finalname,
- strlen(finalname)+1, &data, sizeof(zval *), NULL);
+ ZEND_SET_SYMBOL(EG(active_symbol_table), finalname, data);
efree(finalname);
}
}