mirror of
https://github.com/php/php-src.git
synced 2026-04-29 11:13:36 +02:00
MFB: Fixed bug #38579 require_once/include_once optimization causes files
to be loaded multiple times.
This commit is contained in:
+6
-3
@@ -2833,20 +2833,23 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMP|VAR|CV, ANY)
|
||||
zend_file_handle file_handle;
|
||||
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);
|
||||
|
||||
#ifndef PHP_WIN32
|
||||
if (!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));
|
||||
}
|
||||
|
||||
+24
-12
@@ -1914,20 +1914,23 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
zend_file_handle file_handle;
|
||||
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);
|
||||
|
||||
#ifndef PHP_WIN32
|
||||
if (!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));
|
||||
}
|
||||
@@ -4500,20 +4503,23 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
zend_file_handle file_handle;
|
||||
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);
|
||||
|
||||
#ifndef PHP_WIN32
|
||||
if (!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));
|
||||
}
|
||||
@@ -7683,20 +7689,23 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
zend_file_handle file_handle;
|
||||
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);
|
||||
|
||||
#ifndef PHP_WIN32
|
||||
if (!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));
|
||||
}
|
||||
@@ -20586,20 +20595,23 @@ static int ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
|
||||
zend_file_handle file_handle;
|
||||
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);
|
||||
|
||||
#ifndef PHP_WIN32
|
||||
if (!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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user