]> granicus.if.org Git - php/commitdiff
Fixes
authorAndi Gutmans <andi@php.net>
Mon, 31 May 1999 18:33:12 +0000 (18:33 +0000)
committerAndi Gutmans <andi@php.net>
Mon, 31 May 1999 18:33:12 +0000 (18:33 +0000)
Zend/zend-scanner.l
Zend/zend_compile.c
Zend/zend_execute.c
Zend/zend_execute_API.c

index 2e3006574c8beadc6516106aa721a27a06f168cb..587fbb8278a884e97d48ef99bac85ade243b8ef1 100644 (file)
@@ -1036,7 +1036,7 @@ ESCAPED_AND_WHITESPACE [\n\t\r #'.:;,()|^&+-/*=%!~<>?@]+
        return T_PHP_TRACK_VARS;
 }
 
-<ST_IN_SCRIPTING,ST_DOUBLE_QUOTES,ST_HEREDOC>"$"{LABEL} {
+<ST_IN_SCRIPTING,ST_DOUBLE_QUOTES,ST_HEREDOC,ST_BACKQUOTE>"$"{LABEL} {
        zendlval->value.str.val = (char *)estrndup(yytext+1, yyleng-1);
        zendlval->value.str.len = yyleng-1;
        zendlval->type = IS_STRING;
index fac2c1db283e9c172443f02de17f05329615d00c..b9f5ef12762b34040af6ac007447f961e7f3e0bd 100644 (file)
@@ -1372,6 +1372,7 @@ void do_shell_exec(znode *result, znode *cmd CLS_DC)
        opline->op1.u.constant.is_ref = 0;
        opline->op1.u.constant.type = IS_STRING;
        opline->op1.op_type = IS_CONST;
+       opline->extended_value = 1;
        SET_UNUSED(opline->op2);
        *result = opline->result;
 }
index f678d72d4b7f8477b373c85926ecd469c1c70e67..cce74d6bd7246a92d0e52a8b34a1a1608fede9bc 100644 (file)
@@ -203,7 +203,7 @@ static inline zval **zend_fetch_property_address_inner(HashTable *ht, znode *op2
 }
 
 
-static inline void zend_assign_to_variable(znode *result, znode *op1, zval *value, int type, temp_variable *Ts ELS_DC)
+static inline void zend_assign_to_variable(znode *result, znode *op1, znode *op2, zval *value, int type, temp_variable *Ts ELS_DC)
 {
        zval **variable_ptr_ptr = get_zval_ptr_ptr(op1, Ts, BP_VAR_W);
        zval *variable_ptr;
@@ -231,6 +231,11 @@ static inline void zend_assign_to_variable(znode *result, znode *op1, zval *valu
                                                }
 
                                                T->EA.str->value.str.val[T->EA.offset] = value->value.str.val[0];
+                                               if (op2
+                                                       && op2->op_type == IS_VAR
+                                                       && value==&Ts[op2->u.var].tmp_var) {
+                                                       efree(value->value.str.val);
+                                               }
                                                if (value == &tmp) {
                                                        zval_dtor(value);
                                                }
@@ -1073,7 +1078,7 @@ binary_assign_op_addr: {
                        case ZEND_ASSIGN: {
                                        zval *value = get_zval_ptr(&opline->op2, Ts, &free_op2, BP_VAR_R);
 
-                                       zend_assign_to_variable(&opline->result, &opline->op1, value, (free_op2?IS_TMP_VAR:opline->op2.op_type), Ts ELS_CC);
+                                       zend_assign_to_variable(&opline->result, &opline->op1, &opline->op2, value, (free_op2?IS_TMP_VAR:opline->op2.op_type), Ts ELS_CC);
                                        /* zend_assign_to_variable() always takes care of op2, never free it! */
                                }
                                break;
@@ -1466,7 +1471,7 @@ send_by_ref:
                                        } else if ((*param)->is_ref) {
                                                zend_assign_to_variable_reference(NULL, get_zval_ptr_ptr(&opline->result, Ts, BP_VAR_W), param, NULL ELS_CC);
                                        } else {
-                                               zend_assign_to_variable(NULL, &opline->result, *param, IS_VAR, Ts ELS_CC);
+                                               zend_assign_to_variable(NULL, &opline->result, NULL, *param, IS_VAR, Ts ELS_CC);
                                        }
                                }
                                break;
@@ -1505,7 +1510,7 @@ send_by_ref:
                                        if (assignment_value->is_ref) {
                                                zend_assign_to_variable_reference(NULL, get_zval_ptr_ptr(&opline->result, Ts, BP_VAR_W), param, NULL ELS_CC);
                                        } else {
-                                               zend_assign_to_variable(NULL, &opline->result, assignment_value, IS_VAR, Ts ELS_CC);
+                                               zend_assign_to_variable(NULL, &opline->result, NULL, assignment_value, IS_VAR, Ts ELS_CC);
                                        }
                                }
                                break;
index d934225bfdea664e54c89748da54ab38fd95c10b..1589efdb19c0e8285e4dc34377539d71d826f084 100644 (file)
@@ -142,8 +142,10 @@ void shutdown_executor(ELS_D)
 }
 
 
-ZEND_API char *get_active_function_name(ELS_D)
+ZEND_API char *get_active_function_name()
 {
+       ELS_FETCH();
+
        switch(EG(function_state_ptr)->function->type) {
                case ZEND_USER_FUNCTION: {
                                char *function_name = ((zend_op_array *) EG(function_state_ptr)->function)->function_name;