1402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// Copyright 2010 the V8 project authors. All rights reserved.
2402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// Redistribution and use in source and binary forms, with or without
3402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// modification, are permitted provided that the following conditions are
4402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// met:
5402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//
6402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//     * Redistributions of source code must retain the above copyright
7402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//       notice, this list of conditions and the following disclaimer.
8402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//     * Redistributions in binary form must reproduce the above
9402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//       copyright notice, this list of conditions and the following
10402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//       disclaimer in the documentation and/or other materials provided
11402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//       with the distribution.
12402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//     * Neither the name of Google Inc. nor the names of its
13402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//       contributors may be used to endorse or promote products derived
14402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//       from this software without specific prior written permission.
15402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu//
16402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
28402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// Calling non-objects directly or via Function.prototype.call should
29402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// not mess up the stack.
30402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu// http://code.google.com/p/v8/issues/detail?id=603
31402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
323fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochvar re = /b../;
333fb3ca8c7ca439d408449a395897395c0faae8d1Ben MurdochassertThrows(function() {
34402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu  return re('abcdefghijklm') + 'z';
353fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch});
36402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
37402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescuvar re1 = /c../;
38402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescure1.call = Function.prototype.call;
393fb3ca8c7ca439d408449a395897395c0faae8d1Ben MurdochassertThrows(function() {
403fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  re1.call(null, 'abcdefghijklm') + 'z';
413fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch});
42402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
43402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescuvar re2 = /d../;
443fb3ca8c7ca439d408449a395897395c0faae8d1Ben MurdochassertThrows(function() {
453fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  Function.prototype.call.call(re2, null, 'abcdefghijklm') + 'z';
463fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch});
47402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescu
48402d937239b0e2fd11bf2f4fe972ad78aa9fd481Andrei Popescuvar re3 = /e../;
493fb3ca8c7ca439d408449a395897395c0faae8d1Ben MurdochassertThrows(function() {
503fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  Function.prototype.call.apply(
513fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch      re3, [null, 'abcdefghijklm']) + 'z';
523fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch});
533fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch
543fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochvar re4 = /f../;
553fb3ca8c7ca439d408449a395897395c0faae8d1Ben MurdochassertThrows(function() {
563fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  Function.prototype.apply.call(
573fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch      re4, null, ['abcdefghijklm']) + 'z';
583fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch});
593fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch
603fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdochvar re5 = /g../;
613fb3ca8c7ca439d408449a395897395c0faae8d1Ben MurdochassertThrows(function() {
623fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch  Function.prototype.apply.apply(
633fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch      re4, [null, ['abcdefghijklm']]) + 'z';
643fb3ca8c7ca439d408449a395897395c0faae8d1Ben Murdoch});
65