diff --git a/crates/uv-platform-tags/src/abi_tag.rs b/crates/uv-platform-tags/src/abi_tag.rs index 8a8404dad1542..a6219a68d980f 100644 --- a/crates/uv-platform-tags/src/abi_tag.rs +++ b/crates/uv-platform-tags/src/abi_tag.rs @@ -366,12 +366,18 @@ impl FromStr for AbiTag { tag: s.to_string(), })?; let (impl_major, impl_minor) = parse_impl_version(impl_ver_str, "GraalPy", s)?; - let (py_ver_str, _) = + let (py_ver_str, suffix) = rest.split_once('_') .ok_or_else(|| ParseAbiTagError::InvalidFormat { implementation: "GraalPy", tag: s.to_string(), })?; + if suffix != "native" { + return Err(ParseAbiTagError::InvalidFormat { + implementation: "GraalPy", + tag: s.to_string(), + }); + } let (major, minor) = parse_python_version(py_ver_str, "GraalPy", s)?; Ok(Self::GraalPy { python_version: (major, minor), @@ -589,6 +595,20 @@ mod tests { tag: "graalpy310_graalpyXY".to_string() }) ); + assert_eq!( + AbiTag::from_str("graalpy240_310_wrong"), + Err(ParseAbiTagError::InvalidFormat { + implementation: "GraalPy", + tag: "graalpy240_310_wrong".to_string() + }) + ); + assert_eq!( + AbiTag::from_str("graalpy240_310_native_extra"), + Err(ParseAbiTagError::InvalidFormat { + implementation: "GraalPy", + tag: "graalpy240_310_native_extra".to_string() + }) + ); } #[test]