| <!DOCTYPE html> | |
| <head> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| </head> | |
| <body> | |
| <div><a></a></div> | |
| <script> | |
| var whitespaces = [ | |
| "1680", "2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", | |
| "2008", "2009", "200a", "2028", "205f", "3000" | |
| ]; | |
| for (var i = 0; i < whitespaces.length; i++) { | |
| var container = document.querySelector('a').parentNode; | |
| var entity = `&#x${whitespaces[i]};`; | |
| var character = String.fromCharCode(parseInt(whitespaces[i], 16)); | |
| var url = encodeURIComponent(character); | |
| container.innerHTML = `<a href="${entity}javascript:alert(1)">Link</a>`; | |
| var a = document.querySelector('a'); | |
| test(_ => { | |
| assert_equals( | |
| container.innerHTML, | |
| `<a href="${character}javascript:alert(1)">Link</a>`); | |
| }, `innerHTML before setter: ${whitespaces[i]}`); | |
| test(_ => { | |
| assert_equals( | |
| a.href, | |
| `http://{{host}}:{{ports[http][0]}}/domparsing/${url}javascript:alert(1)`); | |
| }, `href before setter: ${whitespaces[i]}`); | |
| a.parentNode.innerHTML += 'foo'; | |
| a = document.querySelector('a'); | |
| test(_ => { | |
| assert_equals( | |
| container.innerHTML, | |
| `<a href="${character}javascript:alert(1)">Link</a>foo`); | |
| }, `innerHTML after setter: ${whitespaces[i]}`); | |
| test(_ => { | |
| assert_equals( | |
| a.href, | |
| `http://{{host}}:{{ports[http][0]}}/domparsing/${url}javascript:alert(1)`); | |
| }, `href after setter: ${whitespaces[i]}`); | |
| } | |
| </script> | |
| </body> |