18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The contents of this file are subject to the Netscape Public 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* License Version 1.1 (the "License"); you may not use this file 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* except in compliance with the License. You may obtain a copy of 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* the License at http://www.mozilla.org/NPL/ 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Software distributed under the License is distributed on an "AS IS" 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* basis, WITHOUT WARRANTY OF ANY KIND, either expressed 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* or implied. See the License for the specific language governing 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* rights and limitations under the License. 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Original Code is mozilla.org code. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The Initial Developer of the Original Code is Netscape 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Communications Corporation. Portions created by Netscape are 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Copyright (C) 1998 Netscape Communications Corporation. 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* All Rights Reserved. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Contributor(s): bedney@technicalpursuit.com, pschwartau@netscape.com 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* Date: 04 October 2001 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* SUMMARY: Arose from Bugzilla bug 103087: 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* "The RegExp MarkupSPE in demo crashes Mozilla" 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* See http://bugzilla.mozilla.org/show_bug.cgi?id=103087 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The SpiderMonkey shell crashed on some of these regexps. 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* The reported crash was on i=24 below ('MarkupSPE' regexp) 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project* I crashed on that, and also on i=43 ('XML_SPE' regexp) 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/ 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//----------------------------------------------------------------------------- 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar UBound = 0; 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar bug = 103087; 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar summary = "Testing that we don't crash on any of these regexps -"; 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar re = ''; 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar lm = ''; 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar lc = ''; 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar rc = ''; 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// the regexps are built in pieces - 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar NameStrt = "[A-Za-z_:]|[^\\x00-\\x7F]"; 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar NameChar = "[A-Za-z0-9_:.-]|[^\\x00-\\x7F]"; 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar Name = "(" + NameStrt + ")(" + NameChar + ")*"; 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar TextSE = "[^<]+"; 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar UntilHyphen = "[^-]*-"; 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar Until2Hyphens = UntilHyphen + "([^-]" + UntilHyphen + ")*-"; 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CommentCE = Until2Hyphens + ">?"; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar UntilRSBs = "[^]]*]([^]]+])*]+"; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CDATA_CE = UntilRSBs + "([^]>]" + UntilRSBs + ")*>"; 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar S = "[ \\n\\t\\r]+"; 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar QuoteSE = '"[^"]' + "*" + '"' + "|'[^']*'"; 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar DT_IdentSE = S + Name + "(" + S + "(" + Name + "|" + QuoteSE + "))*"; 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar MarkupDeclCE = "([^]\"'><]+|" + QuoteSE + ")*>"; 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar S1 = "[\\n\\r\\t ]"; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar UntilQMs = "[^?]*\\?+"; 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar PI_Tail = "\\?>|" + S1 + UntilQMs + "([^>?]" + UntilQMs + ")*>"; 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar DT_ItemSE = "<(!(--" + Until2Hyphens + ">|[^-]" + MarkupDeclCE + ")|\\?" + Name + "(" + PI_Tail + "))|%" + Name + ";|" + S; 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar DocTypeCE = DT_IdentSE + "(" + S + ")?(\\[(" + DT_ItemSE + ")*](" + S + ")?)?>?"; 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar DeclCE = "--(" + CommentCE + ")?|\\[CDATA\\[(" + CDATA_CE + ")?|DOCTYPE(" + DocTypeCE + ")?"; 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar PI_CE = Name + "(" + PI_Tail + ")?"; 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar EndTagCE = Name + "(" + S + ")?>?"; 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar AttValSE = '"[^<"]' + "*" + '"' + "|'[^<']*'"; 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar ElemTagCE = Name + "(" + S + Name + "(" + S + ")?=(" + S + ")?(" + AttValSE + "))*(" + S + ")?/?>?"; 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar MarkupSPE = "<(!(" + DeclCE + ")?|\\?(" + PI_CE + ")?|/(" + EndTagCE + ")?|(" + ElemTagCE + ")?)"; 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar XML_SPE = TextSE + "|" + MarkupSPE; 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CommentRE = "<!--" + Until2Hyphens + ">"; 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CommentSPE = "<!--(" + CommentCE + ")?"; 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar PI_RE = "<\\?" + Name + "(" + PI_Tail + ")"; 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar Erroneous_PI_SE = "<\\?[^?]*(\\?[^>]+)*\\?>"; 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar PI_SPE = "<\\?(" + PI_CE + ")?"; 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CDATA_RE = "<!\\[CDATA\\[" + CDATA_CE; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CDATA_SPE = "<!\\[CDATA\\[(" + CDATA_CE + ")?"; 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar ElemTagSE = "<(" + NameStrt + ")([^<>\"']+|" + AttValSE + ")*>"; 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar ElemTagRE = "<" + Name + "(" + S + Name + "(" + S + ")?=(" + S + ")?(" + AttValSE + "))*(" + S + ")?/?>"; 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar ElemTagSPE = "<" + ElemTagCE; 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar EndTagRE = "</" + Name + "(" + S + ")?>"; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar EndTagSPE = "</(" + EndTagCE + ")?"; 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar DocTypeSPE = "<!DOCTYPE(" + DocTypeCE + ")?"; 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar PERef_APE = "%(" + Name + ";?)?"; 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar HexPart = "x([0-9a-fA-F]+;?)?"; 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar NumPart = "#([0-9]+;?|" + HexPart + ")?"; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar CGRef_APE = "&(" + Name + ";?|" + NumPart + ")?"; 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar Text_PE = CGRef_APE + "|[^&]+"; 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar EntityValue_PE = CGRef_APE + "|" + PERef_APE + "|[^%&]+"; 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar 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); 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// here's a big string to test the regexps on - 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvar str = ''; 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += '<html xmlns="http://www.w3.org/1999/xhtml"' + '\n'; 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' xmlns:xlink="http://www.w3.org/XML/XLink/0.9">' + '\n'; 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' <head><title>Three Namespaces</title></head>' + '\n'; 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' <body>' + '\n'; 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' <h1 align="center">An Ellipse and a Rectangle</h1>' + '\n'; 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' <svg xmlns="http://www.w3.org/Graphics/SVG/SVG-19991203.dtd" ' + '\n'; 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' width="12cm" height="10cm">' + '\n'; 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' <ellipse rx="110" ry="130" />' + '\n'; 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' <rect x="4cm" y="1cm" width="3cm" height="6cm" />' + '\n'; 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' </svg>' + '\n'; 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' <p xlink:type="simple" xlink:href="ellipses.html">' + '\n'; 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' More about ellipses' + '\n'; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' </p>' + '\n'; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' <p xlink:type="simple" xlink:href="rectangles.html">' + '\n'; 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' More about rectangles' + '\n'; 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' </p>' + '\n'; 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' <hr/>' + '\n'; 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' <p>Last Modified February 13, 2000</p> ' + '\n'; 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += ' </body>' + '\n'; 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstr += '</html>'; 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//----------------------------------------------------------------------------- 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttest(); 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project//----------------------------------------------------------------------------- 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction test() 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project enterFunc ('test'); 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project printBugNumber (bug); 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project printStatus (summary); 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (var i=0; i<rePatterns.length; i++) 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project status = inSection(i); 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project re = new RegExp(rePatterns[i]); 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Test that we don't crash on any of these - 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project re.exec(str); 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project getResults(); 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Just for the heck of it, test the current leftContext 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project re.exec(lc); 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project getResults(); 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Test the current rightContext 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project re.exec(rc); 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project getResults(); 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project exitFunc ('test'); 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfunction getResults() 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project lm = RegExp.lastMatch; 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project lc = RegExp.leftContext; 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project rc = RegExp.rightContext; 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 156