@@ -26,13 +26,18 @@ const RFC_1123_LABEL_FMT: &str = "[a-zA-Z0-9]([-a-zA-Z0-9]*[a-zA-Z0-9])?";
26
26
27
27
/// This is a subdomain's max length in DNS (RFC 1123)
28
28
const RFC_1123_SUBDOMAIN_MAX_LENGTH : usize = 253 ;
29
- const RFC_1123_SUBDOMAIN_FMT : & str =
30
- concatcp ! ( RFC_1123_LABEL_FMT , "(\\ ." , RFC_1123_LABEL_FMT , ")*" ) ;
29
+ const RFC_1123_SUBDOMAIN_FMT : & str = concatcp ! (
30
+ LOWERCASE_RFC_1123_LABEL_FMT ,
31
+ "(\\ ." ,
32
+ LOWERCASE_RFC_1123_LABEL_FMT ,
33
+ ")*"
34
+ ) ;
31
35
const RFC_1123_SUBDOMAIN_ERROR_MSG : & str = "a RFC 1123 subdomain must consist of alphanumeric characters, '-' or '.', and must start and end with an alphanumeric character" ;
32
36
33
37
const DOMAIN_MAX_LENGTH : usize = RFC_1123_SUBDOMAIN_MAX_LENGTH ;
34
- /// Same as [`RFC_1123_SUBDOMAIN_FMT`], but allows a trailing dot
35
- const DOMAIN_FMT : & str = concatcp ! ( RFC_1123_SUBDOMAIN_FMT , "\\ .?" ) ;
38
+
39
+ /// Same as [`RFC_1123_LABEL_FMT`], but allows a trailing dot
40
+ const DOMAIN_FMT : & str = concatcp ! ( RFC_1123_LABEL_FMT , "(\\ ." , RFC_1123_LABEL_FMT , ")*\\ .?" ) ;
36
41
const DOMAIN_ERROR_MSG : & str = "a domain must consist of alphanumeric characters, '-' or '.', and must start with an alphanumeric character and end with an alphanumeric character or '.'" ;
37
42
38
43
// FIXME: According to https://www.rfc-editor.org/rfc/rfc1035#section-2.3.1 domain names must start with a letter
@@ -303,6 +308,12 @@ mod tests {
303
308
304
309
#[ rstest]
305
310
#[ case( "" ) ]
311
+ #[ case( "A" ) ]
312
+ #[ case( "aBc" ) ]
313
+ #[ case( "ABC" ) ]
314
+ #[ case( "A1" ) ]
315
+ #[ case( "A-1" ) ]
316
+ #[ case( "1-A" ) ]
306
317
#[ case( "-" ) ]
307
318
#[ case( "a-" ) ]
308
319
#[ case( "-a" ) ]
@@ -329,6 +340,24 @@ mod tests {
329
340
#[ case( "1 " ) ]
330
341
#[ case( " 1" ) ]
331
342
#[ case( "1 2" ) ]
343
+ #[ case( "A.a" ) ]
344
+ #[ case( "aB.a" ) ]
345
+ #[ case( "ab.A" ) ]
346
+ #[ case( "A1.a" ) ]
347
+ #[ case( "a1.A" ) ]
348
+ #[ case( "A.1" ) ]
349
+ #[ case( "aB.1" ) ]
350
+ #[ case( "A1.1" ) ]
351
+ #[ case( "0.A" ) ]
352
+ #[ case( "01.A" ) ]
353
+ #[ case( "012.A" ) ]
354
+ #[ case( "1A.a" ) ]
355
+ #[ case( "1a.A" ) ]
356
+ #[ case( "1A.1" ) ]
357
+ #[ case( "a.B.c.d.e" ) ]
358
+ #[ case( "A.B.C.D.E" ) ]
359
+ #[ case( "aa.bB.cc.dd.ee" ) ]
360
+ #[ case( "AA.BB.CC.DD.EE" ) ]
332
361
#[ case( "a@b" ) ]
333
362
#[ case( "a,b" ) ]
334
363
#[ case( "a_b" ) ]
@@ -344,67 +373,43 @@ mod tests {
344
373
345
374
#[ rstest]
346
375
#[ case( "a" ) ]
347
- #[ case( "A" ) ]
348
376
#[ case( "ab" ) ]
349
377
#[ case( "abc" ) ]
350
- #[ case( "aBc" ) ]
351
- #[ case( "ABC" ) ]
352
378
#[ case( "a1" ) ]
353
- #[ case( "A1" ) ]
354
379
#[ case( "a-1" ) ]
355
- #[ case( "A-1" ) ]
356
380
#[ case( "a--1--2--b" ) ]
357
381
#[ case( "0" ) ]
358
382
#[ case( "01" ) ]
359
383
#[ case( "012" ) ]
360
384
#[ case( "1a" ) ]
361
385
#[ case( "1-a" ) ]
362
- #[ case( "1-A" ) ]
363
386
#[ case( "1--a--b--2" ) ]
364
387
#[ case( "a.a" ) ]
365
- #[ case( "A.a" ) ]
366
388
#[ case( "ab.a" ) ]
367
- #[ case( "aB.a" ) ]
368
- #[ case( "ab.A" ) ]
369
389
#[ case( "abc.a" ) ]
370
390
#[ case( "a1.a" ) ]
371
- #[ case( "A1.a" ) ]
372
- #[ case( "a1.A" ) ]
373
391
#[ case( "a-1.a" ) ]
374
392
#[ case( "a--1--2--b.a" ) ]
375
393
#[ case( "a.1" ) ]
376
- #[ case( "A.1" ) ]
377
394
#[ case( "ab.1" ) ]
378
- #[ case( "aB.1" ) ]
379
395
#[ case( "abc.1" ) ]
380
396
#[ case( "a1.1" ) ]
381
- #[ case( "A1.1" ) ]
382
397
#[ case( "a-1.1" ) ]
383
398
#[ case( "a--1--2--b.1" ) ]
384
399
#[ case( "0.a" ) ]
385
- #[ case( "0.A" ) ]
386
400
#[ case( "01.a" ) ]
387
- #[ case( "01.A" ) ]
388
401
#[ case( "012.a" ) ]
389
- #[ case( "012.A" ) ]
390
402
#[ case( "1a.a" ) ]
391
- #[ case( "1A.a" ) ]
392
- #[ case( "1a.A" ) ]
393
403
#[ case( "1-a.a" ) ]
394
404
#[ case( "1--a--b--2" ) ]
395
405
#[ case( "0.1" ) ]
396
406
#[ case( "01.1" ) ]
397
407
#[ case( "012.1" ) ]
398
408
#[ case( "1a.1" ) ]
399
- #[ case( "1A.1" ) ]
400
409
#[ case( "1-a.1" ) ]
401
410
#[ case( "1--a--b--2.1" ) ]
402
411
#[ case( "a.b.c.d.e" ) ]
403
- #[ case( "a.B.c.d.e" ) ]
404
- #[ case( "A.B.C.D.E" ) ]
405
412
#[ case( "aa.bb.cc.dd.ee" ) ]
406
- #[ case( "aa.bB.cc.dd.ee" ) ]
407
- #[ case( "AA.BB.CC.DD.EE" ) ]
408
413
#[ case( "1.2.3.4.5" ) ]
409
414
#[ case( "11.22.33.44.55" ) ]
410
415
#[ case( & "a" . repeat( 253 ) ) ]
0 commit comments