Skip to content

Commit 3093f17

Browse files
committed
Merge branch 'PHP-8.3'
* PHP-8.3: Fixed possible use-after-free
2 parents 646bcfa + 4589cab commit 3093f17

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

ext/opcache/jit/zend_jit_trace.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2728,15 +2728,15 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
27282728
ZEND_ASSERT(ssa->var_info != NULL);
27292729

27302730
start = do_alloca(sizeof(int) * ssa->vars_count * 2 +
2731-
ZEND_MM_ALIGNED_SIZE(sizeof(uint8_t) * ssa->vars_count) +
2732-
ZEND_MM_ALIGNED_SIZE(sizeof(zend_op_array*) * ssa->vars_count),
2731+
ZEND_MM_ALIGNED_SIZE(sizeof(uint8_t) * ssa->vars_count),
27332732
use_heap);
27342733
if (!start) {
27352734
return NULL;
27362735
}
27372736
end = start + ssa->vars_count;
27382737
flags = (uint8_t*)(end + ssa->vars_count);
2739-
vars_op_array = (const zend_op_array**)(flags + ZEND_MM_ALIGNED_SIZE(sizeof(uint8_t) * ssa->vars_count));
2738+
checkpoint = zend_arena_checkpoint(CG(arena));
2739+
vars_op_array = zend_arena_calloc(&CG(arena), ssa->vars_count, sizeof(zend_op_array*));
27402740

27412741
memset(start, -1, sizeof(int) * ssa->vars_count * 2);
27422742
memset(flags, 0, sizeof(uint8_t) * ssa->vars_count);
@@ -3131,10 +3131,10 @@ static zend_lifetime_interval** zend_jit_trace_allocate_registers(zend_jit_trace
31313131

31323132
if (!count) {
31333133
free_alloca(start, use_heap);
3134+
zend_arena_release(&CG(arena), checkpoint);
31343135
return NULL;
31353136
}
31363137

3137-
checkpoint = zend_arena_checkpoint(CG(arena));
31383138
intervals = zend_arena_calloc(&CG(arena), ssa->vars_count, sizeof(zend_lifetime_interval));
31393139
memset(intervals, 0, sizeof(zend_lifetime_interval*) * ssa->vars_count);
31403140
list = zend_arena_alloc(&CG(arena), sizeof(zend_lifetime_interval) * count);

0 commit comments

Comments
 (0)