From: Ian Jackson Date: Sat, 15 May 2021 15:48:11 +0000 (+0100) Subject: occult ilks: Fix a theoretical leak X-Git-Tag: otter-0.6.0~283 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=86354caf744deb66b5e0c00aaf48a15dd80e9574;p=otter.git occult ilks: Fix a theoretical leak Signed-off-by: Ian Jackson --- diff --git a/daemon/cmdlistener.rs b/daemon/cmdlistener.rs index 31944634..41532f36 100644 --- a/daemon/cmdlistener.rs +++ b/daemon/cmdlistener.rs @@ -968,18 +968,20 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( throw!(SpecError::FaceNotFound); } let gs = &mut ig.gs; - let ilks = &mut ig.ioccults.ilks; - let occilk = occultable.map(|(ilkname, p_occ)| { - ilks.insert(ilkname, OccultIlkData { p_occ }) - }); gpc.pos.clamped(gs.table_size)?; if gpc.zlevel > gs.max_z { gs.max_z = gpc.zlevel.clone() } let piece = gs.pieces.as_mut(modperm).insert(gpc); let p = IPieceTraitObj::new(p); - ig.ipieces.as_mut(modperm).insert(piece, IPiece { - p, occilk, loaded_via_alias, - }); - updates.push((piece, PieceUpdateOp::Insert(()))); + (||{ + let ilks = &mut ig.ioccults.ilks; + let occilk = occultable.map(|(ilkname, p_occ)| { + ilks.insert(ilkname, OccultIlkData { p_occ }) + }); + ig.ipieces.as_mut(modperm).insert(piece, IPiece { + p, occilk, loaded_via_alias, + }); + updates.push((piece, PieceUpdateOp::Insert(()))); + })(); // <- no ?, infallible (to avoid leaking ilk) pos = (pos + posd)?; }