From 99e436eb05577f28712e0e0731be72b8d391716f Mon Sep 17 00:00:00 2001 From: Josh Matthews Date: Tue, 31 May 2016 17:14:52 -0400 Subject: [PATCH] Add a test that forces a crash. This makes it easy to manually check the output of a segfault with a complicated backtrace; the actual automation doesn't help us except to verify that the crash continues to happen as excepted. --- components/script/dom/testbinding.rs | 9 +++++++++ components/script/dom/webidls/TestBinding.webidl | 5 +++++ resources/prefs.json | 1 + tests/wpt/mozilla/meta/MANIFEST.json | 6 ++++++ tests/wpt/mozilla/meta/mozilla/sigsegv.html.ini | 4 ++++ tests/wpt/mozilla/tests/mozilla/sigsegv.html | 8 ++++++++ 6 files changed, 33 insertions(+) create mode 100644 tests/wpt/mozilla/meta/mozilla/sigsegv.html.ini create mode 100644 tests/wpt/mozilla/tests/mozilla/sigsegv.html diff --git a/components/script/dom/testbinding.rs b/components/script/dom/testbinding.rs index 95341751780..bbbbc8aa5d6 100644 --- a/components/script/dom/testbinding.rs +++ b/components/script/dom/testbinding.rs @@ -571,6 +571,15 @@ impl TestBindingMethods for TestBinding { fn FuncControlledAttributeEnabled(&self) -> bool { false } fn FuncControlledMethodDisabled(&self) {} fn FuncControlledMethodEnabled(&self) {} + + #[allow(unsafe_code)] + fn CrashHard(&self) { + static READ_ONLY_VALUE: i32 = 0; + unsafe { + let p: *mut u32 = &READ_ONLY_VALUE as *const _ as *mut _; + ptr::write_volatile(p, 0xbaadc0de); + } + } } impl TestBinding { diff --git a/components/script/dom/webidls/TestBinding.webidl b/components/script/dom/webidls/TestBinding.webidl index cdfb9fd18ae..eb6e5a9ae7b 100644 --- a/components/script/dom/webidls/TestBinding.webidl +++ b/components/script/dom/webidls/TestBinding.webidl @@ -456,3 +456,8 @@ interface TestBinding { [Func="TestBinding::condition_satisfied"] const unsigned short funcControlledConstEnabled = 0; }; + +partial interface TestBinding { + [Pref="dom.testable_crash.enabled"] + void crashHard(); +}; diff --git a/resources/prefs.json b/resources/prefs.json index 0289050a162..6124c2376c3 100644 --- a/resources/prefs.json +++ b/resources/prefs.json @@ -4,6 +4,7 @@ "dom.mouseevent.which.enabled": false, "dom.mozbrowser.enabled": false, "dom.serviceworker.timeout_seconds": 60, + "dom.testable_crash.enabled": false, "dom.testbinding.enabled": false, "gfx.webrender.enabled": false, "js.baseline.enabled": true, diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index fb6b4466bab..54bd069d3e7 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -6946,6 +6946,12 @@ "url": "/_mozilla/mozilla/service-workers/service-worker-registration.html" } ], + "mozilla/sigsegv.html": [ + { + "path": "mozilla/sigsegv.html", + "url": "/_mozilla/mozilla/sigsegv.html" + } + ], "mozilla/storage.html": [ { "path": "mozilla/storage.html", diff --git a/tests/wpt/mozilla/meta/mozilla/sigsegv.html.ini b/tests/wpt/mozilla/meta/mozilla/sigsegv.html.ini new file mode 100644 index 00000000000..b6d80eeff3b --- /dev/null +++ b/tests/wpt/mozilla/meta/mozilla/sigsegv.html.ini @@ -0,0 +1,4 @@ +[sigsegv.html] + type: testharness + prefs: [dom.testbinding.enabled:true,dom.testable_crash.enabled:true] + expected: CRASH diff --git a/tests/wpt/mozilla/tests/mozilla/sigsegv.html b/tests/wpt/mozilla/tests/mozilla/sigsegv.html new file mode 100644 index 00000000000..5b1aadd83a2 --- /dev/null +++ b/tests/wpt/mozilla/tests/mozilla/sigsegv.html @@ -0,0 +1,8 @@ + + + + + +