mirror of
https://github.com/php/php-src.git
synced 2026-04-17 21:11:02 +02:00
Fix a memory corruption bug with by-ref function arguments
This commit is contained in:
@@ -786,16 +786,17 @@ void do_receive_arg(int op, znode *var, znode *offset, znode *initialization, un
|
||||
} else {
|
||||
SET_UNUSED(opline->op2);
|
||||
}
|
||||
if (pass_type==BYREF_FORCE && !CG(active_op_array)->arg_types) {
|
||||
int i;
|
||||
if (!CG(active_op_array)->arg_types) {
|
||||
if (pass_type==BYREF_FORCE) {
|
||||
int i;
|
||||
|
||||
CG(active_op_array)->arg_types = (unsigned char *) emalloc(sizeof(unsigned char)*(offset->u.constant.value.lval+1));
|
||||
for (i=1; i<offset->u.constant.value.lval; i++) {
|
||||
CG(active_op_array)->arg_types[i] = BYREF_NONE;
|
||||
CG(active_op_array)->arg_types = (unsigned char *) emalloc(sizeof(unsigned char)*(offset->u.constant.value.lval+1));
|
||||
for (i=1; i<offset->u.constant.value.lval; i++) {
|
||||
CG(active_op_array)->arg_types[i] = BYREF_NONE;
|
||||
}
|
||||
CG(active_op_array)->arg_types[0]=(unsigned char) offset->u.constant.value.lval;
|
||||
}
|
||||
CG(active_op_array)->arg_types[0]=(unsigned char) offset->u.constant.value.lval;
|
||||
}
|
||||
if (CG(active_op_array)->arg_types) {
|
||||
} else {
|
||||
CG(active_op_array)->arg_types = (unsigned char *) erealloc(CG(active_op_array)->arg_types, sizeof(unsigned char)*(offset->u.constant.value.lval+1));
|
||||
CG(active_op_array)->arg_types[offset->u.constant.value.lval] = pass_type;
|
||||
CG(active_op_array)->arg_types[0]++;
|
||||
|
||||
Reference in New Issue
Block a user