From 398e0b025d1993f95f7e351bf089c6615fd8bbe1 Mon Sep 17 00:00:00 2001 From: Tim Jarzombek Date: Thu, 12 Feb 2026 21:11:11 -0500 Subject: [PATCH] Fix bugs caught by fuzzing --- cpu/ppc/ppcdisasm.cpp | 10 +++++----- cpu/ppc/test/ppcdisasmtest.csv | 4 ++++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/cpu/ppc/ppcdisasm.cpp b/cpu/ppc/ppcdisasm.cpp index 8205333861..059e6e3199 100644 --- a/cpu/ppc/ppcdisasm.cpp +++ b/cpu/ppc/ppcdisasm.cpp @@ -1176,14 +1176,14 @@ void opc_group31(PPCDisasmContext* ctx) { if (!rs && !ra) opc_illegal(ctx); else { - ctx->instr_str = my_sprintf("%-7s r%s", "tlbld", rb); + ctx->instr_str = my_sprintf("%-7s r%d", "tlbld", rb); add_reg_in(ctx, "r%d", rb); } - } else if (index == 30) { /* tlbli - 603 only */ + } else if (index == 31) { /* tlbli - 603 only */ if (!rs && !ra) opc_illegal(ctx); else { - ctx->instr_str = my_sprintf("%-7s r%s", "tlbli", rb); + ctx->instr_str = my_sprintf("%-7s r%d", "tlbli", rb); add_reg_in(ctx, "r%d", rb); } } @@ -1250,10 +1250,10 @@ void opc_group31(PPCDisasmContext* ctx) { add_reg_out(ctx, "cr"); } } else { - strcpy(opcode, opc_logic[index]); - if (!strlen(opcode)) { + if (index >= 16 || !strlen(opc_logic[index])) { opc_illegal(ctx); } else { + strcpy(opcode, opc_logic[index]); if (rc_set) { strcat(opcode, "."); add_reg_out(ctx, "cr"); diff --git a/cpu/ppc/test/ppcdisasmtest.csv b/cpu/ppc/test/ppcdisasmtest.csv index e4706881e5..986285a59b 100644 --- a/cpu/ppc/test/ppcdisasmtest.csv +++ b/cpu/ppc/test/ppcdisasmtest.csv @@ -407,6 +407,10 @@ 0xFFF00100,0x7D453D2A,stswx,r10,r5,r7 0xFFF00100,0x7C0002E4,tlbia 0xFFF00100,0x7C004A64,tlbie,r9 +0xFFF00100,0x7C202FA4,tlbld,r5 +0xFFF00100,0x7C6007A4,tlbld,r0 +0xFFF00100,0x7C203FE4,tlbli,r7 +0xFFF00100,0x7C40FFE4,tlbli,r31 # various simplified (extended) mnemonics 0xFFF00100,0x60000000,nop