From da26721beaed12b30faaee62d7f9a26f33fdab7f Mon Sep 17 00:00:00 2001 From: Robert Hensing Date: Sat, 15 Jun 2024 14:55:23 +0200 Subject: [PATCH] fix: Do not duplicate ctx expr in check_call_opt_key! (cherry picked from commit 86ddc63a573cd08ec19008448ec2fca33a84159e) --- rust/nix-expr/src/eval_state.rs | 4 ++-- rust/nix-util/src/context.rs | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/rust/nix-expr/src/eval_state.rs b/rust/nix-expr/src/eval_state.rs index a45c75f..833a366 100644 --- a/rust/nix-expr/src/eval_state.rs +++ b/rust/nix-expr/src/eval_state.rs @@ -223,9 +223,9 @@ impl EvalState { .with_context(|| "require_attrs_select_opt: attrName contains null byte")?; let v2 = unsafe { check_call_opt_key!(raw::get_attr_byname[ - self.context, + &mut self.context, v.raw_ptr(), - self.raw_ptr(), + self.eval_state.as_ptr(), attr_name.as_ptr() ]) }?; diff --git a/rust/nix-util/src/context.rs b/rust/nix-util/src/context.rs index cec4063..e838cc6 100644 --- a/rust/nix-util/src/context.rs +++ b/rust/nix-util/src/context.rs @@ -107,15 +107,16 @@ pub use check_call; macro_rules! check_call_opt_key { ($f:path[$ctx:expr, $($arg:expr),*]) => { { - let ret = $f($ctx.ptr(), $($arg,)*); - if unsafe { raw::err_code($ctx.ptr()) == raw::NIX_ERR_KEY } { - $ctx.clear(); + let ctx : &mut $crate::context::Context = $ctx; + let ret = $f(ctx.ptr(), $($arg,)*); + if unsafe { raw::err_code(ctx.ptr()) == raw::NIX_ERR_KEY } { + ctx.clear(); return Ok(None); } - match $ctx.check_err() { + match ctx.check_err() { Ok(_) => Ok(Some(ret)), Err(e) => { - $ctx.clear(); + ctx.clear(); Err(e) } }