| // Copyright 2017 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| function newFastRegExp() { return new RegExp('.'); } |
| function toSlowRegExp(re) { re.exec = 42; } |
| |
| let re = newFastRegExp(); |
| const evil_nonstring = { [Symbol.toPrimitive]: () => toSlowRegExp(re) }; |
| const empty_string = ""; |
| |
| String.prototype.replace.call(evil_nonstring, re, empty_string); |
| |
| re = newFastRegExp(); |
| String.prototype.match.call(evil_nonstring, re, empty_string); |
| |
| re = newFastRegExp(); |
| String.prototype.search.call(evil_nonstring, re, empty_string); |
| |
| re = newFastRegExp(); |
| String.prototype.split.call(evil_nonstring, re, empty_string); |