summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAntony Dovgal <tony2001@php.net>2006-09-11 14:30:08 +0000
committerAntony Dovgal <tony2001@php.net>2006-09-11 14:30:08 +0000
commitd6ee9d48109814a3ba8e9879f5ab63466f4327be (patch)
tree9e4ab95ef510c1a5eff62ae3709e3a9ff87e57fc
parent0a1f5d12a127f0cbf3330a2eada88e7744d34eb1 (diff)
downloadphp-git-d6ee9d48109814a3ba8e9879f5ab63466f4327be.tar.gz
MFH: fix #38779 (engine crashes when require()'ing file with syntax error through userspace stream wrapper)
-rw-r--r--Zend/zend.c1
-rw-r--r--Zend/zend_execute_API.c7
-rw-r--r--Zend/zend_globals.h2
3 files changed, 10 insertions, 0 deletions
diff --git a/Zend/zend.c b/Zend/zend.c
index 9b03aa45c8..fbef8186c7 100644
--- a/Zend/zend.c
+++ b/Zend/zend.c
@@ -503,6 +503,7 @@ static void executor_globals_ctor(zend_executor_globals *executor_globals TSRMLS
EG(current_execute_data) = NULL;
EG(current_module) = NULL;
EG(exit_status) = 0;
+ EG(active) = 0;
}
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index 4170a30e7c..ab535ea74d 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -188,6 +188,8 @@ void init_executor(TSRMLS_D)
EG(scope) = NULL;
EG(This) = NULL;
+
+ EG(active) = 1;
}
static int zval_call_destructor(zval **zv TSRMLS_DC)
@@ -316,6 +318,7 @@ void shutdown_executor(TSRMLS_D)
FREE_HASHTABLE(EG(in_autoload));
}
} zend_end_try();
+ EG(active) = 0;
}
@@ -613,6 +616,10 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
char *fname, *colon;
int fname_len;
+ if (!EG(active)) {
+ return FAILURE; /* executor is already inactive */
+ }
+
if (EG(exception)) {
return FAILURE; /* we would result in an instable executor otherwise */
}
diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h
index 53c51e9b64..4bc92a4477 100644
--- a/Zend/zend_globals.h
+++ b/Zend/zend_globals.h
@@ -237,6 +237,8 @@ struct _zend_executor_globals {
zend_property_info std_property_info;
+ zend_bool active;
+
void *reserved[ZEND_MAX_RESERVED_RESOURCES];
};