Skip to content

Commit 201ad03

Browse files
authored
Make extract_requirement_version()'s parsing more robust (#545)
Previously it didn't check the empty string case, which in practice made no difference (since this function is only used internally during compilation), but fixing this also improves test coverage, so brings us one step closer to being able to enforce it at 100% in CI.
1 parent 49608aa commit 201ad03

1 file changed

Lines changed: 8 additions & 7 deletions

File tree

src/packaging_tool_versions.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ pub(crate) const UV_VERSION: &str =
1919
// Note: Since this is a `const fn` we cannot use iterators and most methods on `str` / `Result`.
2020
const fn extract_requirement_version(requirement: &'static str) -> Option<&'static str> {
2121
let mut bytes = requirement.as_bytes();
22-
while let [_, rest @ ..] = bytes {
23-
if let [b'=', b'=', version @ ..] = rest {
24-
if let Ok(version) = str::from_utf8(version.trim_ascii()) {
25-
return Some(version);
26-
}
27-
break;
22+
while let [_, tail @ ..] = bytes {
23+
if let [b'=', b'=', version @ ..] = tail {
24+
return match str::from_utf8(version.trim_ascii()) {
25+
Ok(version) if !version.is_empty() => Some(version),
26+
_ => None,
27+
};
2828
}
29-
bytes = rest;
29+
bytes = tail;
3030
}
3131
None
3232
}
@@ -47,6 +47,7 @@ mod tests {
4747
#[test]
4848
fn extract_requirement_version_invalid() {
4949
assert_eq!(extract_requirement_version(""), None);
50+
assert_eq!(extract_requirement_version(" == "), None);
5051
assert_eq!(extract_requirement_version("package"), None);
5152
assert_eq!(extract_requirement_version("package=<1.2.3"), None);
5253
}

0 commit comments

Comments
 (0)