]> granicus.if.org Git - php/commitdiff
Fixed memory leak
authorDmitry Stogov <dmitry@zend.com>
Fri, 23 Jan 2015 17:35:32 +0000 (20:35 +0300)
committerDmitry Stogov <dmitry@zend.com>
Fri, 23 Jan 2015 17:35:32 +0000 (20:35 +0300)
Zend/zend_vm_def.h
Zend/zend_vm_execute.h

index dc3547a5e231c2835b2da234cb45e6f52a8f850d..84cbe98304a4dcc03525565ef7cfeee72417f240 100644 (file)
@@ -2066,6 +2066,7 @@ ZEND_VM_HANDLER(46, ZEND_JMPZ_EX, CONST|TMPVAR|CV, ANY)
        USE_OPLINE
        zend_free_op free_op1;
        zval *val;
+       int ret;
 
        SAVE_OPLINE();
        val = GET_OP1_ZVAL_PTR(BP_VAR_R);
@@ -2084,12 +2085,12 @@ ZEND_VM_HANDLER(46, ZEND_JMPZ_EX, CONST|TMPVAR|CV, ANY)
                }
        }
 
-       if (i_zend_is_true(val)) {
-               FREE_OP1();
+       ret = i_zend_is_true(val);
+       FREE_OP1();
+       if (ret) {
                ZVAL_TRUE(EX_VAR(opline->result.var));
                opline++;
        } else {
-               FREE_OP1();
                ZVAL_FALSE(EX_VAR(opline->result.var));
                opline = OP_JMP_ADDR(opline, opline->op2);
        }
@@ -2104,6 +2105,7 @@ ZEND_VM_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMPVAR|CV, ANY)
        USE_OPLINE
        zend_free_op free_op1;
        zval *val;
+       int ret;
 
        SAVE_OPLINE();
        val = GET_OP1_ZVAL_PTR(BP_VAR_R);
@@ -2121,14 +2123,15 @@ ZEND_VM_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMPVAR|CV, ANY)
                        ZEND_VM_CONTINUE();
                }
        }
-       if (i_zend_is_true(val)) {
+       ret = i_zend_is_true(val);
+       FREE_OP1();
+       if (ret) {
                ZVAL_TRUE(EX_VAR(opline->result.var));
                opline = OP_JMP_ADDR(opline, opline->op2);
        } else {
                ZVAL_FALSE(EX_VAR(opline->result.var));
                opline++;
        }
-       FREE_OP1();
        if (UNEXPECTED(EG(exception) != NULL)) {
                HANDLE_EXCEPTION();
        }
index 1d56205e0839f41a460a2514c9e304791a014f8d..805244e4a6a4a7f650b721d5681c43dae8600e84 100644 (file)
@@ -2422,6 +2422,7 @@ static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
        USE_OPLINE
 
        zval *val;
+       int ret;
 
        SAVE_OPLINE();
        val = EX_CONSTANT(opline->op1);
@@ -2440,12 +2441,12 @@ static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_AR
                }
        }
 
-       if (i_zend_is_true(val)) {
+       ret = i_zend_is_true(val);
 
+       if (ret) {
                ZVAL_TRUE(EX_VAR(opline->result.var));
                opline++;
        } else {
-
                ZVAL_FALSE(EX_VAR(opline->result.var));
                opline = OP_JMP_ADDR(opline, opline->op2);
        }
@@ -2460,6 +2461,7 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_A
        USE_OPLINE
 
        zval *val;
+       int ret;
 
        SAVE_OPLINE();
        val = EX_CONSTANT(opline->op1);
@@ -2477,14 +2479,15 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_A
                        ZEND_VM_CONTINUE();
                }
        }
-       if (i_zend_is_true(val)) {
+       ret = i_zend_is_true(val);
+
+       if (ret) {
                ZVAL_TRUE(EX_VAR(opline->result.var));
                opline = OP_JMP_ADDR(opline, opline->op2);
        } else {
                ZVAL_FALSE(EX_VAR(opline->result.var));
                opline++;
        }
-
        if (UNEXPECTED(EG(exception) != NULL)) {
                HANDLE_EXCEPTION();
        }
@@ -23303,6 +23306,7 @@ static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
        USE_OPLINE
 
        zval *val;
+       int ret;
 
        SAVE_OPLINE();
        val = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
@@ -23321,12 +23325,12 @@ static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
                }
        }
 
-       if (i_zend_is_true(val)) {
+       ret = i_zend_is_true(val);
 
+       if (ret) {
                ZVAL_TRUE(EX_VAR(opline->result.var));
                opline++;
        } else {
-
                ZVAL_FALSE(EX_VAR(opline->result.var));
                opline = OP_JMP_ADDR(opline, opline->op2);
        }
@@ -23341,6 +23345,7 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
        USE_OPLINE
 
        zval *val;
+       int ret;
 
        SAVE_OPLINE();
        val = _get_zval_ptr_cv_BP_VAR_R(execute_data, opline->op1.var);
@@ -23358,14 +23363,15 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS
                        ZEND_VM_CONTINUE();
                }
        }
-       if (i_zend_is_true(val)) {
+       ret = i_zend_is_true(val);
+
+       if (ret) {
                ZVAL_TRUE(EX_VAR(opline->result.var));
                opline = OP_JMP_ADDR(opline, opline->op2);
        } else {
                ZVAL_FALSE(EX_VAR(opline->result.var));
                opline++;
        }
-
        if (UNEXPECTED(EG(exception) != NULL)) {
                HANDLE_EXCEPTION();
        }
@@ -32835,6 +32841,7 @@ static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_A
        USE_OPLINE
        zend_free_op free_op1;
        zval *val;
+       int ret;
 
        SAVE_OPLINE();
        val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
@@ -32853,12 +32860,12 @@ static int ZEND_FASTCALL  ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_A
                }
        }
 
-       if (i_zend_is_true(val)) {
-               zval_ptr_dtor_nogc(free_op1);
+       ret = i_zend_is_true(val);
+       zval_ptr_dtor_nogc(free_op1);
+       if (ret) {
                ZVAL_TRUE(EX_VAR(opline->result.var));
                opline++;
        } else {
-               zval_ptr_dtor_nogc(free_op1);
                ZVAL_FALSE(EX_VAR(opline->result.var));
                opline = OP_JMP_ADDR(opline, opline->op2);
        }
@@ -32873,6 +32880,7 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_
        USE_OPLINE
        zend_free_op free_op1;
        zval *val;
+       int ret;
 
        SAVE_OPLINE();
        val = _get_zval_ptr_var(opline->op1.var, execute_data, &free_op1);
@@ -32890,14 +32898,15 @@ static int ZEND_FASTCALL  ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_
                        ZEND_VM_CONTINUE();
                }
        }
-       if (i_zend_is_true(val)) {
+       ret = i_zend_is_true(val);
+       zval_ptr_dtor_nogc(free_op1);
+       if (ret) {
                ZVAL_TRUE(EX_VAR(opline->result.var));
                opline = OP_JMP_ADDR(opline, opline->op2);
        } else {
                ZVAL_FALSE(EX_VAR(opline->result.var));
                opline++;
        }
-       zval_ptr_dtor_nogc(free_op1);
        if (UNEXPECTED(EG(exception) != NULL)) {
                HANDLE_EXCEPTION();
        }