com php-src: Fixed segfault in file cache serialize if live range is empty after optimiaztion: ext/opcache/Optimizer/zend_optimizer.c

From: Date: Mon, 15 Feb 2016 04:07:43 +0000
Subject: com php-src: Fixed segfault in file cache serialize if live range is empty after optimiaztion: ext/opcache/Optimizer/zend_optimizer.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-91029@lists.php.net to get a copy of this message
Commit: 2661a474793f7a599dba5353874a3d381e4b820b Author: Xinchen Hui <laruence@gmail.com> Mon, 15 Feb 2016 12:07:43 +0800 Parents: 4eb4a78bf06adc0d66de52559fcf7f74439adaf8 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=2661a474793f7a599dba5353874a3d381e4b820b Log: Fixed segfault in file cache serialize if live range is empty after optimiaztion Changed paths: M ext/opcache/Optimizer/zend_optimizer.c Diff: diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c index e2a12de..f398a83 100644 --- a/ext/opcache/Optimizer/zend_optimizer.c +++ b/ext/opcache/Optimizer/zend_optimizer.c @@ -368,16 +368,20 @@ void zend_optimizer_remove_live_range(zend_op_array *op_array, uint32_t var) i++; } while (i < op_array->last_live_range); if (i != j) { - zend_op *opline = op_array->opcodes; - zend_op *end = opline + op_array->last; - - op_array->last_live_range = j; - while (opline != end) { - if ((opline->opcode == ZEND_FREE || opline->opcode == ZEND_FE_FREE) && - opline->extended_value == ZEND_FREE_ON_RETURN) { - opline->op2.num = map[opline->op2.num]; + if ((op_array->last_live_range = j)) { + zend_op *opline = op_array->opcodes; + zend_op *end = opline + op_array->last; + + while (opline != end) { + if ((opline->opcode == ZEND_FREE || opline->opcode == ZEND_FE_FREE) && + opline->extended_value == ZEND_FREE_ON_RETURN) { + opline->op2.num = map[opline->op2.num]; + } + opline++; } - opline++; + } else { + efree(op_array->live_range); + op_array->live_range = NULL; } } free_alloca(map, use_heap);

« previous php.cvs (#91029) next »