1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_3/extensions/regress-103087.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,144 @@ 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 + * Date: 04 October 2001 1.11 + * 1.12 + * SUMMARY: Arose from Bugzilla bug 103087: 1.13 + * "The RegExp MarkupSPE in demo crashes Mozilla" 1.14 + * 1.15 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=103087 1.16 + * The SpiderMonkey shell crashed on some of these regexps. 1.17 + * 1.18 + * The reported crash was on i=24 below ('MarkupSPE' regexp) 1.19 + * I crashed on that, and also on i=43 ('XML_SPE' regexp) 1.20 + */ 1.21 +//----------------------------------------------------------------------------- 1.22 +var UBound = 0; 1.23 +var BUGNUMBER = 103087; 1.24 +var summary = "Testing that we don't crash on any of these regexps -"; 1.25 +var re = ''; 1.26 +var lm = ''; 1.27 +var lc = ''; 1.28 +var rc = ''; 1.29 + 1.30 + 1.31 +// the regexps are built in pieces - 1.32 +var NameStrt = "[A-Za-z_:]|[^\\x00-\\x7F]"; 1.33 +var NameChar = "[A-Za-z0-9_:.-]|[^\\x00-\\x7F]"; 1.34 +var Name = "(" + NameStrt + ")(" + NameChar + ")*"; 1.35 +var TextSE = "[^<]+"; 1.36 +var UntilHyphen = "[^-]*-"; 1.37 +var Until2Hyphens = UntilHyphen + "([^-]" + UntilHyphen + ")*-"; 1.38 +var CommentCE = Until2Hyphens + ">?"; 1.39 +var UntilRSBs = "[^]]*]([^]]+])*]+"; 1.40 +var CDATA_CE = UntilRSBs + "([^]>]" + UntilRSBs + ")*>"; 1.41 +var S = "[ \\n\\t\\r]+"; 1.42 +var QuoteSE = '"[^"]' + "*" + '"' + "|'[^']*'"; 1.43 +var DT_IdentSE = S + Name + "(" + S + "(" + Name + "|" + QuoteSE + "))*"; 1.44 +var MarkupDeclCE = "([^]\"'><]+|" + QuoteSE + ")*>"; 1.45 +var S1 = "[\\n\\r\\t ]"; 1.46 +var UntilQMs = "[^?]*\\?+"; 1.47 +var PI_Tail = "\\?>|" + S1 + UntilQMs + "([^>?]" + UntilQMs + ")*>"; 1.48 +var DT_ItemSE = "<(!(--" + Until2Hyphens + ">|[^-]" + MarkupDeclCE + ")|\\?" + Name + "(" + PI_Tail + "))|%" + Name + ";|" + S; 1.49 +var DocTypeCE = DT_IdentSE + "(" + S + ")?(\\[(" + DT_ItemSE + ")*](" + S + ")?)?>?"; 1.50 +var DeclCE = "--(" + CommentCE + ")?|\\[CDATA\\[(" + CDATA_CE + ")?|DOCTYPE(" + DocTypeCE + ")?"; 1.51 +var PI_CE = Name + "(" + PI_Tail + ")?"; 1.52 +var EndTagCE = Name + "(" + S + ")?>?"; 1.53 +var AttValSE = '"[^<"]' + "*" + '"' + "|'[^<']*'"; 1.54 +var ElemTagCE = Name + "(" + S + Name + "(" + S + ")?=(" + S + ")?(" + AttValSE + "))*(" + S + ")?/?>?"; 1.55 +var MarkupSPE = "<(!(" + DeclCE + ")?|\\?(" + PI_CE + ")?|/(" + EndTagCE + ")?|(" + ElemTagCE + ")?)"; 1.56 +var XML_SPE = TextSE + "|" + MarkupSPE; 1.57 +var CommentRE = "<!--" + Until2Hyphens + ">"; 1.58 +var CommentSPE = "<!--(" + CommentCE + ")?"; 1.59 +var PI_RE = "<\\?" + Name + "(" + PI_Tail + ")"; 1.60 +var Erroneous_PI_SE = "<\\?[^?]*(\\?[^>]+)*\\?>"; 1.61 +var PI_SPE = "<\\?(" + PI_CE + ")?"; 1.62 +var CDATA_RE = "<!\\[CDATA\\[" + CDATA_CE; 1.63 +var CDATA_SPE = "<!\\[CDATA\\[(" + CDATA_CE + ")?"; 1.64 +var ElemTagSE = "<(" + NameStrt + ")([^<>\"']+|" + AttValSE + ")*>"; 1.65 +var ElemTagRE = "<" + Name + "(" + S + Name + "(" + S + ")?=(" + S + ")?(" + AttValSE + "))*(" + S + ")?/?>"; 1.66 +var ElemTagSPE = "<" + ElemTagCE; 1.67 +var EndTagRE = "</" + Name + "(" + S + ")?>"; 1.68 +var EndTagSPE = "</(" + EndTagCE + ")?"; 1.69 +var DocTypeSPE = "<!DOCTYPE(" + DocTypeCE + ")?"; 1.70 +var PERef_APE = "%(" + Name + ";?)?"; 1.71 +var HexPart = "x([0-9a-fA-F]+;?)?"; 1.72 +var NumPart = "#([0-9]+;?|" + HexPart + ")?"; 1.73 +var CGRef_APE = "&(" + Name + ";?|" + NumPart + ")?"; 1.74 +var Text_PE = CGRef_APE + "|[^&]+"; 1.75 +var EntityValue_PE = CGRef_APE + "|" + PERef_APE + "|[^%&]+"; 1.76 + 1.77 + 1.78 +var rePatterns = new Array(AttValSE, CDATA_CE, CDATA_RE, CDATA_SPE, CGRef_APE, CommentCE, CommentRE, CommentSPE, DT_IdentSE, DT_ItemSE, DeclCE, DocTypeCE, DocTypeSPE, ElemTagCE, ElemTagRE, ElemTagSE, ElemTagSPE, EndTagCE, EndTagRE, EndTagSPE, EntityValue_PE, Erroneous_PI_SE, HexPart, MarkupDeclCE, MarkupSPE, Name, NameChar, NameStrt, NumPart, PERef_APE, PI_CE, PI_RE, PI_SPE, PI_Tail, QuoteSE, S, S1, TextSE, Text_PE, Until2Hyphens, UntilHyphen, UntilQMs, UntilRSBs, XML_SPE); 1.79 + 1.80 + 1.81 +// here's a big string to test the regexps on - 1.82 +var str = ''; 1.83 +str += '<html xmlns="http://www.w3.org/1999/xhtml"' + '\n'; 1.84 +str += ' xmlns:xlink="http://www.w3.org/XML/XLink/0.9">' + '\n'; 1.85 +str += ' <head><title>Three Namespaces</title></head>' + '\n'; 1.86 +str += ' <body>' + '\n'; 1.87 +str += ' <h1 align="center">An Ellipse and a Rectangle</h1>' + '\n'; 1.88 +str += ' <svg xmlns="http://www.w3.org/Graphics/SVG/SVG-19991203.dtd" ' + '\n'; 1.89 +str += ' width="12cm" height="10cm">' + '\n'; 1.90 +str += ' <ellipse rx="110" ry="130" />' + '\n'; 1.91 +str += ' <rect x="4cm" y="1cm" width="3cm" height="6cm" />' + '\n'; 1.92 +str += ' </svg>' + '\n'; 1.93 +str += ' <p xlink:type="simple" xlink:href="ellipses.html">' + '\n'; 1.94 +str += ' More about ellipses' + '\n'; 1.95 +str += ' </p>' + '\n'; 1.96 +str += ' <p xlink:type="simple" xlink:href="rectangles.html">' + '\n'; 1.97 +str += ' More about rectangles' + '\n'; 1.98 +str += ' </p>' + '\n'; 1.99 +str += ' <hr/>' + '\n'; 1.100 +str += ' <p>Last Modified February 13, 2000</p> ' + '\n'; 1.101 +str += ' </body>' + '\n'; 1.102 +str += '</html>'; 1.103 + 1.104 + 1.105 + 1.106 +//----------------------------------------------------------------------------- 1.107 +test(); 1.108 +//----------------------------------------------------------------------------- 1.109 + 1.110 + 1.111 + 1.112 +function test() 1.113 +{ 1.114 + enterFunc ('test'); 1.115 + printBugNumber(BUGNUMBER); 1.116 + printStatus (summary); 1.117 + 1.118 + for (var i=0; i<rePatterns.length; i++) 1.119 + { 1.120 + status = inSection(i); 1.121 + re = new RegExp(rePatterns[i]); 1.122 + 1.123 + // Test that we don't crash on any of these - 1.124 + re.exec(str); 1.125 + getResults(); 1.126 + 1.127 + // Just for the heck of it, test the current leftContext 1.128 + re.exec(lc); 1.129 + getResults(); 1.130 + 1.131 + // Test the current rightContext 1.132 + re.exec(rc); 1.133 + getResults(); 1.134 + } 1.135 + 1.136 + reportCompare('No Crash', 'No Crash', ''); 1.137 + 1.138 + exitFunc ('test'); 1.139 +} 1.140 + 1.141 + 1.142 +function getResults() 1.143 +{ 1.144 + lm = RegExp.lastMatch; 1.145 + lc = RegExp.leftContext; 1.146 + rc = RegExp.rightContext; 1.147 +}