]> granicus.if.org Git - php/commitdiff
- Restore fix for #39863 (do not accept paths with NULL in them)
authorFelipe Pena <felipe@php.net>
Mon, 6 Jun 2011 02:34:38 +0000 (02:34 +0000)
committerFelipe Pena <felipe@php.net>
Mon, 6 Jun 2011 02:34:38 +0000 (02:34 +0000)
# This was removed by regenerating the VM months ago

Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index deab17b65d706a741d4eaad2d05e41f350c4fe34..47b65fbbe8567f506576141c521742185042fb67 100644 (file)
@@ -3229,59 +3229,67 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMP|VAR|CV, ANY)
        }
 
        return_value_used = RETURN_VALUE_USED(opline);
+       
+       if (Z_LVAL(opline->op2.u.constant) != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
+               if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE || Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE) {
+                       zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+               } else {
+                       zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+               }
+       } else {
+               switch (Z_LVAL(opline->op2.u.constant)) {
+                       case ZEND_INCLUDE_ONCE:
+                       case ZEND_REQUIRE_ONCE: {
+                                       zend_file_handle file_handle;
+                                       char *resolved_path;
+
+                                       resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
+                                       if (resolved_path) {
+                                               failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
+                                       } else {
+                                               resolved_path = Z_STRVAL_P(inc_filename);
+                                       }
 
-       switch (Z_LVAL(opline->op2.u.constant)) {
-               case ZEND_INCLUDE_ONCE:
-               case ZEND_REQUIRE_ONCE: {
-                               zend_file_handle file_handle;
-                               char *resolved_path;
-
-                               resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
-                               if (resolved_path) {
-                                       failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
-                               } else {
-                                       resolved_path = Z_STRVAL_P(inc_filename);
-                               }
-
-                               if (failure_retval) {
-                                       /* do nothing, file already included */
-                               } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
+                                       if (failure_retval) {
+                                               /* do nothing, file already included */
+                                       } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
 
-                                       if (!file_handle.opened_path) {
-                                               file_handle.opened_path = estrdup(resolved_path);
-                                       }
+                                               if (!file_handle.opened_path) {
+                                                       file_handle.opened_path = estrdup(resolved_path);
+                                               }
 
-                                       if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
-                                               new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
-                                               zend_destroy_file_handle(&file_handle TSRMLS_CC);
+                                               if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
+                                                       new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
+                                                       zend_destroy_file_handle(&file_handle TSRMLS_CC);
+                                               } else {
+                                                       zend_file_handle_dtor(&file_handle TSRMLS_CC);
+                                                       failure_retval=1;
+                                               }
                                        } else {
-                                               zend_file_handle_dtor(&file_handle TSRMLS_CC);
-                                               failure_retval=1;
+                                               if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
+                                                       zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                               } else {
+                                                       zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                               }
                                        }
-                               } else {
-                                       if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
-                                               zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
-                                       } else {
-                                               zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                       if (resolved_path != Z_STRVAL_P(inc_filename)) {
+                                               efree(resolved_path);
                                        }
                                }
-                               if (resolved_path != Z_STRVAL_P(inc_filename)) {
-                                       efree(resolved_path);
-                               }
-                       }
-                       break;
-               case ZEND_INCLUDE:
-               case ZEND_REQUIRE:
-                       new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
-                       break;
-               case ZEND_EVAL: {
-                               char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
+                               break;
+                       case ZEND_INCLUDE:
+                       case ZEND_REQUIRE:
+                               new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
+                               break;
+                       case ZEND_EVAL: {
+                                       char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
 
-                               new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
-                               efree(eval_desc);
-                       }
-                       break;
-               EMPTY_SWITCH_DEFAULT_CASE()
+                                       new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
+                                       efree(eval_desc);
+                               }
+                               break;
+                       EMPTY_SWITCH_DEFAULT_CASE()
+               }
        }
        if (inc_filename==&tmp_inc_filename) {
                zval_dtor(&tmp_inc_filename);
index 3ac52d3a30a24e78f5e98841cea454de84dd57cd..3f15e3c78038162fa9c576f4d2baa229bbadc963 100644 (file)
@@ -1908,58 +1908,66 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HA
 
        return_value_used = RETURN_VALUE_USED(opline);
 
-       switch (Z_LVAL(opline->op2.u.constant)) {
-               case ZEND_INCLUDE_ONCE:
-               case ZEND_REQUIRE_ONCE: {
-                               zend_file_handle file_handle;
-                               char *resolved_path;
-
-                               resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
-                               if (resolved_path) {
-                                       failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
-                               } else {
-                                       resolved_path = Z_STRVAL_P(inc_filename);
-                               }
-
-                               if (failure_retval) {
-                                       /* do nothing, file already included */
-                               } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
+       if (Z_LVAL(opline->op2.u.constant) != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
+               if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE || Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE) {
+                       zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+               } else {
+                       zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+               }
+       } else {
+               switch (Z_LVAL(opline->op2.u.constant)) {
+                       case ZEND_INCLUDE_ONCE:
+                       case ZEND_REQUIRE_ONCE: {
+                                       zend_file_handle file_handle;
+                                       char *resolved_path;
 
-                                       if (!file_handle.opened_path) {
-                                               file_handle.opened_path = estrdup(resolved_path);
+                                       resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
+                                       if (resolved_path) {
+                                               failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
+                                       } else {
+                                               resolved_path = Z_STRVAL_P(inc_filename);
                                        }
 
-                                       if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
-                                               new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
-                                               zend_destroy_file_handle(&file_handle TSRMLS_CC);
+                                       if (failure_retval) {
+                                               /* do nothing, file already included */
+                                       } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
+
+                                               if (!file_handle.opened_path) {
+                                                       file_handle.opened_path = estrdup(resolved_path);
+                                               }
+
+                                               if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
+                                                       new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
+                                                       zend_destroy_file_handle(&file_handle TSRMLS_CC);
+                                               } else {
+                                                       zend_file_handle_dtor(&file_handle TSRMLS_CC);
+                                                       failure_retval=1;
+                                               }
                                        } else {
-                                               zend_file_handle_dtor(&file_handle TSRMLS_CC);
-                                               failure_retval=1;
+                                               if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
+                                                       zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                               } else {
+                                                       zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                               }
                                        }
-                               } else {
-                                       if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
-                                               zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
-                                       } else {
-                                               zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                       if (resolved_path != Z_STRVAL_P(inc_filename)) {
+                                               efree(resolved_path);
                                        }
                                }
-                               if (resolved_path != Z_STRVAL_P(inc_filename)) {
-                                       efree(resolved_path);
-                               }
-                       }
-                       break;
-               case ZEND_INCLUDE:
-               case ZEND_REQUIRE:
-                       new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
-                       break;
-               case ZEND_EVAL: {
-                               char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
+                               break;
+                       case ZEND_INCLUDE:
+                       case ZEND_REQUIRE:
+                               new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
+                               break;
+                       case ZEND_EVAL: {
+                                       char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
 
-                               new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
-                               efree(eval_desc);
-                       }
-                       break;
-               EMPTY_SWITCH_DEFAULT_CASE()
+                                       new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
+                                       efree(eval_desc);
+                               }
+                               break;
+                       EMPTY_SWITCH_DEFAULT_CASE()
+               }
        }
        if (inc_filename==&tmp_inc_filename) {
                zval_dtor(&tmp_inc_filename);
@@ -5182,58 +5190,66 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HAND
 
        return_value_used = RETURN_VALUE_USED(opline);
 
-       switch (Z_LVAL(opline->op2.u.constant)) {
-               case ZEND_INCLUDE_ONCE:
-               case ZEND_REQUIRE_ONCE: {
-                               zend_file_handle file_handle;
-                               char *resolved_path;
+       if (Z_LVAL(opline->op2.u.constant) != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
+               if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE || Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE) {
+                       zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+               } else {
+                       zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+               }
+       } else {
+               switch (Z_LVAL(opline->op2.u.constant)) {
+                       case ZEND_INCLUDE_ONCE:
+                       case ZEND_REQUIRE_ONCE: {
+                                       zend_file_handle file_handle;
+                                       char *resolved_path;
 
-                               resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
-                               if (resolved_path) {
-                                       failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
-                               } else {
-                                       resolved_path = Z_STRVAL_P(inc_filename);
-                               }
+                                       resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
+                                       if (resolved_path) {
+                                               failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
+                                       } else {
+                                               resolved_path = Z_STRVAL_P(inc_filename);
+                                       }
 
-                               if (failure_retval) {
-                                       /* do nothing, file already included */
-                               } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
+                                       if (failure_retval) {
+                                               /* do nothing, file already included */
+                                       } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
 
-                                       if (!file_handle.opened_path) {
-                                               file_handle.opened_path = estrdup(resolved_path);
-                                       }
+                                               if (!file_handle.opened_path) {
+                                                       file_handle.opened_path = estrdup(resolved_path);
+                                               }
 
-                                       if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
-                                               new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
-                                               zend_destroy_file_handle(&file_handle TSRMLS_CC);
+                                               if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
+                                                       new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
+                                                       zend_destroy_file_handle(&file_handle TSRMLS_CC);
+                                               } else {
+                                                       zend_file_handle_dtor(&file_handle TSRMLS_CC);
+                                                       failure_retval=1;
+                                               }
                                        } else {
-                                               zend_file_handle_dtor(&file_handle TSRMLS_CC);
-                                               failure_retval=1;
+                                               if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
+                                                       zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                               } else {
+                                                       zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                               }
                                        }
-                               } else {
-                                       if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
-                                               zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
-                                       } else {
-                                               zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                       if (resolved_path != Z_STRVAL_P(inc_filename)) {
+                                               efree(resolved_path);
                                        }
                                }
-                               if (resolved_path != Z_STRVAL_P(inc_filename)) {
-                                       efree(resolved_path);
-                               }
-                       }
-                       break;
-               case ZEND_INCLUDE:
-               case ZEND_REQUIRE:
-                       new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
-                       break;
-               case ZEND_EVAL: {
-                               char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
+                               break;
+                       case ZEND_INCLUDE:
+                       case ZEND_REQUIRE:
+                               new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
+                               break;
+                       case ZEND_EVAL: {
+                                       char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
 
-                               new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
-                               efree(eval_desc);
-                       }
-                       break;
-               EMPTY_SWITCH_DEFAULT_CASE()
+                                       new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
+                                       efree(eval_desc);
+                               }
+                               break;
+                       EMPTY_SWITCH_DEFAULT_CASE()
+               }
        }
        if (inc_filename==&tmp_inc_filename) {
                zval_dtor(&tmp_inc_filename);
@@ -8551,58 +8567,66 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND
 
        return_value_used = RETURN_VALUE_USED(opline);
 
-       switch (Z_LVAL(opline->op2.u.constant)) {
-               case ZEND_INCLUDE_ONCE:
-               case ZEND_REQUIRE_ONCE: {
-                               zend_file_handle file_handle;
-                               char *resolved_path;
+       if (Z_LVAL(opline->op2.u.constant) != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
+               if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE || Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE) {
+                       zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+               } else {
+                       zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+               }
+       } else {
+               switch (Z_LVAL(opline->op2.u.constant)) {
+                       case ZEND_INCLUDE_ONCE:
+                       case ZEND_REQUIRE_ONCE: {
+                                       zend_file_handle file_handle;
+                                       char *resolved_path;
 
-                               resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
-                               if (resolved_path) {
-                                       failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
-                               } else {
-                                       resolved_path = Z_STRVAL_P(inc_filename);
-                               }
+                                       resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
+                                       if (resolved_path) {
+                                               failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
+                                       } else {
+                                               resolved_path = Z_STRVAL_P(inc_filename);
+                                       }
 
-                               if (failure_retval) {
-                                       /* do nothing, file already included */
-                               } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
+                                       if (failure_retval) {
+                                               /* do nothing, file already included */
+                                       } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
 
-                                       if (!file_handle.opened_path) {
-                                               file_handle.opened_path = estrdup(resolved_path);
-                                       }
+                                               if (!file_handle.opened_path) {
+                                                       file_handle.opened_path = estrdup(resolved_path);
+                                               }
 
-                                       if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
-                                               new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
-                                               zend_destroy_file_handle(&file_handle TSRMLS_CC);
+                                               if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
+                                                       new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
+                                                       zend_destroy_file_handle(&file_handle TSRMLS_CC);
+                                               } else {
+                                                       zend_file_handle_dtor(&file_handle TSRMLS_CC);
+                                                       failure_retval=1;
+                                               }
                                        } else {
-                                               zend_file_handle_dtor(&file_handle TSRMLS_CC);
-                                               failure_retval=1;
+                                               if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
+                                                       zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                               } else {
+                                                       zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                               }
                                        }
-                               } else {
-                                       if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
-                                               zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
-                                       } else {
-                                               zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                       if (resolved_path != Z_STRVAL_P(inc_filename)) {
+                                               efree(resolved_path);
                                        }
                                }
-                               if (resolved_path != Z_STRVAL_P(inc_filename)) {
-                                       efree(resolved_path);
-                               }
-                       }
-                       break;
-               case ZEND_INCLUDE:
-               case ZEND_REQUIRE:
-                       new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
-                       break;
-               case ZEND_EVAL: {
-                               char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
+                               break;
+                       case ZEND_INCLUDE:
+                       case ZEND_REQUIRE:
+                               new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
+                               break;
+                       case ZEND_EVAL: {
+                                       char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
 
-                               new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
-                               efree(eval_desc);
-                       }
-                       break;
-               EMPTY_SWITCH_DEFAULT_CASE()
+                                       new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
+                                       efree(eval_desc);
+                               }
+                               break;
+                       EMPTY_SWITCH_DEFAULT_CASE()
+               }
        }
        if (inc_filename==&tmp_inc_filename) {
                zval_dtor(&tmp_inc_filename);
@@ -22429,58 +22453,66 @@ static int ZEND_FASTCALL  ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDL
 
        return_value_used = RETURN_VALUE_USED(opline);
 
-       switch (Z_LVAL(opline->op2.u.constant)) {
-               case ZEND_INCLUDE_ONCE:
-               case ZEND_REQUIRE_ONCE: {
-                               zend_file_handle file_handle;
-                               char *resolved_path;
+       if (Z_LVAL(opline->op2.u.constant) != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {
+               if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE || Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE) {
+                       zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+               } else {
+                       zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+               }
+       } else {
+               switch (Z_LVAL(opline->op2.u.constant)) {
+                       case ZEND_INCLUDE_ONCE:
+                       case ZEND_REQUIRE_ONCE: {
+                                       zend_file_handle file_handle;
+                                       char *resolved_path;
 
-                               resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
-                               if (resolved_path) {
-                                       failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
-                               } else {
-                                       resolved_path = Z_STRVAL_P(inc_filename);
-                               }
+                                       resolved_path = zend_resolve_path(Z_STRVAL_P(inc_filename), Z_STRLEN_P(inc_filename) TSRMLS_CC);
+                                       if (resolved_path) {
+                                               failure_retval = zend_hash_exists(&EG(included_files), resolved_path, strlen(resolved_path)+1);
+                                       } else {
+                                               resolved_path = Z_STRVAL_P(inc_filename);
+                                       }
 
-                               if (failure_retval) {
-                                       /* do nothing, file already included */
-                               } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
+                                       if (failure_retval) {
+                                               /* do nothing, file already included */
+                                       } else if (SUCCESS == zend_stream_open(resolved_path, &file_handle TSRMLS_CC)) {
 
-                                       if (!file_handle.opened_path) {
-                                               file_handle.opened_path = estrdup(resolved_path);
-                                       }
+                                               if (!file_handle.opened_path) {
+                                                       file_handle.opened_path = estrdup(resolved_path);
+                                               }
 
-                                       if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
-                                               new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
-                                               zend_destroy_file_handle(&file_handle TSRMLS_CC);
+                                               if (zend_hash_add_empty_element(&EG(included_files), file_handle.opened_path, strlen(file_handle.opened_path)+1)==SUCCESS) {
+                                                       new_op_array = zend_compile_file(&file_handle, (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE?ZEND_INCLUDE:ZEND_REQUIRE) TSRMLS_CC);
+                                                       zend_destroy_file_handle(&file_handle TSRMLS_CC);
+                                               } else {
+                                                       zend_file_handle_dtor(&file_handle TSRMLS_CC);
+                                                       failure_retval=1;
+                                               }
                                        } else {
-                                               zend_file_handle_dtor(&file_handle TSRMLS_CC);
-                                               failure_retval=1;
+                                               if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
+                                                       zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                               } else {
+                                                       zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                               }
                                        }
-                               } else {
-                                       if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE) {
-                                               zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
-                                       } else {
-                                               zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);
+                                       if (resolved_path != Z_STRVAL_P(inc_filename)) {
+                                               efree(resolved_path);
                                        }
                                }
-                               if (resolved_path != Z_STRVAL_P(inc_filename)) {
-                                       efree(resolved_path);
-                               }
-                       }
-                       break;
-               case ZEND_INCLUDE:
-               case ZEND_REQUIRE:
-                       new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
-                       break;
-               case ZEND_EVAL: {
-                               char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
+                               break;
+                       case ZEND_INCLUDE:
+                       case ZEND_REQUIRE:
+                               new_op_array = compile_filename(Z_LVAL(opline->op2.u.constant), inc_filename TSRMLS_CC);
+                               break;
+                       case ZEND_EVAL: {
+                                       char *eval_desc = zend_make_compiled_string_description("eval()'d code" TSRMLS_CC);
 
-                               new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
-                               efree(eval_desc);
-                       }
-                       break;
-               EMPTY_SWITCH_DEFAULT_CASE()
+                                       new_op_array = zend_compile_string(inc_filename, eval_desc TSRMLS_CC);
+                                       efree(eval_desc);
+                               }
+                               break;
+                       EMPTY_SWITCH_DEFAULT_CASE()
+               }
        }
        if (inc_filename==&tmp_inc_filename) {
                zval_dtor(&tmp_inc_filename);