From 093b92acc1e3e942b5e73d96945a95b9886dbb0e Mon Sep 17 00:00:00 2001 From: Alessio Quaglino Date: Fri, 15 May 2026 08:48:38 -0700 Subject: [PATCH] Add bounds check for cached node indices in passive mesh. The global node indices stored in face_gidx are now checked to ensure they are within the valid range of node numbers, raising an error if any index is out of bounds. PiperOrigin-RevId: 916025763 Change-Id: I1d2dcb11603137c337493541066b62b2ed2854c0 --- src/engine/engine_passive.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/engine/engine_passive.c b/src/engine/engine_passive.c index 889cefdb..a6c6f3c3 100644 --- a/src/engine/engine_passive.c +++ b/src/engine/engine_passive.c @@ -280,6 +280,14 @@ static void mj_flexPassiveBendInterp(const mjModel* m, mjData* d, int f, face_gidx + fi * npe, face_quat + fi * 4); } + // check cached node indices are in bounds + for (int i = 0; i < nfaces * npe; i++) { + if (face_gidx[i] < 0 || face_gidx[i] >= nodenum) { + mjERROR("cached node index out of range: face_gidx[%d]=%d, nodenum=%d", + i, face_gidx[i], nodenum); + } + } + // per-edge temporaries mjtNum* xpos_A = mjSTACKALLOC(d, 3*npe, mjtNum); mjtNum* xpos_B = mjSTACKALLOC(d, 3*npe, mjtNum);