File: location-protocol-setter.html

package info (click to toggle)
thunderbird 1%3A68.10.0-1~deb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 2,754,812 kB
  • sloc: cpp: 5,411,679; javascript: 4,161,772; ansic: 2,639,702; python: 763,064; java: 346,606; xml: 266,623; asm: 265,884; sh: 117,270; lisp: 41,340; makefile: 23,560; perl: 18,042; objc: 5,277; yacc: 1,778; ada: 1,681; pascal: 1,673; lex: 1,417; cs: 879; exp: 527; awk: 495; php: 436; ruby: 221; sed: 69; csh: 27
file content (106 lines) | stat: -rw-r--r-- 2,037 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<!doctype html>
<title>Set location.protocol to broken schemes</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<iframe src="data:text/html,<script>
onmessage = (e) => {
  let results = [];
  e.data.forEach((val) => {
    try {
      location.protocol = val;
      results.push('failure')
    } catch(e) {
      results.push(e.name)
    }
  });
  parent.postMessage(results, '*')
}
</script>"></iframe>
<iframe srcdoc="<script>
onmessage = (e) => {
  let results = [];
  e.data.forEach((val) => {
    try {
      location.protocol = val;
      results.push('failure')
    } catch(e) {
      results.push(e.name)
    }
  });
  parent.postMessage(results, '*')
}
</script>"></iframe>
<script>
  let broken = [
    '\x00',
    '\x01',
    '\x0A',
    '\x20',
    '\x21',
    '\x7F',
    '\x80',
    '\xFF',
    ':',
    '†',
    '\x00x',
    '\x01x',
    '\x0Ax',
    '\x20x',
    '\x21x',
    '\x7Fx',
    '\x80x',
    '\xFFx',
    ':x',
    '†x',
    '\x00X',
    '\x01X',
    '\x0AX',
    '\x20X',
    '\x21X',
    '\x7FX',
    '\x80X',
    '\xFFX',
    ':X',
    '†X',
    'x\x00',
    'x\x01',
    'x\x0A',
    'x\x20',
    'x\x21',
    'x\x7F',
    'x\x80',
    'x\xFF',
    'x†',
    'X\x00',
    'X\x01',
    'X\x0A',
    'X\x20',
    'X\x21',
    'X\x7F',
    'X\x80',
    'X\xFF',
    'X†',
    'a\x0A',
    'a+-.\x0A'
  ]
  ;broken.forEach((val) => {
    test(() => {
      assert_throws("SyntaxError", () => { location.protocol = val })
    }, encodeURI(val) + " (percent-encoded) is not a scheme")
  })
  let c = 0
  async_test((t) => {
    self.onload = t.step_func(() => {
      self.onmessage = t.step_func((e) => {
        assert_array_equals(e.data, ("SyntaxError ".repeat(49) + "SyntaxError").split(" "))
        c++
        if(c === 2) {
          t.done()
        }
      })
      self[0].postMessage(broken, "*")
      self[1].postMessage(broken, "*")
    })
  }, "Equivalent tests for data URL and srcdoc <iframe>s")
</script>