diff options
| author | Brian Anderson <banderson@mozilla.com> | 2012-06-02 23:55:32 -0700 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2012-06-02 23:57:32 -0700 |
| commit | 9b81dbfef3322ea2c05fe92a2b7cc6bbecbc33fe (patch) | |
| tree | 7ade36d0c97bde237a9cd314ba49fe79ed3de63b /src | |
| parent | 8fbd5ac0492235f98262182f4dd98c5734ffdc61 (diff) | |
| download | rust-9b81dbfef3322ea2c05fe92a2b7cc6bbecbc33fe.tar.gz rust-9b81dbfef3322ea2c05fe92a2b7cc6bbecbc33fe.zip | |
cargo: Require hexidecimals in uuids
Diffstat (limited to 'src')
| -rw-r--r-- | src/cargo/cargo.rs | 24 |
1 files changed, 18 insertions, 6 deletions
diff --git a/src/cargo/cargo.rs b/src/cargo/cargo.rs index a20530fdf79..625a494b3f9 100644 --- a/src/cargo/cargo.rs +++ b/src/cargo/cargo.rs @@ -107,7 +107,18 @@ fn is_uuid(id: str) -> bool { let parts = str::split_str(id, "-"); if vec::len(parts) == 5u { let mut correct = 0u; - vec::iteri(parts) { |i, part| + for vec::eachi(parts) { |i, part| + + if !part.all(is_hex_digit) { + ret false; + } + + fn is_hex_digit(ch: char) -> bool { + ('0' <= ch && ch <= '9') || + ('a' <= ch && ch <= 'f') || + ('A' <= ch && ch <= 'F') + } + alt i { 0u { if str::len(part) == 8u { @@ -131,17 +142,18 @@ fn is_uuid(id: str) -> bool { ret true; } } - false + ret false; } #[test] fn test_is_uuid() { - assert is_uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"); - assert is_uuid("AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"); - assert is_uuid("0AAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAA0"); - assert !is_uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa"); + assert is_uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaafAF09"); assert !is_uuid("aaaaaaaa-aaaa-aaaa-aaaaa-aaaaaaaaaaaa"); assert !is_uuid(""); + assert !is_uuid("aaaaaaaa-aaa -aaaa-aaaa-aaaaaaaaaaaa"); + assert !is_uuid("aaaaaaaa-aaa!-aaaa-aaaa-aaaaaaaaaaaa"); + assert !is_uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa-a"); + assert !is_uuid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaป"); } // FIXME: implement URI/URL parsing so we don't have to resort to weak checks |
