blob: f2a99de9b7ba36e45b1f5567ab9dbc3918c95d21 [file] [log] [blame]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
// Ranges of valid hexadecimal characters
var v0 = 48, v9 = 57, vA = 65, vZ = 90, va = 97, vz = 122;
var nonHexWideCharValues =
[
// These characters are just outside the boundaries for hexadecimal characters
v0 - 1, v9 + 1,
vA - 1, vZ + 1,
va - 1, vz + 1,
// Some of these non-ASCII characters may map to a hexadecimal digit. However, we still should not accept them since they
// are not hexadecimal characters in the ASCII set.
65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303,
65304, 65305, 65313, 65314, 65315, 65316, 65317, 65318,
65345, 65346, 65347, 65348, 65349, 65350
];
writeLine("First character invalid in %-encoded URI component:");
for (var i in nonHexWideCharValues)
{
var testResult = " " + nonHexWideCharValues[i] + ": ";
try
{
decodeURIComponent("%" + String.fromCharCode(nonHexWideCharValues[i]) + "0");
testResult += "Fail (no exception)";
}
catch (ex)
{
testResult += "Pass (" + ex.name + ": " + ex.message + ")";
}
writeLine(testResult);
}
writeLine("");
writeLine("Second character invalid in %-encoded URI component:");
for (var i in nonHexWideCharValues)
{
var testResult = " " + nonHexWideCharValues[i] + ": ";
try
{
decodeURIComponent("%0" + String.fromCharCode(nonHexWideCharValues[i]));
testResult += "Fail (no exception)";
}
catch (ex)
{
testResult += "Pass (" + ex.name + ": " + ex.message + ")";
}
writeLine(testResult);
}
writeLine("");
// Helpers
function writeLine(str)
{
WScript.Echo("" + str);
}