8025486: RegExp constructor arguments are not evaluated in right order

Reviewed-by: sundar
This commit is contained in:
Hannes Wallnöfer 2013-09-26 11:47:24 +02:00
parent abc7352b43
commit 2e8063226d
3 changed files with 65 additions and 9 deletions

View File

@ -191,23 +191,21 @@ public final class NativeRegExp extends ScriptObject {
public static NativeRegExp newRegExp(final Object regexp, final Object flags) {
String patternString = "";
String flagString = "";
boolean flagsDefined = false;
if (flags != UNDEFINED) {
flagsDefined = true;
flagString = JSType.toString(flags);
}
if (regexp != UNDEFINED) {
if (regexp instanceof NativeRegExp) {
if (!flagsDefined) {
return (NativeRegExp)regexp; // 15.10.3.1 - undefined flags and regexp as
if (flags != UNDEFINED) {
throw typeError("regex.cant.supply.flags");
}
throw typeError("regex.cant.supply.flags");
return (NativeRegExp)regexp; // 15.10.3.1 - undefined flags and regexp as
}
patternString = JSType.toString(regexp);
}
if (flags != UNDEFINED) {
flagString = JSType.toString(flags);
}
return new NativeRegExp(patternString, flagString);
}

View File

@ -0,0 +1,55 @@
/*
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/**
* JDK-8025486: RegExp constructor arguments are not evaluated in right order
*
* @test
* @run
*/
new RegExp({
toString: function() {
print("source");
return "a";
}
}, {
toString: function() {
print("flags");
return "g";
}
});
try {
new RegExp(/asdf/, {
toString: function() {
fail("toString should not be called");
}
});
fail("expected TypeError");
} catch (e) {
if (!(e instanceof TypeError)) {
fail("expected TypeError");
}
print(e);
}

View File

@ -0,0 +1,3 @@
source
flags
TypeError: Cannot supply flags when constructing one RegExp from another