]> granicus.if.org Git - php/commitdiff
MF53: - Fixed bug #49000 (PHP CLI in Interactive mode (php -a) crashes when including...
authorJani Taskinen <jani@php.net>
Mon, 31 Aug 2009 12:07:27 +0000 (12:07 +0000)
committerJani Taskinen <jani@php.net>
Mon, 31 Aug 2009 12:07:27 +0000 (12:07 +0000)
NEWS
Zend/zend_execute_API.c

diff --git a/NEWS b/NEWS
index e47f75cb348ca16afbbb12a1f74083b384a0e9a1..217285beb51ce71f7cf9247e08190aa30b77b0ef 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,8 @@ PHP                                                                        NEWS
 - Fixed bug #49236 (Missing PHP_SUBST(PDO_MYSQL_SHARED_LIBADD)). (Jani)
 - Fixed bug #49144 (Import of schema from different host transmits original
   authentication details). (Dmitry)
+- Fixed bug #49000 (PHP CLI in Interactive mode (php -a) crashes when including
+  files from function). (Stas)
 - Fixed bug #47273 (Encoding bug in SoapServer->fault). (Dmitry)
 - Fixed bug #28038  (Sent incorrect RCPT TO commands to SMTP server) (Garrett)
 
index 0e64a41c1ca0d36f8fbf6a771eb97e2cff82d502..b403ff708a0486860680002345d9fd6f9d6f008c 100644 (file)
@@ -1212,13 +1212,16 @@ ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name TSR
                zval *local_retval_ptr=NULL;
                zval **original_return_value_ptr_ptr = EG(return_value_ptr_ptr);
                zend_op **original_opline_ptr = EG(opline_ptr);
+               int orig_interactive = CG(interactive);
 
                EG(return_value_ptr_ptr) = &local_retval_ptr;
                EG(active_op_array) = new_op_array;
                EG(no_extensions)=1;
+               CG(interactive) = 0;
 
                zend_execute(new_op_array TSRMLS_CC);
 
+               CG(interactive) = orig_interactive;
                if (local_retval_ptr) {
                        if (retval_ptr) {
                                COPY_PZVAL_TO_ZVAL(*retval_ptr, local_retval_ptr);
@@ -1265,6 +1268,7 @@ void execute_new_code(TSRMLS_D)
        zend_op *opline, *end;
        zend_op *ret_opline;
        zval *local_retval=NULL;
+       int orig_interactive;
 
        if (!(CG(active_op_array)->fn_flags & ZEND_ACC_INTERACTIVE)
                || CG(active_op_array)->backpatch_count>0
@@ -1314,7 +1318,10 @@ void execute_new_code(TSRMLS_D)
 
        EG(return_value_ptr_ptr) = &local_retval;
        EG(active_op_array) = CG(active_op_array);
+       orig_interactive = CG(interactive);
+       CG(interactive) = 0;
        zend_execute(CG(active_op_array) TSRMLS_CC);
+       CG(interactive) = orig_interactive;
        if (local_retval) {
                zval_ptr_dtor(&local_retval);
        }