CVS update: php3
| From: | zeev | Date: | Sat, 19 Sep 1998 11:59:31 +0000 |
| Subject: | CVS update: php3 | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-1247@lists.php.net to get a copy of this message | ||
Date: Saturday September 19, 1998 @ 7:59
Author: zeev
Update of /repository/php3
In directory asf:/u2/tmp/cvs-serv4889
Modified Files:
main.c
Log Message:
Fix the reported crash
Index: php3/main.c
diff -c php3/main.c:1.468 php3/main.c:1.469
*** php3/main.c:1.468 Sun Sep 13 19:55:54 1998
--- php3/main.c Sat Sep 19 07:59:29 1998
***************
*** 29,35 ****
+----------------------------------------------------------------------+
*/
! /* $Id: main.c,v 1.468 1998/09/13 23:55:54 zeev Exp $ */
/* #define CRASH_DETECTION */
--- 29,35 ----
+----------------------------------------------------------------------+
*/
! /* $Id: main.c,v 1.469 1998/09/19 11:59:29 zeev Exp $ */
/* #define CRASH_DETECTION */
***************
*** 756,776 ****
}
if (GLOBAL(initialized) & INIT_FUNCTION_STATE_STACK) {
FunctionState *tmp;
SHUTDOWN_DEBUG("Function state stack");
while (stack_top(&GLOBAL(function_state_stack), (void **) &tmp) != FAILURE) {
if (tmp->function_name) {
efree(tmp->function_name);
! if (tmp->symbol_table && tmp->symbol_table != &GLOBAL(symbol_table)) {
_php3_hash_destroy(tmp->symbol_table);
efree(tmp->symbol_table);
}
}
stack_del_top(&GLOBAL(function_state_stack));
}
if (GLOBAL(function_state).function_name) {
efree(GLOBAL(function_state).function_name);
! if (GLOBAL(function_state).symbol_table && GLOBAL(function_state).symbol_table !=
&GLOBAL(symbol_table)) {
_php3_hash_destroy(GLOBAL(function_state).symbol_table);
efree(GLOBAL(function_state).symbol_table);
}
--- 756,784 ----
}
if (GLOBAL(initialized) & INIT_FUNCTION_STATE_STACK) {
FunctionState *tmp;
+ HashTable *last_symbol_table=NULL; /* to protect against freeing the same symtable twice,
+ * if we 'crashed' in a nested function call
+ */
SHUTDOWN_DEBUG("Function state stack");
while (stack_top(&GLOBAL(function_state_stack), (void **) &tmp) != FAILURE) {
if (tmp->function_name) {
efree(tmp->function_name);
! if (tmp->symbol_table
! && (tmp->symbol_table != &GLOBAL(symbol_table))
! && (tmp->symbol_table != last_symbol_table)) {
_php3_hash_destroy(tmp->symbol_table);
efree(tmp->symbol_table);
+ last_symbol_table = tmp->symbol_table;
}
}
stack_del_top(&GLOBAL(function_state_stack));
}
if (GLOBAL(function_state).function_name) {
efree(GLOBAL(function_state).function_name);
! if (GLOBAL(function_state).symbol_table
! && (GLOBAL(function_state).symbol_table != &GLOBAL(symbol_table))
! && (GLOBAL(function_state).symbol_table != last_symbol_table)) {
_php3_hash_destroy(GLOBAL(function_state).symbol_table);
efree(GLOBAL(function_state).symbol_table);
}
--
PHP Development Mailing List http://www.php.net/
To unsubscribe send an empty message to php-dev-unsubscribe@lists.php.net
For help: php-dev-help@lists.php.net