summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2006-09-05 15:50:07 +0000
committerIlia Alshanetsky <iliaa@php.net>2006-09-05 15:50:07 +0000
commit229137cad40b8dda4693965d5f1e272fbc8e4672 (patch)
tree180ee33c11d451fec43d04ceea0c1f410f8331c3
parentaa6593f984f9c0b4d4ecce7fe4deafeca4c9508d (diff)
downloadphp-git-229137cad40b8dda4693965d5f1e272fbc8e4672.tar.gz
Fixed bug #38579 require_once/include_once optimization causes files to be
loaded multiple times.
-rw-r--r--Zend/zend_vm_def.h10
-rw-r--r--Zend/zend_vm_execute.h40
2 files changed, 35 insertions, 15 deletions
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 884a0ece7b..a7f01384fd 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -2773,19 +2773,23 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMP|VAR|CV, ANY)
char cwd[MAXPATHLEN];
cwd_state state;
+#ifndef PHP_WIN32
if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) {
cwd[0] = '\0';
} else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) {
cwd[0] = '\0';
}
-
+#endif
state.cwd_length = strlen(cwd);
state.cwd = zend_strndup(cwd, state.cwd_length);
- if (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
+#ifndef PHP_WIN32
+ if (state.cwd_length > 0 && !virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1)) {
failure_retval=1;
- } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
+ } else
+#endif
+ if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
if (!file_handle.opened_path) {
file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename));
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 132f3683bb..fd9bdcb0e3 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -1937,19 +1937,23 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
char cwd[MAXPATHLEN];
cwd_state state;
+#ifndef PHP_WIN32
if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) {
cwd[0] = '\0';
} else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) {
cwd[0] = '\0';
}
-
+#endif
state.cwd_length = strlen(cwd);
state.cwd = zend_strndup(cwd, state.cwd_length);
- if (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
+#ifndef PHP_WIN32
+ if (state.cwd_length > 0 && !virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1)) {
failure_retval=1;
- } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
+ } else
+#endif
+ if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
if (!file_handle.opened_path) {
file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename));
@@ -4455,19 +4459,23 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
char cwd[MAXPATHLEN];
cwd_state state;
+#ifndef PHP_WIN32
if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) {
cwd[0] = '\0';
} else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) {
cwd[0] = '\0';
}
-
+#endif
state.cwd_length = strlen(cwd);
state.cwd = zend_strndup(cwd, state.cwd_length);
- if (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
+#ifndef PHP_WIN32
+ if (state.cwd_length > 0 && !virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1)) {
failure_retval=1;
- } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
+ } else
+#endif
+ if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
if (!file_handle.opened_path) {
file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename));
@@ -7555,19 +7563,23 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
char cwd[MAXPATHLEN];
cwd_state state;
+#ifndef PHP_WIN32
if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) {
cwd[0] = '\0';
} else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) {
cwd[0] = '\0';
}
-
+#endif
state.cwd_length = strlen(cwd);
state.cwd = zend_strndup(cwd, state.cwd_length);
- if (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
+#ifndef PHP_WIN32
+ if (state.cwd_length > 0 && !virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1)) {
failure_retval=1;
- } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
+ } else
+#endif
+ if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
if (!file_handle.opened_path) {
file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename));
@@ -19951,19 +19963,23 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
char cwd[MAXPATHLEN];
cwd_state state;
+#ifndef PHP_WIN32
if (IS_ABSOLUTE_PATH(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename))) {
cwd[0] = '\0';
} else if (!VCWD_GETCWD(cwd, MAXPATHLEN)) {
cwd[0] = '\0';
}
-
+#endif
state.cwd_length = strlen(cwd);
state.cwd = zend_strndup(cwd, state.cwd_length);
- if (!virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
+#ifndef PHP_WIN32
+ if (state.cwd_length > 0 && !virtual_file_ex(&state, Z_STRVAL_P(inc_filename), NULL, 1) &&
zend_hash_exists(&EG(included_files), state.cwd, state.cwd_length+1)) {
failure_retval=1;
- } else if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
+ } else
+#endif
+ if (SUCCESS == zend_stream_open(Z_STRVAL_P(inc_filename), &file_handle TSRMLS_CC)) {
if (!file_handle.opened_path) {
file_handle.opened_path = estrndup(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename));