JavaScriptCore:
authorkmccullo <kmccullo@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 20 Aug 2007 22:05:25 +0000 (22:05 +0000)
committerkmccullo <kmccullo@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 20 Aug 2007 22:05:25 +0000 (22:05 +0000)
        Reviewed by Geoff and Adam.

        - Changing stack depth to 500 (from 100 on mac and win) to help out some apps specifically gmail.  <rdar://problem/3590522> JavaScript call stack limit of 99 is too small for some applications; needs to be closer to 500 (4045)

        * kjs/object.cpp:

LayoutTests:

        Reviewed by Geoff and Adam.

        - Changing stack depth toi 500 (from 100 in mac and win) to help out some apps specifically gmail.  <rdar://problem/3590522> JavaScript call stack limit of 99 is too small for some applications; needs to be closer to 500 (4045).

        * fast/js/deep-recursion-test-expected.txt: Added.
        * fast/js/deep-recursion-test.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@25161 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JavaScriptCore/ChangeLog
JavaScriptCore/kjs/object.cpp
LayoutTests/ChangeLog
LayoutTests/fast/js/deep-recursion-test-expected.txt [new file with mode: 0644]
LayoutTests/fast/js/deep-recursion-test.html [new file with mode: 0644]

index 2f4729fb1f3408ec497de5a4862952c3551b0b31..2f95613e5198829b01e56e585c377950a7836f76 100644 (file)
@@ -1,3 +1,11 @@
+2007-08-16  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Geoff and Adam.
+
+        - Changing stack depth to 500 (from 100 on mac and win) to help out some apps specifically gmail.  <rdar://problem/3590522> JavaScript call stack limit of 99 is too small for some applications; needs to be closer to 500 (4045)
+
+        * kjs/object.cpp:
+
 2007-08-15  Peter Kasting  <zerodpx@gmail.org>
 
         Reviewed by Darin.
index 8a84bc37b5e5e9dd62a81f223c5d13543458d804..8220712c18af3b8abfe917e5ef0c09eeb306dbf8 100644 (file)
 
 // maximum global call stack size. Protects against accidental or
 // malicious infinite recursions. Define to -1 if you want no limit.
-#if PLATFORM(DARWIN) || PLATFORM(WIN_OS)
-// Given OS X stack sizes we run out of stack at about 350 levels.
-// If we improve our stack usage, we can bump this number.
-#define KJS_MAX_STACK 100
-#else
-#define KJS_MAX_STACK 1000
-#endif
+// In real-world testing it appears ok to bump the stack depth count to 500.
+// This of course is dependent on stack frame size.
+#define KJS_MAX_STACK 500
 
 #define JAVASCRIPT_CALL_TRACING 0
 #define JAVASCRIPT_MARK_TRACING 0
index 0b593a8f1c6447a818e9c4b55ee159488b368753..316d6d9b7c78138980dd04b47077157a82e36028 100644 (file)
@@ -1,3 +1,12 @@
+2007-08-16  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Geoff and Adam.
+
+        - Changing stack depth toi 500 (from 100 in mac and win) to help out some apps specifically gmail.  <rdar://problem/3590522> JavaScript call stack limit of 99 is too small for some applications; needs to be closer to 500 (4045).
+
+        * fast/js/deep-recursion-test-expected.txt: Added.
+        * fast/js/deep-recursion-test.html: Added.
+
 2007-08-19  Maciej Stachowiak  <mjs@apple.com>
 
         Not reviewed - test case fixes.
diff --git a/LayoutTests/fast/js/deep-recursion-test-expected.txt b/LayoutTests/fast/js/deep-recursion-test-expected.txt
new file mode 100644 (file)
index 0000000..d4ffde3
--- /dev/null
@@ -0,0 +1,11 @@
+This test how deep we can recurse, and that we get an exception when we do, as opposed to a stack overflow.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+PASS msg is 'RangeError: Maximum call stack size exceeded.'
+PASS msg is 'RangeError: Maximum call stack size exceeded.'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
diff --git a/LayoutTests/fast/js/deep-recursion-test.html b/LayoutTests/fast/js/deep-recursion-test.html
new file mode 100644 (file)
index 0000000..1fa82cf
--- /dev/null
@@ -0,0 +1,43 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<link rel="stylesheet" href="resources/js-test-style.css">
+<script src="resources/js-test-pre.js"></script>
+</head>
+<body>
+<p id="description"></p>
+<div id="console"></div>
+<script>
+    description("This test how deep we can recurse, and that we get an exception when we do, as opposed to a stack overflow.");
+
+    function simpleRecursion(depth) {
+        if (depth)
+            simpleRecursion(depth - 1);
+    }
+
+    try {
+        simpleRecursion(499);
+    } catch (ex) {
+        debug(ex);
+    }
+
+    try {
+        simpleRecursion(500);
+    } catch (ex) {
+        var msg = String(eval(ex));
+        shouldBe("msg", "'RangeError: Maximum call stack size exceeded.'");
+    }
+    
+    try {
+        simpleRecursion(1000);
+    } catch (ex) {
+        var msg = String(eval(ex));
+        shouldBe("msg", "'RangeError: Maximum call stack size exceeded.'");
+    }
+
+    successfullyParsed = true;
+
+</script>
+<script src="resources/js-test-post.js"></script>
+</body>
+</html>