1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/js1_5/Regress/regress-511859.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,150 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +/* 1.10 + * 1.11 + * Date: 22 Aug 2009 1.12 + * SUMMARY: Utf8ToOneUcs4Char in jsstr.cpp ,overlong UTF-8 seqence detection problem 1.13 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=511859 1.14 + * 1.15 + */ 1.16 +//----------------------------------------------------------------------------- 1.17 +var UBound = 0; 1.18 +var BUGNUMBER = 511859; 1.19 +var summary = 'Utf8ToOneUcs4Char in jsstr.cpp ,overlong UTF-8 seqence detection problem'; 1.20 +var status = ''; 1.21 +var statusitems = []; 1.22 +var actual = ''; 1.23 +var actualvalues = []; 1.24 +var expect = ''; 1.25 +var expectedvalues = []; 1.26 +var arg; 1.27 +/* 1.28 + * The patch for http://bugzilla.mozilla.org/show_bug.cgi?id=511859 1.29 + * defined this value to be the result of an overlong UTF-8 sequence - 1.30 + */ 1.31 + 1.32 +var EX="(Exception thrown)"; 1.33 + 1.34 +function getActual(s) 1.35 +{ 1.36 + try { 1.37 + return decodeURI(s); 1.38 + } catch (e) { 1.39 + return EX; 1.40 + } 1.41 +} 1.42 + 1.43 +//Phase1: overlong sequences 1.44 +expect = EX; 1.45 +arg = "%C1%BF"; 1.46 +status = "Overlong 2byte U+7f :" + arg; 1.47 +actual = getActual(arg); 1.48 +addThis(); 1.49 + 1.50 +arg = "%E0%9F%BF"; 1.51 +status = "Overlong 3byte U+7ff :" + arg; 1.52 +actual = getActual(arg); 1.53 +addThis(); 1.54 + 1.55 +arg = "%F0%88%80%80"; 1.56 +status = "Overlong 4byte U+8000 :" + arg; 1.57 +actual = getActual(arg); 1.58 +addThis(); 1.59 + 1.60 +arg = "%F0%8F%BF%BF"; 1.61 +status = "Overlong 4byte U+ffff :" + arg; 1.62 +actual = getActual(arg); 1.63 +addThis(); 1.64 + 1.65 +arg = "%F0%80%C0%80%80"; 1.66 +status = "Overlong 5byte U+20000 :" + arg; 1.67 +actual = getActual(arg); 1.68 +addThis(); 1.69 + 1.70 +arg = "%F8%84%8F%BF%BF"; 1.71 +status = "Overlong 5byte U+10FFFF :" + arg; 1.72 +actual = getActual(arg); 1.73 +addThis(); 1.74 + 1.75 +arg = "%FC%80%84%8F%BF%BF"; 1.76 +status = "Overlong 6byte U+10FFFF :" + arg; 1.77 +actual = getActual(arg); 1.78 +addThis(); 1.79 + 1.80 +//Phase 2:Out of Unicode range 1.81 +arg = "%F4%90%80%80%80"; 1.82 +status = "4byte 0x110000 :" + arg; 1.83 +actual = getActual(arg); 1.84 +addThis(); 1.85 +arg = "%F8%84%90%80%80"; 1.86 +status = "5byte 0x110000 :" + arg; 1.87 +actual = getActual(arg); 1.88 +addThis(); 1.89 + 1.90 +arg = "%FC%80%84%90%80%80"; 1.91 +status = "6byte 0x110000 :" + arg; 1.92 +actual = getActual(arg); 1.93 +addThis(); 1.94 + 1.95 +//Phase 3:Valid sequences must be decoded correctly 1.96 +arg = "%7F"; 1.97 +status = "valid sequence U+7F :" + arg; 1.98 +actual = getActual("%7F"); 1.99 +expect = "\x7f"; 1.100 +addThis(); 1.101 + 1.102 +arg = "%C2%80"; 1.103 +status = "valid sequence U+80 :" + arg; 1.104 +actual = getActual(arg); 1.105 +expect = "\x80"; 1.106 +addThis(); 1.107 + 1.108 +arg = "%E0%A0%80"; 1.109 +status = "valid sequence U+800 :" + arg; 1.110 +actual = getActual("%E0%A0%80"); 1.111 +expect = "\u0800"; 1.112 +addThis(); 1.113 + 1.114 +arg = "%F0%90%80%80" 1.115 +status = "valid sequence U+10000 :" + arg; 1.116 +actual = getActual(arg); 1.117 +expect = "\uD800\uDC00"; 1.118 +addThis(); 1.119 + 1.120 +arg = "%F4%8F%BF%BF"; 1.121 +status = "valid sequence U+10FFFF :" + arg; 1.122 +actual = getActual(arg); 1.123 +expect = "\uDBFF\uDFFF"; 1.124 +addThis(); 1.125 + 1.126 +//----------------------------------------------------------------------------- 1.127 +test(); 1.128 +//----------------------------------------------------------------------------- 1.129 + 1.130 + 1.131 + 1.132 +function addThis() 1.133 +{ 1.134 + statusitems[UBound] = status; 1.135 + actualvalues[UBound] = actual; 1.136 + expectedvalues[UBound] = expect; 1.137 + UBound++; 1.138 +} 1.139 + 1.140 + 1.141 +function test() 1.142 +{ 1.143 + enterFunc('test'); 1.144 + printBugNumber(BUGNUMBER); 1.145 + printStatus(summary); 1.146 + 1.147 + for (var i=0; i<UBound; i++) 1.148 + { 1.149 + reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]); 1.150 + } 1.151 + 1.152 + exitFunc('test'); 1.153 +}