summaryrefslogtreecommitdiff
path: root/Zend/zend_execute.c
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r--Zend/zend_execute.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index d1faef252c..fbb77e3765 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -1720,6 +1720,7 @@ send_by_ref:
if (opline->op2.u.constant.type==IS_CONSTANT_ARRAY) {
zval_copy_ctor(default_value);
}
+ default_value->refcount=1;
zval_update_constant(&default_value, 0);
default_value->refcount=0;
default_value->is_ref=0;
@@ -1969,7 +1970,8 @@ send_by_ref:
return_value_used = RETURN_VALUE_USED(opline);
switch (opline->op2.u.constant.value.lval) {
- case ZEND_INCLUDE_ONCE: {
+ case ZEND_INCLUDE_ONCE:
+ case ZEND_REQUIRE_ONCE: {
char *opened_path;
int dummy = 1;
zend_file_handle file_handle;
@@ -1986,17 +1988,19 @@ send_by_ref:
if (file_handle.handle.fp) {
if (!opened_path || zend_hash_add(&EG(included_files), opened_path, strlen(opened_path)+1, (void *)&dummy, sizeof(int), NULL)==SUCCESS) {
- new_op_array = zend_compile_files(ZEND_INCLUDE CLS_CC, 1, &file_handle);
- if (new_op_array) {
- pass_include_eval(new_op_array);
- } else {
+ new_op_array = zend_compile_file(&file_handle CLS_CC);
+ if (!new_op_array) {
fclose(file_handle.handle.fp);
}
} else {
fclose(file_handle.handle.fp);
}
} else {
- zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle.filename);
+ if (opline->opcode==ZEND_INCLUDE_ONCE) {
+ zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, file_handle.filename);
+ } else {
+ zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, file_handle.filename);
+ }
}
if (opened_path) {
free (opened_path);
@@ -2008,9 +2012,6 @@ send_by_ref:
case ZEND_REQUIRE:
{
new_op_array = compile_filename(opline->op2.u.constant.value.lval, inc_filename CLS_CC ELS_CC);
- if (new_op_array) {
- pass_include_eval(new_op_array);
- }
break;
}
case ZEND_EVAL: