Skip to content

Commit 7d91969

Browse files
committed
Fix the validation for optional dep
Signed-off-by: hi-rustin <[email protected]>
1 parent c4f3be2 commit 7d91969

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

src/models/krate.rs

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -290,13 +290,16 @@ impl Crate {
290290

291291
/// Validates a whole feature string, `features = ["THIS", "and/THIS", "dep:THIS", "dep?/THIS"]`.
292292
pub fn valid_feature(name: &str) -> AppResult<()> {
293-
match name.split_once('/') {
294-
Some((dep, dep_feat)) => {
295-
let dep = dep.strip_suffix('?').unwrap_or(dep);
296-
Crate::valid_dependency_name(dep)?;
297-
Crate::valid_feature_name(dep_feat)
293+
if let Some((dep, dep_feat)) = name.split_once('/') {
294+
let dep = dep.strip_suffix('?').unwrap_or(dep);
295+
Crate::valid_dependency_name(dep)?;
296+
Crate::valid_feature_name(dep_feat)
297+
} else {
298+
if let Some((_, dep)) = name.split_once("dep:") {
299+
Crate::valid_dependency_name(dep)
300+
} else {
301+
Crate::valid_feature_name(name)
298302
}
299-
None => Crate::valid_feature_name(name.strip_prefix("dep:").unwrap_or(name)),
300303
}
301304
}
302305

@@ -587,5 +590,7 @@ mod tests {
587590
assert!(Crate::valid_feature("foo?bar").is_err());
588591
assert!(Crate::valid_feature("bar.web").is_ok());
589592
assert!(Crate::valid_feature("foo/bar.web").is_ok());
593+
assert!(Crate::valid_feature("dep:0foo").is_err());
594+
assert!(Crate::valid_feature("0foo?/bar.web").is_err());
590595
}
591596
}

0 commit comments

Comments
 (0)