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