From 7ae18f3a9d7842647bc809dbd6f84de284410393 Mon Sep 17 00:00:00 2001 From: Max Roncace Date: Fri, 20 Mar 2026 02:51:29 -0400 Subject: [PATCH] Fix last argument in calls to dCamera_c::startEventCamera The last argument is used as a char*, so we need to explicitly pass nullptr instead of 0 to ensure it has the correct type. This was causing crashes due to va_arg reading 8 bytes when only 4 were provided by the caller - if the out-of-bounds bytes are non-zero, the null check fails and it continues pulling args from beyond the argument buffer potentially triggering a segfault. --- src/d/actor/d_a_alink_bottle.inc | 6 +++--- src/d/actor/d_a_alink_canoe.inc | 2 +- src/d/actor/d_a_alink_damage.inc | 4 ++-- src/d/actor/d_a_alink_demo.inc | 6 +++--- src/d/actor/d_a_alink_horse.inc | 2 +- src/d/actor/d_a_alink_kandelaar.inc | 2 +- src/d/actor/d_a_alink_whistle.inc | 2 +- src/d/actor/d_a_alink_wolf.inc | 6 +++--- src/d/actor/d_a_npc_tkc.cpp | 2 +- src/d/actor/d_a_obj_tks.cpp | 2 +- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/d/actor/d_a_alink_bottle.inc b/src/d/actor/d_a_alink_bottle.inc index 65670e0fd2..8af270df7a 100644 --- a/src/d/actor/d_a_alink_bottle.inc +++ b/src/d/actor/d_a_alink_bottle.inc @@ -379,7 +379,7 @@ int daAlink_c::procBottleDrinkInit(u16 i_itemNo) { mProcVar0.field_0x3008 = 0; u32 id = fopAcM_GetID(this); - dCam_getBody()->StartEventCamera(0x12, id, "Type", 1, &field_0x3194, 0); + dCam_getBody()->StartEventCamera(0x12, id, "Type", 1, &field_0x3194, nullptr); mProcVar2.field_0x300c = 0; mProcVar3.field_0x300e = 0; return 1; @@ -429,7 +429,7 @@ int daAlink_c::procBottleOpenInit(u16 i_itemNo) { mProcVar3.field_0x300e = 0; - dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", 1, &field_0x3194, 0); + dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", 1, &field_0x3194, nullptr); mProcVar2.field_0x300c = 0; field_0x27c8.initialize(current.pos.y + mHeight); @@ -738,7 +738,7 @@ int daAlink_c::procBottleGetInit(BOOL param_0) { } u32 id = fopAcM_GetID(this); - dCam_getBody()->StartEventCamera(0x12, id, "Type", 1, &field_0x3194, 0); + dCam_getBody()->StartEventCamera(0x12, id, "Type", 1, &field_0x3194, nullptr); if (mEquipItem == dItemNo_FAIRY_DROP_e || mEquipItem == dItemNo_CHUCHU_RARE_e || mEquipItem == dItemNo_WORM_e) { setFaceBasicTexture(FTANM_I_BINGET); diff --git a/src/d/actor/d_a_alink_canoe.inc b/src/d/actor/d_a_alink_canoe.inc index efe6f4551a..fdf1ca0f6a 100644 --- a/src/d/actor/d_a_alink_canoe.inc +++ b/src/d/actor/d_a_alink_canoe.inc @@ -1575,7 +1575,7 @@ int daAlink_c::procCanoeBottleDrinkInit(u16 i_itemNo) { dComIfGp_setPlayerStatus1(0, 0x2000); field_0x319c = 1; - dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", 1, &field_0x319c, 0); + dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", 1, &field_0x319c, nullptr); mProcVar2.field_0x300c = 0; return 1; } diff --git a/src/d/actor/d_a_alink_damage.inc b/src/d/actor/d_a_alink_damage.inc index 3863551c62..122bf8f248 100644 --- a/src/d/actor/d_a_alink_damage.inc +++ b/src/d/actor/d_a_alink_damage.inc @@ -1982,7 +1982,7 @@ int daAlink_c::procCoLavaReturnInit(BOOL i_isSandReturn) { mNormalSpeed = 0.0f; field_0x3194 = 1; - dCam_getBody()->StartEventCamera(9, fopAcM_GetID(this), "Type", 1, &field_0x3194, 0); + dCam_getBody()->StartEventCamera(9, fopAcM_GetID(this), "Type", 1, &field_0x3194, nullptr); return 1; } @@ -2040,7 +2040,7 @@ int daAlink_c::procCoSwimFreezeReturnInit() { field_0x3194 = 1; u32 id = fopAcM_GetID(this); - dCam_getBody()->StartEventCamera(9, id, "Type", 1, &field_0x3194, 0); + dCam_getBody()->StartEventCamera(9, id, "Type", 1, &field_0x3194, nullptr); mProcVar2.field_0x300c = 0x2D; return 1; } diff --git a/src/d/actor/d_a_alink_demo.inc b/src/d/actor/d_a_alink_demo.inc index dbea0add91..462c35d4e8 100644 --- a/src/d/actor/d_a_alink_demo.inc +++ b/src/d/actor/d_a_alink_demo.inc @@ -3019,7 +3019,7 @@ int daAlink_c::procCoDead() { if (!checkNoResetFlg2(FLG2_FORCE_GAMEOVER)) { mProcVar3.field_0x300e++; if (mProcVar3.field_0x300e == 2) { - dCam_getBody()->StartEventCamera(9, fopAcM_GetID(this), 0); + dCam_getBody()->StartEventCamera(9, fopAcM_GetID(this), nullptr); } else if (mProcVar3.field_0x300e > 10) { mProcVar3.field_0x300e = 10; } @@ -3330,7 +3330,7 @@ int daAlink_c::procCoFogDeadInit() { field_0x3194 = 0; - dCam_getBody()->StartEventCamera(0x13, fopAcM_GetID(this), "Type", 1, &field_0x3194, 0); + dCam_getBody()->StartEventCamera(0x13, fopAcM_GetID(this), "Type", 1, &field_0x3194, nullptr); mProcVar0.field_0x3008 = 60; mProcVar2.field_0x300c = 0; return 1; @@ -3849,7 +3849,7 @@ int daAlink_c::procNotUseItemInit(int i_itemNo) { current.angle.y = shape_angle.y; field_0x3194 = 3; - dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", 1, &field_0x3194, 0); + dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", 1, &field_0x3194, nullptr); keepItemData(); dComIfGp_setPlayerStatus1(0, 0x4000800); diff --git a/src/d/actor/d_a_alink_horse.inc b/src/d/actor/d_a_alink_horse.inc index 6d56929288..ac7ce73e50 100644 --- a/src/d/actor/d_a_alink_horse.inc +++ b/src/d/actor/d_a_alink_horse.inc @@ -2570,7 +2570,7 @@ int daAlink_c::procHorseBottleDrinkInit(u16 i_itemNo) { dComIfGp_setPlayerStatus1(0, 0x2000); field_0x319c = 1; - dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", 1, &field_0x319c, 0); + dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", 1, &field_0x319c, nullptr); mProcVar2.field_0x300c = 0; return 1; } diff --git a/src/d/actor/d_a_alink_kandelaar.inc b/src/d/actor/d_a_alink_kandelaar.inc index cd25a66d7e..339ff90ce6 100644 --- a/src/d/actor/d_a_alink_kandelaar.inc +++ b/src/d/actor/d_a_alink_kandelaar.inc @@ -256,7 +256,7 @@ void daAlink_c::commonKandelaarPourInit() { mProcVar2.field_0x300c = 0; dComIfGp_setPlayerStatus1(0, 0x2000); field_0x3194 = 10; - dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", 1, &field_0x3194, 0); + dCam_getBody()->StartEventCamera(0x12, fopAcM_GetID(this), "Type", 1, &field_0x3194, nullptr); } int daAlink_c::commonKandelaarPour(int param_0) { diff --git a/src/d/actor/d_a_alink_whistle.inc b/src/d/actor/d_a_alink_whistle.inc index eabff6d408..5c16d3bf52 100644 --- a/src/d/actor/d_a_alink_whistle.inc +++ b/src/d/actor/d_a_alink_whistle.inc @@ -145,7 +145,7 @@ int daAlink_c::procGrassWhistleWaitInit(int param_0, int param_1, int param_2, s mProcVar2.field_0x300c = param_0; mProcVar3.field_0x300e = param_1; - dCam_getBody()->StartEventCamera(12, fopAcM_GetID(this), 0); + dCam_getBody()->StartEventCamera(12, fopAcM_GetID(this), nullptr); mProcVar0.field_0x3008 = 0; mProcVar4.field_0x3010 = 0; mProcVar5.field_0x3012 = 0; diff --git a/src/d/actor/d_a_alink_wolf.inc b/src/d/actor/d_a_alink_wolf.inc index 6f40a55cdb..2bf1129f17 100644 --- a/src/d/actor/d_a_alink_wolf.inc +++ b/src/d/actor/d_a_alink_wolf.inc @@ -3967,7 +3967,7 @@ int daAlink_c::procWolfHowlDemoInit() { } } - dCam_getBody()->StartEventCamera(12, fopAcM_GetID(this), 0); + dCam_getBody()->StartEventCamera(12, fopAcM_GetID(this), nullptr); mProcVar1.field_0x300a = 0; mMsgClassID = fpcM_ERROR_PROCESS_ID_e; field_0x32cc = 0x5DD; @@ -9206,7 +9206,7 @@ int daAlink_c::procWolfDigThroughInit(int param_0) { field_0x3198 = 3; } - dCam_getBody()->StartEventCamera(0x1E, fopAcM_GetID(this), "Type", 1, &field_0x3198, 0); + dCam_getBody()->StartEventCamera(0x1E, fopAcM_GetID(this), "Type", 1, &field_0x3198, nullptr); cXyz sp8(current.pos.x, 30.0f + field_0x27f4->current.pos.y, current.pos.z); if (fopAcM_gc_c::gndCheck(&sp8)) { @@ -9413,7 +9413,7 @@ int daAlink_c::procWolfGetSmell() { mProcVar4.field_0x3010 = 1; - dCam_getBody()->StartEventCamera(8, fopAcM_GetID(this), 0); + dCam_getBody()->StartEventCamera(8, fopAcM_GetID(this), nullptr); field_0x2f99 = 12; if (field_0x3198 == 0xBBC) { diff --git a/src/d/actor/d_a_npc_tkc.cpp b/src/d/actor/d_a_npc_tkc.cpp index 441beb1a5b..bcd5afedb8 100644 --- a/src/d/actor/d_a_npc_tkc.cpp +++ b/src/d/actor/d_a_npc_tkc.cpp @@ -577,7 +577,7 @@ void daNpcTkc_c::reset() { setAngle(fopAcM_searchPlayerAngleY(this)); static int const m_cameraItemNum = 1; - dCam_getBody()->StartEventCamera(18, fopAcM_GetID(this), "Type", 1, &m_cameraItemNum, 0); + dCam_getBody()->StartEventCamera(18, fopAcM_GetID(this), "Type", 1, &m_cameraItemNum, nullptr); } else if (parentActorID == fpcM_ERROR_PROCESS_ID_e) { home.pos.y += mpHIO->m.target_height; } else { diff --git a/src/d/actor/d_a_obj_tks.cpp b/src/d/actor/d_a_obj_tks.cpp index 7add35570e..7c87356c85 100644 --- a/src/d/actor/d_a_obj_tks.cpp +++ b/src/d/actor/d_a_obj_tks.cpp @@ -164,7 +164,7 @@ int daObjTks_c::Create() { field_0xde1 = 1; static const int m_cameraItemNum = 1; - dCam_getBody()->StartEventCamera(18, fopAcM_GetID(this), "Type", 1, &m_cameraItemNum, 0); + dCam_getBody()->StartEventCamera(18, fopAcM_GetID(this), "Type", 1, &m_cameraItemNum, nullptr); } return phase_state;