Skip to content

Commit 8186282

Browse files
committed
fix(embedded): Sanitize like we validate package names
1 parent 5fd3d2d commit 8186282

File tree

1 file changed

+16
-16
lines changed

1 file changed

+16
-16
lines changed

src/cargo/util/restricted_names.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -86,22 +86,22 @@ pub fn validate_package_name(name: &str, what: &str, help: &str) -> CargoResult<
8686
/// Ensure a package name is [valid][validate_package_name]
8787
pub fn sanitize_package_name(name: &str, placeholder: char) -> String {
8888
let mut slug = String::new();
89-
for (i, c) in name.chars().enumerate() {
90-
match (i, c) {
91-
(0, '0'..='9') => {
92-
slug.push(placeholder);
93-
slug.push(c);
94-
}
95-
(_, '0'..='9') | (_, 'a'..='z') | (_, '_') | (_, '-') => {
96-
slug.push(c);
97-
}
98-
(_, 'A'..='Z') => {
99-
// Convert uppercase characters to lowercase to avoid `non_snake_case` warnings.
100-
slug.push(c.to_ascii_lowercase());
101-
}
102-
(_, _) => {
103-
slug.push(placeholder);
104-
}
89+
let mut chars = name.chars();
90+
if let Some(ch) = chars.next() {
91+
if ch.is_digit(10) {
92+
slug.push(placeholder);
93+
slug.push(ch);
94+
} else if unicode_xid::UnicodeXID::is_xid_start(ch) || ch == '_' {
95+
slug.push(ch);
96+
} else {
97+
slug.push(placeholder);
98+
}
99+
}
100+
for ch in chars {
101+
if unicode_xid::UnicodeXID::is_xid_continue(ch) || ch == '-' {
102+
slug.push(ch);
103+
} else {
104+
slug.push(placeholder);
105105
}
106106
}
107107
slug

0 commit comments

Comments
 (0)