From 66d64d047c28cce9b2af80b6bcea33274d2a82cd Mon Sep 17 00:00:00 2001 From: James Dansereau <106631954+jkdansereau@users.noreply.github.com> Date: Fri, 28 Aug 2026 16:35:25 -0400 Subject: [PATCH] D97: clamp negative damagetype on PORT (US-build OOB read of g_DamageTypes) bondviewPlayerTickDamageAndHealth computes damagetype = (s32)(health*8); with health <= 0 (a lethal/near-lethal hit) that is negative and then indexes g_DamageTypes[] below zero. N64 US absorbed the small OOB read; on PC it segfaults (observed ~frame 5 in BUNKER1 when a guard shoots Bond, fault ~0xff..401210e8). EU/JP already clamp negative to 0 right here -- extend that clamp to PORT. N64 US build unchanged. --- src/game/bondview2.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/game/bondview2.c b/src/game/bondview2.c index 6c6c0890..e75692e3 100644 --- a/src/game/bondview2.c +++ b/src/game/bondview2.c @@ -6162,7 +6162,12 @@ void bondviewPlayerTickDamageAndHealth(void) } // Ensure we don't read out of bounds of the g_DamageTypes array. -#if defined(VERSION_EU) || defined(VERSION_JP) +#if defined(VERSION_EU) || defined(VERSION_JP) || defined(PORT) + /* D97: US has no low clamp -- a negative damagetype (health*8 with + * health <= 0, i.e. a lethal/near-lethal hit) then indexes + * g_DamageTypes[] below zero. N64 US absorbed the small OOB read; + * on PC it segfaults (observed ~frame 5 in BUNKER1 when a guard + * shoots Bond). EU/JP already clamp here -- do the same on PORT. */ if (g_CurrentPlayer->damagetype < 0) { g_CurrentPlayer->damagetype = 0;