Fix potential out-of-range write in solver statistics saving.
PiperOrigin-RevId: 569094007 Change-Id: I2e596a7c03d76523359cae7ae7f4501b06256a38
This commit is contained in:
committed by
Copybara-Service
parent
b8a91a00ce
commit
772326e9eb
@@ -37,7 +37,7 @@
|
|||||||
static void saveStats(const mjModel* m, mjData* d, int island, int iter,
|
static void saveStats(const mjModel* m, mjData* d, int island, int iter,
|
||||||
mjtNum improvement, mjtNum gradient, mjtNum lineslope,
|
mjtNum improvement, mjtNum gradient, mjtNum lineslope,
|
||||||
int nactive, int nchange, int neval, int nupdate) {
|
int nactive, int nchange, int neval, int nupdate) {
|
||||||
// if out of range, return
|
// if island out of range, return
|
||||||
if (island >= mjNISLAND) {
|
if (island >= mjNISLAND) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -45,8 +45,12 @@ static void saveStats(const mjModel* m, mjData* d, int island, int iter,
|
|||||||
// if no islands, use first island
|
// if no islands, use first island
|
||||||
island = mjMAX(0, island);
|
island = mjMAX(0, island);
|
||||||
|
|
||||||
|
// if iter out of range, return
|
||||||
|
if (iter >= mjNSOLVER) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// get mjSolverStat pointer
|
// get mjSolverStat pointer
|
||||||
iter += d->solver_niter[island]; // add current niter (in case of noslip)
|
|
||||||
mjSolverStat* stat = d->solver + island*mjNSOLVER + iter;
|
mjSolverStat* stat = d->solver + island*mjNSOLVER + iter;
|
||||||
|
|
||||||
// save stats
|
// save stats
|
||||||
@@ -712,7 +716,10 @@ void mj_solNoSlip(const mjModel* m, mjData* d, int maxiter) {
|
|||||||
|
|
||||||
// scale improvement, save stats
|
// scale improvement, save stats
|
||||||
improvement *= scale;
|
improvement *= scale;
|
||||||
saveStats(m, d, island, iter, improvement, 0, 0, nactive, nchange, 0, 0);
|
|
||||||
|
// save noslip stats after all the entries from regular solver
|
||||||
|
int stats_iter = iter + d->solver_niter[island];
|
||||||
|
saveStats(m, d, island, stats_iter, improvement, 0, 0, nactive, nchange, 0, 0);
|
||||||
|
|
||||||
// increment iteration count
|
// increment iteration count
|
||||||
iter++;
|
iter++;
|
||||||
|
|||||||
Reference in New Issue
Block a user