From a98cb9d56f909020325144efd96da3c00a1719df Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Wed, 12 Oct 2022 20:11:48 -0700 Subject: fix(tvix/eval): parseDrvName should not coerce, and xfail test builtins.parseDrvName should not coerce its argument to a string. This commit fixes that oversight in my previous commit, and adds an xfail test to cover this condition. Thanks to @sterni for noticing this. Signed-off-by: Adam Joseph Change-Id: I76bc78f1a82e1e08fe5c787c563a221d55de2639 Reviewed-on: https://cl.tvl.fyi/c/depot/+/6991 Tested-by: BuildkiteCI Reviewed-by: sterni --- tvix/eval/src/builtins/mod.rs | 4 ++-- tvix/eval/src/tests/tvix_tests/eval-fail-parsedrvname-coerce.nix | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 tvix/eval/src/tests/tvix_tests/eval-fail-parsedrvname-coerce.nix (limited to 'tvix/eval') diff --git a/tvix/eval/src/builtins/mod.rs b/tvix/eval/src/builtins/mod.rs index a3aaf33bf4..0b19a89aa3 100644 --- a/tvix/eval/src/builtins/mod.rs +++ b/tvix/eval/src/builtins/mod.rs @@ -381,10 +381,10 @@ fn pure_builtins() -> Vec { Ok(Value::attrs(NixAttrs::from_map(res))) }, ), - Builtin::new("parseDrvName", &[true], |args: Vec, vm: &mut VM| { + Builtin::new("parseDrvName", &[true], |args: Vec, _vm: &mut VM| { // This replicates cppnix's (mis?)handling of codepoints // above U+007f following 0x2d ('-') - let s = args[0].coerce_to_string(CoercionKind::Weak, vm)?; + let s = args[0].to_str()?; let slice: &[u8] = s.as_str().as_ref(); let (name, dash_and_version) = slice.split_at( slice diff --git a/tvix/eval/src/tests/tvix_tests/eval-fail-parsedrvname-coerce.nix b/tvix/eval/src/tests/tvix_tests/eval-fail-parsedrvname-coerce.nix new file mode 100644 index 0000000000..a1218de3fe --- /dev/null +++ b/tvix/eval/src/tests/tvix_tests/eval-fail-parsedrvname-coerce.nix @@ -0,0 +1 @@ +builtins.parseDrvName { outPath = "lol"; } -- cgit 1.4.1