]> granicus.if.org Git - php/commitdiff
Fixed bug #62661 (Interactive php-cli crashes if include() is used in auto_prepend_file)
authorXinchen Hui <laruence@php.net>
Thu, 26 Jul 2012 04:40:47 +0000 (12:40 +0800)
committerXinchen Hui <laruence@php.net>
Thu, 26 Jul 2012 04:40:47 +0000 (12:40 +0800)
NEWS
Zend/zend.c

diff --git a/NEWS b/NEWS
index 883d9102b1d46c4806e14b75fa1385ac6332332b..d4298495471787fce49db26f545636ace756452f 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,8 @@ PHP                                                                        NEWS
 ?? ??? 2012, PHP 5.4.6
 
 - Core:
+  . Fixed bug #62661 (Interactive php-cli crashes if include() is used in
+    auto_prepend_file). (Laruence)
   . Fixed bug #62565 (Crashes due non-initialized internal properties_table).
     (Felipe)
 
index 37a1a27c7d67b821adf48a94a1ddf20e80eb76d0..18c4f11604c9dc100476d6d690e828d8ebce41f7 100644 (file)
@@ -1261,6 +1261,7 @@ ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_co
        zend_file_handle *file_handle;
        zend_op_array *orig_op_array = EG(active_op_array);
        zval **orig_retval_ptr_ptr = EG(return_value_ptr_ptr);
+    long orig_interactive = CG(interactive);
 
        va_start(files, file_count);
        for (i = 0; i < file_count; i++) {
@@ -1268,6 +1269,15 @@ ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_co
                if (!file_handle) {
                        continue;
                }
+
+        if (orig_interactive) {
+            if (file_handle->filename[0] != '-' || file_handle->filename[1]) {
+                CG(interactive) = 0;
+            } else {
+                CG(interactive) = 1;
+            }
+        }
+       
                EG(active_op_array) = zend_compile_file(file_handle, type TSRMLS_CC);
                if (file_handle->opened_path) {
                        int dummy = 1;
@@ -1309,12 +1319,14 @@ ZEND_API int zend_execute_scripts(int type TSRMLS_DC, zval **retval, int file_co
                        va_end(files);
                        EG(active_op_array) = orig_op_array;
                        EG(return_value_ptr_ptr) = orig_retval_ptr_ptr;
+            CG(interactive) = orig_interactive;
                        return FAILURE;
                }
        }
        va_end(files);
        EG(active_op_array) = orig_op_array;
        EG(return_value_ptr_ptr) = orig_retval_ptr_ptr;
+    CG(interactive) = orig_interactive;
 
        return SUCCESS;
 }