diff --git a/librz/analysis/op.c b/librz/analysis/op.c index ce73ece991..d5d5df24e3 100644 --- a/librz/analysis/op.c +++ b/librz/analysis/op.c @@ -94,9 +94,9 @@ static int defaultCycles(RzAnalysisOp *op) { } RZ_API int rz_analysis_op(RzAnalysis *analysis, RzAnalysisOp *op, ut64 addr, const ut8 *data, int len, RzAnalysisOpMask mask) { - rz_analysis_op_init(op); rz_return_val_if_fail(analysis && op && len > 0, -1); + rz_analysis_op_init(op); int ret = RZ_MIN(2, len); if (len > 0 && analysis->cur && analysis->cur->op) { // use core binding to set asm.bits correctly based on the addr diff --git a/librz/core/canalysis.c b/librz/core/canalysis.c index 0d7a4672b4..ef8dbe0526 100644 --- a/librz/core/canalysis.c +++ b/librz/core/canalysis.c @@ -3425,6 +3425,9 @@ RZ_API void rz_core_analysis_esil(RzCore *core, ut64 addr, ut64 size, RZ_NULLABL rz_analysis_op_fini(&op); rz_asm_set_pc(core->rasm, cur); + if (i >= iend) { + goto repeat; + } rz_analysis_op(core->analysis, &op, cur, buf + i, iend - i, RZ_ANALYSIS_OP_MASK_ESIL | RZ_ANALYSIS_OP_MASK_VAL | RZ_ANALYSIS_OP_MASK_HINT); // if (op.type & 0x80000000 || op.type == 0) { if (op.type == RZ_ANALYSIS_OP_TYPE_ILL || op.type == RZ_ANALYSIS_OP_TYPE_UNK) {