Skip to content

Commit 9b81dbf

Browse files
committed
cargo: Require hexidecimals in uuids
1 parent 8fbd5ac commit 9b81dbf

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

src/cargo/cargo.rs

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,18 @@ fn is_uuid(id: str) -> bool {
107107
let parts = str::split_str(id, "-");
108108
if vec::len(parts) == 5u {
109109
let mut correct = 0u;
110-
vec::iteri(parts) { |i, part|
110+
for vec::eachi(parts) { |i, part|
111+
112+
if !part.all(is_hex_digit) {
113+
ret false;
114+
}
115+
116+
fn is_hex_digit(ch: char) -> bool {
117+
('0' <= ch && ch <= '9') ||
118+
('a' <= ch && ch <= 'f') ||
119+
('A' <= ch && ch <= 'F')
120+
}
121+
111122
alt i {
112123
0u {
113124
if str::len(part) == 8u {
@@ -131,17 +142,18 @@ fn is_uuid(id: str) -> bool {
131142
ret true;
132143
}
133144
}
134-
false
145+
ret false;
135146
}
136147

137148
#[test]
138149
fn test_is_uuid() {
139-
assert is_uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa");
140-
assert is_uuid("AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA");
141-
assert is_uuid("0AAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAA0");
142-
assert !is_uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa");
150+
assert is_uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaafAF09");
143151
assert !is_uuid("aaaaaaaa-aaaa-aaaa-aaaaa-aaaaaaaaaaaa");
144152
assert !is_uuid("");
153+
assert !is_uuid("aaaaaaaa-aaa -aaaa-aaaa-aaaaaaaaaaaa");
154+
assert !is_uuid("aaaaaaaa-aaa!-aaaa-aaaa-aaaaaaaaaaaa");
155+
assert !is_uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa-a");
156+
assert !is_uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaป");
145157
}
146158

147159
// FIXME: implement URI/URL parsing so we don't have to resort to weak checks

0 commit comments

Comments
 (0)