From 9b81dbfef3322ea2c05fe92a2b7cc6bbecbc33fe Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 2 Jun 2012 23:55:32 -0700 Subject: [PATCH] cargo: Require hexidecimals in uuids --- src/cargo/cargo.rs | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/cargo/cargo.rs b/src/cargo/cargo.rs index a20530fdf79c3..625a494b3f9a8 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