attila@963: /* attila@963: * Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved. attila@963: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. attila@963: * attila@963: * This code is free software; you can redistribute it and/or modify it attila@963: * under the terms of the GNU General Public License version 2 only, as attila@963: * published by the Free Software Foundation. attila@963: * attila@963: * This code is distributed in the hope that it will be useful, but WITHOUT attila@963: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or attila@963: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License attila@963: * version 2 for more details (a copy is included in the LICENSE file that attila@963: * accompanied this code). attila@963: * attila@963: * You should have received a copy of the GNU General Public License version attila@963: * 2 along with this work; if not, write to the Free Software Foundation, attila@963: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. attila@963: * attila@963: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA attila@963: * or visit www.oracle.com if you need additional information or have any attila@963: * questions. attila@963: */ attila@963: attila@963: /** attila@963: * JDK-8047057: Add a regression test for the passing test cases from JDK-8042304 attila@963: * attila@963: * @test attila@963: * @run attila@963: */ attila@963: attila@963: // commented out makeFuncAndCall calls are still result in crash attila@963: // Tests commented with //** fail only when assertions are turned on attila@963: attila@963: function makeFuncAndCall(code) { attila@963: Function(code)(); attila@963: } attila@963: attila@963: function makeFuncExpectError(code, ErrorType) { attila@963: try { attila@963: makeFuncAndCall(code); attila@963: } catch (e) { attila@963: if (! (e instanceof ErrorType)) { attila@963: fail(ErrorType.name + " expected, got " + e); attila@963: } attila@963: } attila@963: } attila@963: attila@963: makeFuncAndCall("switch(0) { default: {break;} return }"); attila@963: makeFuncAndCall("L: { { break L; } return; }"); attila@963: makeFuncAndCall("L: { while(0) break L; return; }"); attila@963: makeFuncExpectError("L: {while(0) break L; return [](); }", TypeError); attila@963: makeFuncAndCall("do with({}) break ; while(0);"); attila@963: makeFuncAndCall("while(0) with({}) continue ;"); attila@963: makeFuncAndCall("eval([]);"); attila@963: makeFuncAndCall("try{} finally{[]}"); attila@963: makeFuncAndCall("try { } catch(x if 1) { try { } catch(x2) { } }"); attila@963: makeFuncAndCall("try { } catch(x if 1) { try { return; } catch(x2) { { } } }"); attila@963: makeFuncAndCall("Error() * (false)[-0]--"); attila@963: makeFuncAndCall("try { var x = 1, x = null; } finally { }"); attila@963: makeFuncAndCall("try { var x = {}, x = []; } catch(x3) { }"); attila@963: makeFuncAndCall("[delete this]"); attila@963: makeFuncAndCall("if(eval('', eval('', function() {}))) { }"); attila@963: makeFuncAndCall("if(eval('', eval('', function() {}))) { }"); attila@963: makeFuncAndCall("eval(\"[,,];\", [11,12,13,14].some)"); attila@963: makeFuncAndCall("eval(\"1.2e3\", ({})[ /x/ ])"); attila@963: makeFuncExpectError("eval(\"x4\", x3);", ReferenceError); attila@963: makeFuncAndCall("with({5.0000000000000000000000: String()}){(false); }"); attila@963: makeFuncAndCall("try { var x = undefined, x = 5.0000000000000000000000; } catch(x) { x = undefined; }"); attila@963: makeFuncAndCall("(function (x){ x %= this}(false))"); attila@963: makeFuncAndCall("eval.apply.apply(function(){ eval('') })"); attila@963: makeFuncAndCall("(false % !this) && 0"); attila@963: makeFuncAndCall("with({8: 'fafafa'.replace()}){ }"); attila@963: makeFuncAndCall("(function (x) '' )(true)"); attila@963: makeFuncExpectError("new eval(function(){})", TypeError); attila@963: makeFuncAndCall('eval("23", ({})[/x/])');