Hex Artifact Content
Logged in as anonymous

Artifact 0b7338cf6f6dcb935913115ef733ef07605d1a92a01277a495d489f849ae79d2:


0000: 75 73 65 20 73 6d 74 70 32 74 67 3a 3a 75 74 69  use smtp2tg::uti
0010: 6c 73 3a 3a 7b 0a 09 76 61 6c 69 64 61 74 65 2c  ls::{..validate,
0020: 0a 09 52 45 5f 43 4c 4f 53 49 4e 47 2c 0a 09 52  ..RE_CLOSING,..R
0030: 45 5f 44 4f 4d 41 49 4e 2c 0a 7d 3b 0a 75 73 65  E_DOMAIN,.};.use
0040: 20 73 74 61 63 6b 65 64 5f 65 72 72 6f 72 73 3a   stacked_errors:
0050: 3a 52 65 73 75 6c 74 3b 0a 0a 23 5b 74 65 73 74  :Result;..#[test
0060: 5d 0a 66 6e 20 74 65 73 74 5f 76 61 6c 69 64 61  ].fn test_valida
0070: 74 65 5f 76 61 6c 69 64 5f 68 74 6d 6c 28 29 20  te_valid_html() 
0080: 2d 3e 20 52 65 73 75 6c 74 3c 28 29 3e 20 7b 0a  -> Result<()> {.
0090: 09 6c 65 74 20 68 74 6d 6c 20 3d 20 22 3c 70 3e  .let html = "<p>
00a0: 53 6f 6d 65 20 3c 62 3e 76 61 6c 69 64 3c 2f 62  Some <b>valid</b
00b0: 3e 20 48 54 4d 4c 3c 2f 70 3e 22 3b 0a 09 6c 65  > HTML</p>";..le
00c0: 74 20 65 73 63 61 70 65 64 20 3d 20 76 61 6c 69  t escaped = vali
00d0: 64 61 74 65 28 68 74 6d 6c 29 3f 3b 0a 09 61 73  date(html)?;..as
00e0: 73 65 72 74 5f 65 71 21 28 65 73 63 61 70 65 64  sert_eq!(escaped
00f0: 2c 20 22 26 6c 74 3b 70 26 67 74 3b 53 6f 6d 65  , "&lt;p&gt;Some
0100: 20 26 6c 74 3b 62 26 67 74 3b 76 61 6c 69 64 26   &lt;b&gt;valid&
0110: 6c 74 3b 2f 62 26 67 74 3b 20 48 54 4d 4c 26 6c  lt;/b&gt; HTML&l
0120: 74 3b 2f 70 26 67 74 3b 22 29 3b 0a 09 4f 6b 28  t;/p&gt;");..Ok(
0130: 28 29 29 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66  ()).}..#[test].f
0140: 6e 20 74 65 73 74 5f 76 61 6c 69 64 61 74 65 5f  n test_validate_
0150: 63 6c 6f 73 69 6e 67 5f 74 61 67 28 29 20 2d 3e  closing_tag() ->
0160: 20 52 65 73 75 6c 74 3c 28 29 3e 20 7b 0a 09 6c   Result<()> {..l
0170: 65 74 20 68 74 6d 6c 20 3d 20 22 3c 70 3e 53 6f  et html = "<p>So
0180: 6d 65 20 3c 62 3e 76 61 6c 69 64 3c 2f 62 3e 20  me <b>valid</b> 
0190: 48 54 4d 4c 3c 2f 70 3e 3c 2f 63 6f 64 65 3e 3c  HTML</p></code><
01a0: 61 20 68 72 65 66 3d 27 68 74 74 70 3a 2f 2f 73  a href='http://s
01b0: 6f 6d 65 77 65 72 65 2e 63 6f 6d 27 3e 4c 69 6e  omewere.com'>Lin
01c0: 6b 20 69 6e 6a 65 63 74 69 6f 6e 21 3c 2f 61 3e  k injection!</a>
01d0: 22 3b 0a 09 61 73 73 65 72 74 21 28 76 61 6c 69  ";..assert!(vali
01e0: 64 61 74 65 28 68 74 6d 6c 29 2e 69 73 5f 65 72  date(html).is_er
01f0: 72 28 29 29 3b 0a 20 20 20 20 61 73 73 65 72 74  r());.    assert
0200: 21 28 76 61 6c 69 64 61 74 65 28 22 3c 2f 70 72  !(validate("</pr
0210: 65 3e 22 29 2e 69 73 5f 65 72 72 28 29 29 3b 0a  e>").is_err());.
0220: 20 20 20 20 61 73 73 65 72 74 21 28 76 61 6c 69      assert!(vali
0230: 64 61 74 65 28 22 3c 2f 63 6f 64 65 3e 22 29 2e  date("</code>").
0240: 69 73 5f 65 72 72 28 29 29 3b 0a 20 20 20 20 61  is_err());.    a
0250: 73 73 65 72 74 21 28 76 61 6c 69 64 61 74 65 28  ssert!(validate(
0260: 22 3c 2f 70 72 65 3e 5c 6e 22 29 2e 69 73 5f 65  "</pre>\n").is_e
0270: 72 72 28 29 29 3b 0a 20 20 20 20 61 73 73 65 72  rr());.    asser
0280: 74 21 28 76 61 6c 69 64 61 74 65 28 22 3c 2f 63  t!(validate("</c
0290: 6f 64 65 3e 5c 74 22 29 2e 69 73 5f 65 72 72 28  ode>\t").is_err(
02a0: 29 29 3b 0a 09 4f 6b 28 28 29 29 0a 7d 0a 0a 23  ));..Ok(()).}..#
02b0: 5b 74 65 73 74 5d 0a 66 6e 20 74 65 73 74 5f 76  [test].fn test_v
02c0: 61 6c 69 64 61 74 65 5f 65 6d 70 74 79 5f 73 74  alidate_empty_st
02d0: 72 69 6e 67 28 29 20 2d 3e 20 52 65 73 75 6c 74  ring() -> Result
02e0: 3c 28 29 3e 20 7b 0a 09 61 73 73 65 72 74 5f 65  <()> {..assert_e
02f0: 71 21 28 76 61 6c 69 64 61 74 65 28 22 22 29 2e  q!(validate("").
0300: 75 6e 77 72 61 70 28 29 2c 20 22 22 29 3b 0a 09  unwrap(), "");..
0310: 4f 6b 28 28 29 29 0a 7d 0a 0a 23 5b 74 65 73 74  Ok(()).}..#[test
0320: 5d 0a 66 6e 20 74 65 73 74 5f 76 61 6c 69 64 61  ].fn test_valida
0330: 74 65 5f 77 68 69 74 65 73 70 61 63 65 28 29 20  te_whitespace() 
0340: 2d 3e 20 52 65 73 75 6c 74 3c 28 29 3e 20 7b 0a  -> Result<()> {.
0350: 09 61 73 73 65 72 74 5f 65 71 21 28 76 61 6c 69  .assert_eq!(vali
0360: 64 61 74 65 28 22 20 20 20 5c 74 5c 6e 22 29 2e  date("   \t\n").
0370: 75 6e 77 72 61 70 28 29 2c 20 22 20 20 20 5c 74  unwrap(), "   \t
0380: 5c 6e 22 29 3b 20 2f 2f 20 6e 6f 20 65 73 63 61  \n"); // no esca
0390: 70 69 6e 67 20 66 6f 72 20 77 68 69 74 65 73 70  ping for whitesp
03a0: 61 63 65 0a 09 4f 6b 28 28 29 29 0a 7d 0a 0a 23  ace..Ok(()).}..#
03b0: 5b 74 65 73 74 5d 0a 66 6e 20 74 65 73 74 5f 72  [test].fn test_r
03c0: 65 67 65 78 5f 63 6c 6f 73 69 6e 67 5f 74 61 67  egex_closing_tag
03d0: 5f 6d 61 74 63 68 65 73 28 29 20 7b 0a 09 61 73  _matches() {..as
03e0: 73 65 72 74 21 28 52 45 5f 43 4c 4f 53 49 4e 47  sert!(RE_CLOSING
03f0: 2e 69 73 5f 6d 61 74 63 68 28 22 3c 2f 70 72 65  .is_match("</pre
0400: 3e 22 29 29 3b 0a 09 61 73 73 65 72 74 21 28 52  >"));..assert!(R
0410: 45 5f 43 4c 4f 53 49 4e 47 2e 69 73 5f 6d 61 74  E_CLOSING.is_mat
0420: 63 68 28 22 3c 2f 63 6f 64 65 3e 5c 74 3e 22 29  ch("</code>\t>")
0430: 29 3b 0a 09 61 73 73 65 72 74 21 28 21 52 45 5f  );..assert!(!RE_
0440: 43 4c 4f 53 49 4e 47 2e 69 73 5f 6d 61 74 63 68  CLOSING.is_match
0450: 28 22 3c 2f 64 69 76 3e 22 29 29 3b 20 2f 2f 20  ("</div>")); // 
0460: 4e 6f 74 20 61 20 70 72 65 2f 63 6f 64 65 20 74  Not a pre/code t
0470: 61 67 0a 7d 0a 0a 23 5b 74 65 73 74 5d 0a 66 6e  ag.}..#[test].fn
0480: 20 74 65 73 74 5f 72 65 67 65 78 5f 64 6f 6d 61   test_regex_doma
0490: 69 6e 5f 6d 61 74 63 68 65 73 28 29 20 7b 0a 09  in_matches() {..
04a0: 61 73 73 65 72 74 21 28 52 45 5f 44 4f 4d 41 49  assert!(RE_DOMAI
04b0: 4e 2e 69 73 5f 6d 61 74 63 68 28 22 65 78 61 6d  N.is_match("exam
04c0: 70 6c 65 2e 63 6f 6d 22 29 29 3b 0a 09 61 73 73  ple.com"));..ass
04d0: 65 72 74 21 28 52 45 5f 44 4f 4d 41 49 4e 2e 69  ert!(RE_DOMAIN.i
04e0: 73 5f 6d 61 74 63 68 28 22 73 75 62 2e 65 78 61  s_match("sub.exa
04f0: 6d 70 6c 65 2e 63 6f 2e 75 6b 22 29 29 3b 0a 09  mple.co.uk"));..
0500: 61 73 73 65 72 74 21 28 21 52 45 5f 44 4f 4d 41  assert!(!RE_DOMA
0510: 49 4e 2e 69 73 5f 6d 61 74 63 68 28 22 69 6e 76  IN.is_match("inv
0520: 61 6c 69 64 40 64 6f 6d 61 69 6e 2e 63 6f 6d 22  alid@domain.com"
0530: 29 29 3b 0a 7d 0a                                ));.}.