@@ -107,7 +107,18 @@ fn is_uuid(id: str) -> bool {
107
107
let parts = str:: split_str ( id, "-" ) ;
108
108
if vec:: len ( parts) == 5 u {
109
109
let mut correct = 0 u;
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
+
111
122
alt i {
112
123
0 u {
113
124
if str:: len ( part) == 8 u {
@@ -131,17 +142,18 @@ fn is_uuid(id: str) -> bool {
131
142
ret true ;
132
143
}
133
144
}
134
- false
145
+ ret false;
135
146
}
136
147
137
148
#[ test]
138
149
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" ) ;
143
151
assert ! is_uuid( "aaaaaaaa-aaaa-aaaa-aaaaa-aaaaaaaaaaaa" ) ;
144
152
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ป" ) ;
145
157
}
146
158
147
159
// FIXME: implement URI/URL parsing so we don't have to resort to weak checks
0 commit comments