From 64754ba985d322219c13a16c0a1f2fb5e2dbfbd8 Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Sun, 6 Jun 2021 17:40:48 +0200 Subject: [PATCH] Utilities: Add support for testing null deferencing a RefPtr This adds the new flag -R for the crash utility which tests what happens when we dereference a null RefPtr. This is useful for testing the output of the assertion message. --- Userland/Utilities/crash.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Userland/Utilities/crash.cpp b/Userland/Utilities/crash.cpp index c805268e17b..e832915826c 100644 --- a/Userland/Utilities/crash.cpp +++ b/Userland/Utilities/crash.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -43,6 +44,7 @@ int main(int argc, char** argv) bool do_read_cpu_counter = false; bool do_pledge_violation = false; bool do_failing_assertion = false; + bool do_deref_null_refptr = false; auto args_parser = Core::ArgsParser(); args_parser.set_general_help( @@ -67,6 +69,7 @@ int main(int argc, char** argv) args_parser.add_option(do_read_cpu_counter, "Read the x86 TSC (Time Stamp Counter) directly", nullptr, 'c'); args_parser.add_option(do_pledge_violation, "Violate pledge()'d promises", nullptr, 'p'); args_parser.add_option(do_failing_assertion, "Perform a failing assertion", nullptr, 'n'); + args_parser.add_option(do_deref_null_refptr, "Dereference a null RefPtr", nullptr, 'R'); if (argc != 2) { args_parser.print_usage(stderr, argv[0]); @@ -279,5 +282,13 @@ int main(int argc, char** argv) }).run(run_type); } + if (do_deref_null_refptr || do_all_crash_types) { + Crash("Dereference a null RefPtr", [] { + RefPtr p; + *p; + return Crash::Failure::DidNotCrash; + }).run(run_type); + } + return 0; }