js/src/tests/ecma_3/RegExp/regress-223273.js

Sat, 03 Jan 2015 20:18:00 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Sat, 03 Jan 2015 20:18:00 +0100
branch
TOR_BUG_3246
changeset 7
129ffea94266
permissions
-rw-r--r--

Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.

     1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
     2 /* This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 /*
     7  *
     8  * Date:    23 October 2003
     9  * SUMMARY: Unescaped, unbalanced parens in a regexp should cause SyntaxError.
    10  *
    11  * The same would also be true for unescaped, unbalanced brackets or braces
    12  * if we followed the ECMA-262 Ed. 3 spec on this. But it was decided for
    13  * backward compatibility reasons to follow Perl 5, which permits
    14  *
    15  * 1. an unescaped, unbalanced right bracket ]
    16  * 2. an unescaped, unbalanced left brace    {
    17  * 3. an unescaped, unbalanced right brace   }
    18  *
    19  * If any of these should occur, Perl treats each as a literal
    20  * character.  Therefore we permit all three of these cases, even
    21  * though not ECMA-compliant.  Note Perl errors on an unescaped,
    22  * unbalanced left bracket; so will we.
    23  *
    24  * See http://bugzilla.mozilla.org/show_bug.cgi?id=223273
    25  *
    26  */
    27 //-----------------------------------------------------------------------------
    28 var UBound = 0;
    29 var BUGNUMBER = 223273;
    30 var summary = 'Unescaped, unbalanced parens in regexp should be a SyntaxError';
    31 var TEST_PASSED = 'SyntaxError';
    32 var TEST_FAILED = 'Generated an error, but NOT a SyntaxError!';
    33 var TEST_FAILED_BADLY = 'Did not generate ANY error!!!';
    34 var CHECK_PASSED = 'Should not generate an error';
    35 var CHECK_FAILED = 'Generated an error!';
    36 var status = '';
    37 var statusitems = [];
    38 var actual = '';
    39 var actualvalues = [];
    40 var expect= '';
    41 var expectedvalues = [];
    44 /*
    45  * All the following contain unescaped, unbalanced parens and
    46  * should generate SyntaxErrors. That's what we're testing for.
    47  *
    48  * To allow the test to compile and run, we have to hide the errors
    49  * inside eval strings, and check they are caught at run-time.
    50  *
    51  * Inside such strings, remember to escape any escape character!
    52  */
    53 status = inSection(1);
    54 testThis(' /(/ ');
    56 status = inSection(2);
    57 testThis(' /)/ ');
    59 status = inSection(3);
    60 testThis(' /(abc\\)def(g/ ');
    62 status = inSection(4);
    63 testThis(' /\\(abc)def)g/ ');
    66 /*
    67  * These regexp patterns are correct and should not generate
    68  * any errors. Note we use checkThis() instead of testThis().
    69  */
    70 status = inSection(5);
    71 checkThis(' /\\(/ ');
    73 status = inSection(6);
    74 checkThis(' /\\)/ ');
    76 status = inSection(7);
    77 checkThis(' /(abc)def\\(g/ ');
    79 status = inSection(8);
    80 checkThis(' /(abc\\)def)g/ ');
    82 status = inSection(9);
    83 checkThis(' /(abc(\\))def)g/ ');
    85 status = inSection(10);
    86 checkThis(' /(abc([x\\)yz]+)def)g/ ');
    90 /*
    91  * Unescaped, unbalanced left brackets should be a SyntaxError
    92  */
    93 status = inSection(11);
    94 testThis(' /[/ ');
    96 status = inSection(12);
    97 testThis(' /[abc\\]def[g/ ');
   100 /*
   101  * We permit unescaped, unbalanced right brackets, as does Perl.
   102  * No error should result, even though this is not ECMA-compliant.
   103  * Note we use checkThis() instead of testThis().
   104  */
   105 status = inSection(13);
   106 checkThis(' /]/ ');
   108 status = inSection(14);
   109 checkThis(' /\\[abc]def]g/ ');
   112 /*
   113  * These regexp patterns are correct and should not generate
   114  * any errors. Note we use checkThis() instead of testThis().
   115  */
   116 status = inSection(15);
   117 checkThis(' /\\[/ ');
   119 status = inSection(16);
   120 checkThis(' /\\]/ ');
   122 status = inSection(17);
   123 checkThis(' /[abc]def\\[g/ ');
   125 status = inSection(18);
   126 checkThis(' /[abc\\]def]g/ ');
   128 status = inSection(19);
   129 checkThis(' /(abc[\\]]def)g/ ');
   131 status = inSection(20);
   132 checkThis(' /[abc(x\\]yz+)def]g/ ');
   136 /*
   137  * Run some tests for unbalanced braces. We again follow Perl, and
   138  * thus permit unescaped unbalanced braces - both left and right,
   139  * even though this is not ECMA-compliant.
   140  *
   141  * Note we use checkThis() instead of testThis().
   142  */
   143 status = inSection(21);
   144 checkThis(' /abc{def/ ');
   146 status = inSection(22);
   147 checkThis(' /abc}def/ ');
   149 status = inSection(23);
   150 checkThis(' /a{2}bc{def/ ');
   152 status = inSection(24);
   153 checkThis(' /a}b{3}c}def/ ');
   156 /*
   157  * These regexp patterns are correct and should not generate
   158  * any errors. Note we use checkThis() instead of testThis().
   159  */
   160 status = inSection(25);
   161 checkThis(' /abc\\{def/ ');
   163 status = inSection(26);
   164 checkThis(' /abc\\}def/ ');
   166 status = inSection(27);
   167 checkThis(' /a{2}bc\\{def/ ');
   169 status = inSection(28);
   170 checkThis(' /a\\}b{3}c\\}def/ ');
   175 //-----------------------------------------------------------------------------
   176 test();
   177 //-----------------------------------------------------------------------------
   182 /*
   183  * Invalid syntax should generate a SyntaxError
   184  */
   185 function testThis(sInvalidSyntax)
   186 {
   187   expect = TEST_PASSED;
   188   actual = TEST_FAILED_BADLY;
   190   try
   191   {
   192     eval(sInvalidSyntax);
   193   }
   194   catch(e)
   195   {
   196     if (e instanceof SyntaxError)
   197       actual = TEST_PASSED;
   198     else
   199       actual = TEST_FAILED;
   200   }
   202   statusitems[UBound] = status;
   203   expectedvalues[UBound] = expect;
   204   actualvalues[UBound] = actual;
   205   UBound++;
   206 }
   209 /*
   210  * Valid syntax shouldn't generate any errors
   211  */
   212 function checkThis(sValidSyntax)
   213 {
   214   expect = CHECK_PASSED;
   215   actual = CHECK_PASSED;
   217   try
   218   {
   219     eval(sValidSyntax);
   220   }
   221   catch(e)
   222   {
   223     actual = CHECK_FAILED;
   224   }
   226   statusitems[UBound] = status;
   227   expectedvalues[UBound] = expect;
   228   actualvalues[UBound] = actual;
   229   UBound++;
   230 }
   233 function test()
   234 {
   235   enterFunc('test');
   236   printBugNumber(BUGNUMBER);
   237   printStatus(summary);
   239   for (var i=0; i<UBound; i++)
   240   {
   241     reportCompare(expectedvalues[i], actualvalues[i], statusitems[i]);
   242   }
   244   exitFunc ('test');
   245 }

mercurial