Previously, setting `innerHTML` was used to display the statuses. These could include content communicated from the remote VNC server, allowing the remove VNC server to inject HTML into the noVNC page. This commit switches all uses of `innerHTML` to use `textContent`, which is not vulnerable to the HTML injection.
92 lines
3.1 KiB
HTML
92 lines
3.1 KiB
HTML
<!DOCTYPE html>
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<title>Native Base64 Tests</title>
|
|
<script src="../include/util.js"></script>
|
|
<script src="../include/webutil.js"></script>
|
|
<script src="../include/base64.js"></script>
|
|
</head>
|
|
<body>
|
|
<h1>Native Base64 Tests</h1>
|
|
|
|
<br>
|
|
Messages:<br>
|
|
<textarea id="debug" style="font-size: 9px;" cols=80 rows=25></textarea>
|
|
|
|
<br>
|
|
</body>
|
|
|
|
<script>
|
|
function debug(str) {
|
|
console.log(str);
|
|
cell = $D('debug');
|
|
cell.textContent += str + "\n";
|
|
cell.scrollTop = cell.scrollHeight;
|
|
}
|
|
|
|
function assertRun(code, result) {
|
|
try {
|
|
var actual = eval(code);
|
|
} catch (exc) {
|
|
debug("FAIL: '" + code + "' threw an exception");
|
|
fail += 1;
|
|
return false;
|
|
}
|
|
if (actual !== result) {
|
|
debug("FAIL: '" + code + "' returned '" + actual + "', expected '" + result + "'");
|
|
fail += 1;
|
|
return false;
|
|
}
|
|
debug("PASS: '" + code + "' returned expected '" + result +"'");
|
|
pass += 1;
|
|
return true;
|
|
}
|
|
|
|
function Base64_decode(data) {
|
|
var arr = Base64.decode (data);
|
|
return arr.map(function (num) {
|
|
return String.fromCharCode(num); } ).join('');
|
|
|
|
}
|
|
|
|
window.onload = function() {
|
|
var str;
|
|
debug('onload');
|
|
fail = 0;
|
|
pass = 0;
|
|
assertRun('window.btoa("hello world")', 'aGVsbG8gd29ybGQ=');
|
|
assertRun('window.btoa("a")', 'YQ==');
|
|
assertRun('window.btoa("ab")', 'YWI=');
|
|
assertRun('window.btoa("abc")', 'YWJj');
|
|
assertRun('window.btoa("abcd")', 'YWJjZA==');
|
|
assertRun('window.btoa("abcde")', 'YWJjZGU=');
|
|
assertRun('window.btoa("abcdef")', 'YWJjZGVm');
|
|
assertRun('window.btoa("abcdefg")', 'YWJjZGVmZw==');
|
|
assertRun('window.btoa("abcdefgh")', 'YWJjZGVmZ2g=');
|
|
|
|
assertRun('window.atob("aGVsbG8gd29ybGQ=")', 'hello world');
|
|
assertRun('Base64_decode("aGVsbG8gd29ybGQ=")', 'hello world');
|
|
assertRun('window.atob("YQ==")', 'a');
|
|
assertRun('Base64_decode("YQ==")', 'a');
|
|
assertRun('window.atob("YWI=")', 'ab');
|
|
assertRun('Base64_decode("YWI=")', 'ab');
|
|
assertRun('window.atob("YWJj")', 'abc');
|
|
assertRun('Base64_decode("YWJj")', 'abc');
|
|
assertRun('window.atob("YWJjZA==")', 'abcd');
|
|
assertRun('Base64_decode("YWJjZA==")', 'abcd');
|
|
assertRun('window.atob("YWJjZGU=")', 'abcde');
|
|
assertRun('Base64_decode("YWJjZGU=")', 'abcde');
|
|
assertRun('window.atob("YWJjZGVm")', 'abcdef');
|
|
assertRun('Base64_decode("YWJjZGVm")', 'abcdef');
|
|
|
|
assertRun('typeof window.btoa', 'function');
|
|
assertRun('window.btoa("")', '');
|
|
assertRun('window.btoa(null)', '');
|
|
assertRun('window.atob(window.btoa(window))', window.toString()); // "[object DOMWindow]"
|
|
assertRun('window.btoa("\\u0080\\u0081")', 'gIE=');
|
|
|
|
debug("Tests failed: " + fail);
|
|
debug("Tests passed: " + pass);
|
|
}
|
|
</script>
|