2011-03-26 Maciej Stachowiak <mjs@apple.com>
authormjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 27 Mar 2011 00:58:34 +0000 (00:58 +0000)
committermjs@apple.com <mjs@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 27 Mar 2011 00:58:34 +0000 (00:58 +0000)
        Reviewed by Darin Adler.

        Follow-up fix for crash with giant inline stylesheets - actually don't crash, and add test
        https://bugs.webkit.org/show_bug.cgi?id=56150

        Test: fast/css/giant-stylesheet-crash.html

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::process):
2011-03-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Follow-up fix for crash with giant inline stylesheets - actually don't crash, and add test
        https://bugs.webkit.org/show_bug.cgi?id=56150

        * fast/css/giant-stylesheet-crash-expected.txt: Added.
        * fast/css/giant-stylesheet-crash.html: Added.

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

LayoutTests/ChangeLog
LayoutTests/fast/css/giant-stylesheet-crash-expected.txt [new file with mode: 0644]
LayoutTests/fast/css/giant-stylesheet-crash.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/dom/StyleElement.cpp
Source/WebKit2/WebProcess/com.apple.WebProcess.sb
Tools/Scripts/old-run-webkit-tests
Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py

index 2523918..22df165 100644 (file)
@@ -1,3 +1,13 @@
+2011-03-26  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin Adler.
+
+        Follow-up fix for crash with giant inline stylesheets - actually don't crash, and add test
+        https://bugs.webkit.org/show_bug.cgi?id=56150
+
+        * fast/css/giant-stylesheet-crash-expected.txt: Added.
+        * fast/css/giant-stylesheet-crash.html: Added.
+
 2011-03-26  Martin Robinson  <mrobinson@igalia.com>
 
         [GTK] layoutTestController.overridePreference("WebKitDefaultFontSize"...) does not take into account screen DPI
diff --git a/LayoutTests/fast/css/giant-stylesheet-crash-expected.txt b/LayoutTests/fast/css/giant-stylesheet-crash-expected.txt
new file mode 100644 (file)
index 0000000..94cdfab
--- /dev/null
@@ -0,0 +1 @@
+This test verifies that creating a huge inline stylesheet doesn't crash.
diff --git a/LayoutTests/fast/css/giant-stylesheet-crash.html b/LayoutTests/fast/css/giant-stylesheet-crash.html
new file mode 100644 (file)
index 0000000..6fbe8cc
--- /dev/null
@@ -0,0 +1,25 @@
+<head>\r
+<script>\r
+if (window.layoutTestController)\r
+    layoutTestController.dumpAsText();\r
+</script>\r
+\r
+<script>\r
+var styleElement = document.createElement('style');\r
+styleElement.setAttribute('type', 'text/css');\r
+\r
+var str="z";\r
+for (var i = 0; i < 16; i++) {\r
+    str += str;\r
+}\r
+for (var i = 0; i < 1+(1<<16); i++){\r
+    var txt = document.createTextNode(str);\r
+    styleElement.appendChild(txt);\r
+}\r
+\r
+document.getElementsByTagName('head')[0].appendChild(styleElement); \r
+</script>\r
+</head>\r
+<body>\r
+This test verifies that creating a huge inline stylesheet doesn't crash.\r
+</body>\r
index 3ac103b..dea2094 100644 (file)
@@ -1,3 +1,15 @@
+2011-03-26  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin Adler.
+
+        Follow-up fix for crash with giant inline stylesheets - actually don't crash, and add test
+        https://bugs.webkit.org/show_bug.cgi?id=56150
+
+        Test: fast/css/giant-stylesheet-crash.html
+
+        * dom/StyleElement.cpp:
+        (WebCore::StyleElement::process):
+
 2011-03-22  Jer Noble  <jer.noble@apple.com>
 
         Reviewed by Eric Carlson.
index f984fda..9892ed7 100644 (file)
@@ -103,8 +103,10 @@ void StyleElement::process(Element* e)
     for (Node* c = e->firstChild(); c; c = c->nextSibling()) {
         if (isValidStyleChild(c)) {
             unsigned length = c->nodeValue().length();
-            if (length > std::numeric_limits<unsigned>::max() - resultLength)
-                CRASH();
+            if (length > std::numeric_limits<unsigned>::max() - resultLength) {
+                createSheet(e, m_startLineNumber, "");
+                return;
+            }
             resultLength += length;
         }
     }
index fa81666..2cac2df 100644 (file)
     ;; FIXME: This should be removed when <rdar://problem/8957845> is fixed.
     (subpath (string-append (param "HOME_DIR") "/Library/Fonts"))
 
+    ;; HIToolbox wants these during shutdown
+    (subpath (string-append (param "HOME_DIR") "/Library/Input Methods"))
+    (subpath (string-append (param "HOME_DIR") "/Library/Keyboard Layouts"))
+
     ;; Extensions from UIProcess
     (extension)
 )
index fe9bdd0..56a2a1e 100755 (executable)
@@ -274,49 +274,49 @@ my $sampleDefault = $runSample ? "run" : "do not run";
 
 my $usage = <<EOF;
 Usage: $programName [options] [testdir|testpath ...]
-  --add-platform-exceptions       Put new results for non-platform-specific failing tests into the platform-specific results directory
-  --complex-text                  Use the complex text code path for all text (Mac OS X and Windows only)
-  -c|--configuration config       Set DumpRenderTree build configuration
-  -g|--guard-malloc               Enable malloc guard
-  --exit-after-n-failures N       Exit after the first N failures (includes crashes) instead of running all tests
+  --add-platform-exceptions         Put new results for non-platform-specific failing tests into the platform-specific results directory
+  --complex-text                    Use the complex text code path for all text (Mac OS X and Windows only)
+  -c CONFIG, --configuration CONFIG Set DumpRenderTree build configuration
+  --exit-after-n-failures N         Exit after the first N failures (includes crashes) instead of running all tests
   --exit-after-n-crashes-or-timeouts N
-                                  Exit after the first N crashes instead of running all tests
-  -h|--help                       Show this help message
-  --[no-]http                     Run (or do not run) http tests (default: $httpDefault)
-  --[no-]wait-for-httpd           Wait for httpd if some other test session is using it already (same as WEBKIT_WAIT_FOR_HTTPD=1). (default: $shouldWaitForHTTPD) 
-  -i|--ignore-tests               Comma-separated list of directories or tests to ignore
-  --iterations n                  Number of times to run the set of tests (e.g. ABCABCABC)
-  --[no-]launch-safari            Launch (or do not launch) Safari to display test results (default: $launchSafariDefault)
-  -l|--leaks                      Enable leaks checking
-  --[no-]new-test-results         Generate results for new tests
-  --nthly n                       Restart DumpRenderTree every n tests (default: $testsPerDumpTool)
-  -p|--pixel-tests                Enable pixel tests
-  --tolerance t                   Ignore image differences less than this percentage (default: $tolerance)
-  --platform                      Override the detected platform to use for tests and results (default: $platform)
-  --port                          Web server port to use with http tests
-  -q|--quiet                      Less verbose output
-  --reset-results                 Reset ALL results (including pixel tests if --pixel-tests is set)
-  -o|--results-directory          Output results directory (default: $testResultsDirectory)
-  --random                        Run the tests in a random order
-  --repeat-each n                 Number of times to run each test (e.g. AAABBBCCC)
-  --reverse                       Run the tests in reverse alphabetical order
-  --root                          Path to root tools build
-  --[no-]sample-on-timeout        Run sample on timeout (default: $sampleDefault) (Mac OS X only)
-  -1|--singly                     Isolate each test case run (implies --nthly 1 --verbose)
-  --skipped=[default|ignore|only] Specifies how to treat the Skipped file
+                                    Exit after the first N crashes instead of running all tests
+  --[no-]http                       Run (or do not run) http tests (default: $httpDefault)
+  -g, --guard-malloc                Enable malloc guard
+  --ignore-metrics                  Ignore metrics in tests
+  -i, --ignore-tests                Comma-separated list of directories or tests to ignore
+  --iterations N                    Number of times to run the set of tests (e.g. ABCABCABC)
+  --[no-]launch-safari              Launch (or do not launch) Safari to display test results (default: $launchSafariDefault)
+  -l, --leaks                       Enable leaks checking
+  -m, --merge-leak-depth ARG        Merges leak callStacks and prints the number of unique leaks beneath a callstack depth of arg.  Defaults to 5.
+  --[no-]new-test-results           Generate results for new tests
+  --nthly n                         Restart DumpRenderTree every n tests (default: $testsPerDumpTool)
+  -o, --results-directory           Output results directory (default: $testResultsDirectory)
+  -p, --pixel-tests                 Enable pixel tests
+  --platform                        Override the detected platform to use for tests and results (default: $platform)
+  --port                            Web server port to use with http tests
+  -q, --quiet                       Less verbose output
+  --reset-results                   Reset ALL results (including pixel tests if --pixel-tests is set)
+  --random                          Run the tests in a random order
+  --repeat-each N                   Number of times to run each test (e.g. AAABBBCCC)
+  --reverse                         Run the tests in reverse alphabetical order
+  --root                            Path to root tools build
+  --[no-]sample-on-timeout          Run sample on timeout (default: $sampleDefault) (Mac OS X only)
+  -1, --singly                      Isolate each test case run (implies --nthly 1 --verbose)
+  --skipped=[default|ignore|only]   Specifies how to treat the Skipped file
                                      default: Tests/directories listed in the Skipped file are not tested
                                      ignore:  The Skipped file is ignored
                                      only:    Only those tests/directories listed in the Skipped file will be run
-  --slowest                       Report the 10 slowest tests
-  --ignore-metrics                Ignore metrics in tests
-  --[no-]strip-editing-callbacks  Remove editing callbacks from expected results
-  -t|--threaded                   Run a concurrent JavaScript thead with each test
-  --timeout t                     Sets the number of seconds before a test times out (default: $timeoutSeconds)
-  --valgrind                      Run DumpRenderTree inside valgrind (Qt/Linux only)
-  -v|--verbose                    More verbose output (overrides --quiet)
-  -m|--merge-leak-depth arg       Merges leak callStacks and prints the number of unique leaks beneath a callstack depth of arg.  Defaults to 5.
-  --use-remote-links-to-tests     Link to test files within the SVN repository in the results.
-  -2|--webkit-test-runner         Use WebKitTestRunner rather than DumpRenderTree.
+  --slowest                         Report the 10 slowest tests
+  --[no-]strip-editing-callbacks    Remove editing callbacks from expected results
+  -t, --threaded                    Run a concurrent JavaScript thead with each test
+  --timeout t                       Sets the number of seconds before a test times out (default: $timeoutSeconds)
+  --tolerance t                     Ignore image differences less than this percentage (default: $tolerance)
+  --use-remote-links-to-tests       Link to test files within the SVN repository in the results.
+  --valgrind                        Run DumpRenderTree inside valgrind (Qt/Linux only)
+  -v, --verbose                     More verbose output (overrides --quiet)
+  --[no-]wait-for-httpd             Wait for httpd if some other test session is using it already (same as WEBKIT_WAIT_FOR_HTTPD=1). (default: $shouldWaitForHTTPD) 
+  -2, --webkit-test-runner          Use WebKitTestRunner rather than DumpRenderTree.
+  -h, --help                        Show this help message
 EOF
 
 setConfiguration();
index d27ea1e..9099211 100755 (executable)
@@ -34,9 +34,12 @@ import errno
 import logging
 import optparse
 import os
+import re
 import signal
 import sys
 
+from operator import attrgetter
+
 from layout_package import json_results_generator
 from layout_package import printing
 from layout_package import test_runner
@@ -423,7 +426,10 @@ def parse_args(args=None):
                    chromium_options + results_options + test_options +
                    misc_options + results_json_options +
                    old_run_webkit_tests_compat)
-    option_parser = optparse.OptionParser(option_list=option_list)
+    # Sort option list alphabetically, except try to make --no- options sort immediately after
+    # the non-no version
+    option_list.sort(key=lambda opt: re.sub('^--no-(.*)$', r'--\1-no', opt._long_opts[0]))
+    option_parser = optparse.OptionParser(option_list=option_list, formatter=optparse.IndentedHelpFormatter(max_help_position=36, width=2048))
 
     return option_parser.parse_args(args)