mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-27 06:17:47 +08:00
S12Z disassembler memory leak
* s12z-opc.c (exg_sex_discrim): Don't leak memory on invalid registers.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2019-12-08 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
|
* s12z-opc.c (exg_sex_discrim): Don't leak memory on invalid
|
||||||
|
registers.
|
||||||
|
|
||||||
2019-12-05 Jan Beulich <jbeulich@suse.com>
|
2019-12-05 Jan Beulich <jbeulich@suse.com>
|
||||||
|
|
||||||
* aarch64-tbl.h (aarch64_feature_crypto,
|
* aarch64-tbl.h (aarch64_feature_crypto,
|
||||||
|
@ -2195,32 +2195,32 @@ loop_prim_n_bytes (struct mem_read_abstraction_base *mra)
|
|||||||
|
|
||||||
|
|
||||||
static enum optr
|
static enum optr
|
||||||
exg_sex_discrim (struct mem_read_abstraction_base *mra, enum optr hint ATTRIBUTE_UNUSED)
|
exg_sex_discrim (struct mem_read_abstraction_base *mra,
|
||||||
|
enum optr hint ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
uint8_t eb;
|
uint8_t eb;
|
||||||
int status = mra->read (mra, 0, 1, &eb);
|
int status = mra->read (mra, 0, 1, &eb);
|
||||||
|
enum optr operator = OP_INVALID;
|
||||||
if (status < 0)
|
if (status < 0)
|
||||||
return OP_INVALID;
|
return operator;
|
||||||
|
|
||||||
struct operand *op0 = create_register_operand ((eb & 0xf0) >> 4);
|
struct operand *op0 = create_register_operand ((eb & 0xf0) >> 4);
|
||||||
struct operand *op1 = create_register_operand (eb & 0xf);
|
struct operand *op1 = create_register_operand (eb & 0xf);
|
||||||
|
|
||||||
int reg0 = ((struct register_operand *) op0)->reg;
|
int reg0 = ((struct register_operand *) op0)->reg;
|
||||||
if (reg0 < 0 || reg0 >= S12Z_N_REGISTERS)
|
|
||||||
return OP_INVALID;
|
|
||||||
|
|
||||||
int reg1 = ((struct register_operand *) op1)->reg;
|
int reg1 = ((struct register_operand *) op1)->reg;
|
||||||
if (reg1 < 0 || reg1 >= S12Z_N_REGISTERS)
|
if (reg0 >= 0 && reg0 < S12Z_N_REGISTERS
|
||||||
return OP_INVALID;
|
&& reg1 >= 0 && reg1 < S12Z_N_REGISTERS)
|
||||||
|
{
|
||||||
|
const struct reg *r0 = registers + reg0;
|
||||||
|
const struct reg *r1 = registers + reg1;
|
||||||
|
|
||||||
const struct reg *r0 = registers + reg0;
|
operator = r0->bytes < r1->bytes ? OP_sex : OP_exg;
|
||||||
const struct reg *r1 = registers + reg1;
|
}
|
||||||
|
|
||||||
enum optr operator = (r0->bytes < r1->bytes) ? OP_sex : OP_exg;
|
|
||||||
|
|
||||||
free (op0);
|
free (op0);
|
||||||
free (op1);
|
free (op1);
|
||||||
|
|
||||||
return operator;
|
return operator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user