about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-06-02 23:55:32 -0700
committerBrian Anderson <banderson@mozilla.com>2012-06-02 23:57:32 -0700
commit9b81dbfef3322ea2c05fe92a2b7cc6bbecbc33fe (patch)
tree7ade36d0c97bde237a9cd314ba49fe79ed3de63b /src
parent8fbd5ac0492235f98262182f4dd98c5734ffdc61 (diff)
downloadrust-9b81dbfef3322ea2c05fe92a2b7cc6bbecbc33fe.tar.gz
rust-9b81dbfef3322ea2c05fe92a2b7cc6bbecbc33fe.zip
cargo: Require hexidecimals in uuids
Diffstat (limited to 'src')
-rw-r--r--src/cargo/cargo.rs24
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