diff --git a/lib/fluent/plugin/exception_detector.rb b/lib/fluent/plugin/exception_detector.rb index d7c78b4..c85a5ee 100644 --- a/lib/fluent/plugin/exception_detector.rb +++ b/lib/fluent/plugin/exception_detector.rb @@ -16,7 +16,7 @@ module Fluent Struct.new('Rule', :from_states, :pattern, :to_state) # Configuration of the state machine that detects exceptions. - module ExceptionDetectorConfig + module ExceptionDetectorConfig # rubocop:disable Metrics/ModuleLength # Rule for a state transition: if pattern matches go to the given state. class RuleTarget attr_accessor :pattern, :to_state @@ -106,13 +106,61 @@ def self.supported rule(:go_frame_2, /^\s/, :go_frame_1) ].freeze - RUBY_RULES = [ + RUBY_ERROR_RULES = [ rule(:start_state, /Error \(.*\):$/, :ruby_before_rails_trace), rule(:ruby_before_rails_trace, /^ $/, :ruby), rule(:ruby_before_rails_trace, /^[\t ]+.*?\.rb:\d+:in `/, :ruby), rule(:ruby, /^[\t ]+.*?\.rb:\d+:in `/, :ruby) ].freeze + RUBY_SEGFAULT_RULES = [ + rule(:start_state, + /:\d+:\s\[BUG\] Segmentation fault/, :ruby_segfault), + rule(:ruby_segfault, /^ruby\n*/, :ruby_segfault), + rule(:ruby_segfault, /^\n*$/, :ruby_segfault), + rule(:ruby_segfault, + /^-- Control frame information --/, :ruby_control_frames), + rule(:ruby_control_frames, /^c:/, :ruby_control_frames), + rule(:ruby_control_frames, /^\n*$/, :ruby_segfault), + rule([:ruby_segfault, :ruby_control_frames], + /^-- Ruby level backtrace information --/, + :ruby_level_backtrace_frames), + rule(:ruby_level_backtrace_frames, /:\d+:in /, + :ruby_level_backtrace_frames), + rule(:ruby_level_backtrace_frames, /^\n*$/, :ruby_segfault), + rule([:ruby_segfault, :ruby_level_backtrace_frames], + /^-- Machine register context --/, :ruby_machine_registers), + rule(:ruby_machine_registers, /: /, :ruby_machine_registers), + rule(:ruby_machine_registers, /^\n*$/, :ruby_segfault), + rule([:ruby_segfault, :ruby_machine_registers], + /^-- C level backtrace information --/, + :ruby_c_level_backtrace_frames), + rule(:ruby_c_level_backtrace_frames, /\[.*\]/, + :ruby_c_level_backtrace_frames), + rule(:ruby_c_level_backtrace_frames, / .*:\d+$/, + :ruby_c_level_backtrace_frames), + rule(:ruby_c_level_backtrace_frames, /^\n*$/, :ruby_segfault), + rule([:ruby_segfault, :ruby_c_level_backtrace_frames], + /^-- Other runtime information/, :ruby_other_runtime_info), + rule(:ruby_other_runtime_info, /^\n*$/, :ruby_other_runtime_info), + rule(:ruby_other_runtime_info, /^* Loaded script:/, :ruby_loaded_script), + rule(:ruby_loaded_script, /^\n*$/, :ruby_loaded_features), + rule([:ruby_loaded_features, :ruby_loaded_script], + /^* Loaded features:/, :ruby_loaded_features), + rule(:ruby_loaded_features, /^\n*$/, :ruby_loaded_features_frames), + rule([:ruby_loaded_features_frames, :ruby_loaded_features], + /\d/, :ruby_loaded_features_frames), + rule(:ruby_loaded_features_frames, + /^\n*$/, :ruby_process_memory_map), + rule([:ruby_process_memory_map, :ruby_loaded_features_frames], + /^* Process memory map:/, :ruby_process_memory_map), + rule(:ruby_process_memory_map, + /^\n*$/, :ruby_process_memory_map_frames), + rule([:ruby_process_memory_map_frames, :ruby_process_memory_map], + /\-/, :ruby_process_memory_map_frames), + rule(:ruby_process_memory_map_frames, /^\n*$/, :start_state) + ].freeze + DART_RULES = [ rule(:start_state, /^Unhandled exception:$/, :dart_exc), rule(:dart_exc, /^Instance of/, :dart_stack), @@ -149,6 +197,10 @@ def self.supported rule(:dart_stack, /^$/, :dart_stack) ].freeze + RUBY_RULES = ( + RUBY_ERROR_RULES + RUBY_SEGFAULT_RULES + ).freeze + ALL_RULES = ( JAVA_RULES + PYTHON_RULES + PHP_RULES + GO_RULES + RUBY_RULES + DART_RULES ).freeze diff --git a/test/plugin/test_exception_detector.rb b/test/plugin/test_exception_detector.rb index f001d0e..e54fafb 100644 --- a/test/plugin/test_exception_detector.rb +++ b/test/plugin/test_exception_detector.rb @@ -315,6 +315,271 @@ class ExceptionDetectorTest < Test::Unit::TestCase app/controllers/books_controller.rb:99:in `requestload' app/controllers/books_controller.rb:118:in `generror' config/error_reporting_logger.rb:62:in `tagged' +END + + RUBY_SEGFAULT_EXC = <' +/usr/local/bin/bundle:23:in `load' +/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.1.4/libexec/bundle:34:in `' +/usr/local/lib/ruby/2.7.0/bundler/friendly_errors.rb:123:in `with_friendly_errors' +/usr/local/lib/ruby/gems/2.7.0/gems/bundler-2.1.4/libexec/bundle:46:in `block in ' +/usr/local/lib/ruby/2.7.0/bundler/cli.rb:24:in `start' +/usr/local/lib/ruby/2.7.0/bundler/vendor/thor/lib/thor/base.rb:476:in `start' +/usr/local/lib/ruby/2.7.0/bundler/cli.rb:30:in `dispatch' +/usr/local/lib/ruby/2.7.0/bundler/vendor/thor/lib/thor.rb:399:in `dispatch' +/usr/local/lib/ruby/2.7.0/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command' +/usr/local/lib/ruby/2.7.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run' +/usr/local/lib/ruby/2.7.0/bundler/cli.rb:476:in `exec' +/usr/local/lib/ruby/2.7.0/bundler/cli/exec.rb:28:in `run' +/usr/local/lib/ruby/2.7.0/bundler/cli/exec.rb:63:in `kernel_load' +/usr/local/lib/ruby/2.7.0/bundler/cli/exec.rb:63:in `load' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/bin/derailed:23:in `' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/bin/derailed:23:in `load' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/derailed_benchmarks-1.8.1/bin/derailed:93:in `' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/thor-1.1.0/lib/thor/base.rb:485:in `start' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/thor-1.1.0/lib/thor.rb:392:in `dispatch' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/thor-1.1.0/lib/thor/invocation.rb:127:in `invoke_command' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/thor-1.1.0/lib/thor/command.rb:27:in `run' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/derailed_benchmarks-1.8.1/bin/derailed:52:in `block in ' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/memory_profiler-0.9.14/lib/memory_profiler.rb:15:in `report' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/memory_profiler-0.9.14/lib/memory_profiler/reporter.rb:33:in `report' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/memory_profiler-0.9.14/lib/memory_profiler/reporter.rb:74:in `run' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/derailed_benchmarks-1.8.1/bin/derailed:53:in `block (2 levels) in ' +/usr/local/lib/ruby/2.7.0/bundler.rb:174:in `require' +/usr/local/lib/ruby/2.7.0/bundler/runtime.rb:58:in `require' +/usr/local/lib/ruby/2.7.0/bundler/runtime.rb:58:in `each' +/usr/local/lib/ruby/2.7.0/bundler/runtime.rb:69:in `block in require' +/usr/local/lib/ruby/2.7.0/bundler/runtime.rb:69:in `each' +/usr/local/lib/ruby/2.7.0/bundler/runtime.rb:74:in `block (2 levels) in require' +/usr/local/lib/ruby/2.7.0/bundler/runtime.rb:74:in `require' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/gitaly-14.6.0.pre.rc1/ruby/proto/gitaly.rb:32:in `' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/dependencies.rb:332:in `require' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/dependencies.rb:299:in `load_dependency' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/dependencies.rb:332:in `block in require' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/dependencies.rb:332:in `require' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/gitaly-14.6.0.pre.rc1/ruby/proto/gitaly/repository-service_services_pb.rb:5:in `' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/dependencies.rb:332:in `require' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/dependencies.rb:299:in `load_dependency' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/dependencies.rb:332:in `block in require' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/activesupport-6.1.4.4/lib/active_support/dependencies.rb:332:in `require' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/gitaly-14.6.0.pre.rc1/ruby/proto/gitaly/repository-service_pb.rb:318:in `' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/gitaly-14.6.0.pre.rc1/ruby/proto/gitaly/repository-service_pb.rb:362:in `' +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/gitaly-14.6.0.pre.rc1/ruby/proto/gitaly/repository-service_pb.rb:362:in `lookup' + +-- Machine register context ------------------------------------------------ + RIP: 0x00007fd8f45f40a2 RBP: 0x00007fd8f3655000 RSP: 0x00007fff198dd030 + RAX: 0x0000000000000003 RBX: 0x00007fd8da7a2790 RCX: 0x0000000000000089 + RDX: 0x000000000000003d RDI: 0x00007fd8f3655000 RSI: 0xcccccccccccccccd + R8: 0x0000000000000001 R9: 0x0000000000000000 R10: 0x00007fd8e238b680 + R11: 0x0000000000000082 R12: 0x000000000008ff3a R13: 0xcccccccccccccccd + R14: 0x000000000000000d R15: 0x0003f134e098c94f EFL: 0x0000000000010202 + +-- C level backtrace information ------------------------------------------- +/usr/local/lib/libruby.so.2.7(rb_vm_bugreport+0x555) [0x7fd8f4799605] vm_dump.c:755 +[0x7fd8f45d6d17] +/usr/local/lib/libruby.so.2.7(sigsegv+0x4b) [0x7fd8f4704d2b] signal.c:946 +/lib/x86_64-linux-gnu/libpthread.so.0(__restore_rt+0x0) [0x7fd8f42db730] +[0x7fd8f45f40a2] +/usr/local/lib/libruby.so.2.7(gc_marks_rest+0x80) [0x7fd8f45f9380] gc.c:5526 +/usr/local/lib/libruby.so.2.7(gc_rest+0x7a) [0x7fd8f45fa09a] gc.c:7382 +/usr/local/lib/libruby.so.2.7(garbage_collect_with_gvl+0x98) [0x7fd8f45fb7a8] gc.c:7514 +/usr/local/lib/libruby.so.2.7(objspace_malloc_fixup+0x17) gc.c:9854 +/usr/local/lib/libruby.so.2.7(rb_st_init_table_with_size+0x89) [0x7fd8f470eac9] st.c:620 +/usr/local/lib/libruby.so.2.7(rebuild_table+0x1df) [0x7fd8f470ed5f] st.c:801 +/usr/local/lib/libruby.so.2.7(rb_st_insert+0x1d8) [0x7fd8f470f398] st.c:1163 +/usr/local/lib/ruby/2.7.0/x86_64-linux/objspace.so(newobj_i+0x206) [0x7fd8f2c37276] object_tracing.c:112 +/usr/local/lib/libruby.so.2.7(tp_call_trace+0x29) [0x7fd8f4799ff9] vm_trace.c:1111 +/usr/local/lib/libruby.so.2.7(exec_hooks_body+0x86) [0x7fd8f479a6b6] vm_trace.c:301 +[0x7fd8f479c29d] +[0x7fd8f45ee2f3] +[0x7fd8f45fcdc7] +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/google-protobuf-3.19.1-x86_64-linux/lib/google/2.7/protobuf_c.so(0x7fd8d98943c9) [0x7fd8d98943c9] +/usr/local/lib/libruby.so.2.7(rb_class_new_instance+0x36) [0x7fd8f467f1c6] object.c:2099 +/builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/google-protobuf-3.19.1-x86_64-linux/lib/google/2.7/protobuf_c.so(0x7fd8d9895f84) [0x7fd8d9895f84] +[0x7fd8f47785c9] +[0x7fd8f479117c] +/usr/local/lib/libruby.so.2.7(vm_call_method+0x55) [0x7fd8f4791915] vm_insnhelper.c:3026 +[0x7fd8f4783ae2] +[0x7fd8f47895fc] +[0x7fd8f46359a5] +/usr/local/lib/libruby.so.2.7(rb_require_string+0x23) [0x7fd8f4636113] load.c:1148 +[0x7fd8f47785c9] +[0x7fd8f479117c] +/usr/local/lib/libruby.so.2.7(vm_call_method+0x55) [0x7fd8f4791915] vm_insnhelper.c:3026 +[0x7fd8f478569a] +[0x7fd8f47895fc] +[0x7fd8f46359a5] +/usr/local/lib/libruby.so.2.7(rb_require_string+0x23) [0x7fd8f4636113] load.c:1148 +[0x7fd8f47785c9] +[0x7fd8f479117c] +/usr/local/lib/libruby.so.2.7(vm_call_method+0x55) [0x7fd8f4791915] vm_insnhelper.c:3026 +[0x7fd8f478569a] +[0x7fd8f47895fc] +[0x7fd8f46359a5] +/usr/local/lib/libruby.so.2.7(rb_require_string+0x23) [0x7fd8f4636113] load.c:1148 +[0x7fd8f47785c9] +[0x7fd8f4783ae2] +[0x7fd8f47895fc] +/usr/local/lib/libruby.so.2.7(rb_yield+0x253) [0x7fd8f47953e3] vm.c:1044 +/usr/local/lib/libruby.so.2.7(rb_ary_each+0x3c) [0x7fd8f45491ac] array.c:2135 +[0x7fd8f47785c9] +[0x7fd8f4783ba0] +[0x7fd8f47895fc] +/usr/local/lib/libruby.so.2.7(rb_yield+0x253) [0x7fd8f47953e3] vm.c:1044 +/usr/local/lib/libruby.so.2.7(rb_ary_each+0x3c) [0x7fd8f45491ac] array.c:2135 +[0x7fd8f47785c9] +[0x7fd8f479117c] +/usr/local/lib/libruby.so.2.7(vm_call_method+0x55) [0x7fd8f4791915] vm_insnhelper.c:3026 +[0x7fd8f4783ba0] +[0x7fd8f47895fc] +[0x7fd8f478a468] +[0x7fd8f4783ae2] +[0x7fd8f4789db5] +/usr/local/lib/libruby.so.2.7(rb_ec_exec_node+0xaa) [0x7fd8f45db70a] eval.c:278 +/usr/local/lib/libruby.so.2.7(ruby_run_node+0x49) [0x7fd8f45e0999] eval.c:336 +/usr/local/bin/ruby(main+0x5b) [0x55bc6cf0910b] ./main.c:50 + +-- Other runtime information ----------------------------------------------- + +* Loaded script: /builds/gitlab-org/gitlab/vendor/ruby/2.7.0/bin/derailed + +* Loaded features: + + 0 enumerator.so + 1 thread.rb + 2 rational.so + 3 complex.so + 4 ruby2_keywords.rb + 5 /usr/local/lib/ruby/2.7.0/x86_64-linux/enc/encdb.so + 6 /usr/local/lib/ruby/2.7.0/x86_64-linux/enc/trans/transdb.so + 7 /usr/local/lib/ruby/2.7.0/x86_64-linux/rbconfig.rb + 8 /usr/local/lib/ruby/2.7.0/rubygems/compatibility.rb + 9 /usr/local/lib/ruby/2.7.0/rubygems/defaults.rb + 10 /usr/local/lib/ruby/2.7.0/rubygems/deprecate.rb + 11 /usr/local/lib/ruby/2.7.0/rubygems/errors.rb + 12 /usr/local/lib/ruby/2.7.0/rubygems/version.rb + 13 /usr/local/lib/ruby/2.7.0/rubygems/requirement.rb + 14 /usr/local/lib/ruby/2.7.0/rubygems/platform.rb + 15 /usr/local/lib/ruby/2.7.0/rubygems/basic_specification.rb + 16 /usr/local/lib/ruby/2.7.0/rubygems/stub_specification.rb + 17 /usr/local/lib/ruby/2.7.0/rubygems/util.rb + 18 /usr/local/lib/ruby/2.7.0/rubygems/text.rb + 19 /usr/local/lib/ruby/2.7.0/rubygems/user_interaction.rb + 20 /usr/local/lib/ruby/2.7.0/rubygems/specification_policy.rb + 21 /usr/local/lib/ruby/2.7.0/rubygems/util/list.rb + 22 /usr/local/lib/ruby/2.7.0/rubygems/specification.rb + 23 /usr/local/lib/ruby/2.7.0/rubygems/exceptions.rb + 24 /usr/local/lib/ruby/2.7.0/rubygems/bundler_version_finder.rb + 25 /usr/local/lib/ruby/2.7.0/rubygems/dependency.rb + 26 /usr/local/lib/ruby/2.7.0/rubygems/core_ext/kernel_gem.rb + 27 /usr/local/lib/ruby/2.7.0/x86_64-linux/monitor.so + 28 /usr/local/lib/ruby/2.7.0/monitor.rb + 29 /usr/local/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb + 30 /usr/local/lib/ruby/2.7.0/rubygems/core_ext/kernel_warn.rb + 31 /usr/local/lib/ruby/2.7.0/rubygems.rb + 32 /usr/local/lib/ruby/2.7.0/rubygems/path_support.rb + 33 /usr/local/lib/ruby/2.7.0/did_you_mean/version.rb + 34 /usr/local/lib/ruby/2.7.0/did_you_mean/core_ext/name_error.rb + 35 /usr/local/lib/ruby/2.7.0/did_you_mean/levenshtein.rb + 36 /usr/local/lib/ruby/2.7.0/did_you_mean/jaro_winkler.rb + 37 /usr/local/lib/ruby/2.7.0/did_you_mean/spell_checker.rb + 38 /usr/local/lib/ruby/2.7.0/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb + 39 /usr/local/lib/ruby/2.7.0/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb + 40 /usr/local/lib/ruby/2.7.0/did_you_mean/spell_checkers/name_error_checkers.rb + 41 /usr/local/lib/ruby/2.7.0/did_you_mean/spell_checkers/method_name_checker.rb + 42 /usr/local/lib/ruby/2.7.0/did_you_mean/spell_checkers/key_error_checker.rb + 43 /usr/local/lib/ruby/2.7.0/did_you_mean/spell_checkers/null_checker.rb + 44 /usr/local/lib/ruby/2.7.0/did_you_mean/formatters/plain_formatter.rb + 45 /usr/local/lib/ruby/2.7.0/did_you_mean/tree_spell_checker.rb + 46 /usr/local/lib/ruby/2.7.0/did_you_mean.rb + 47 /usr/local/lib/ruby/2.7.0/tsort.rb + 48 /usr/local/lib/ruby/2.7.0/rubygems/request_set/gem_dependency_api.rb + 49 /usr/local/lib/ruby/2.7.0/rubygems/request_set/lockfile/parser.rb + 50 /usr/local/lib/ruby/2.7.0/rubygems/request_set/lockfile/tokenizer.rb + 51 /usr/local/lib/ruby/2.7.0/rubygems/request_set/lockfile.rb + 52 /usr/local/lib/ruby/2.7.0/rubygems/request_set.rb + 53 /usr/local/lib/ruby/2.7.0/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb + 54 /usr/local/lib/ruby/2.7.0/rubygems/resolver/molinillo/lib/molinillo/errors.rb + 55 /usr/local/lib/ruby/2.7.0/set.rb + 56 /usr/local/lib/ruby/2.7.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/action.rb + 57 /usr/local/lib/ruby/2.7.0/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb + +* Process memory map: + +55bc6cf08000-55bc6cf09000 r--p 00000000 08:01 2234292 /usr/local/bin/ruby +55bc6cf09000-55bc6cf0a000 r-xp 00001000 08:01 2234292 /usr/local/bin/ruby +55bc6cf0a000-55bc6cf0b000 r--p 00002000 08:01 2234292 /usr/local/bin/ruby +55bc6cf0b000-55bc6cf0c000 r--p 00002000 08:01 2234292 /usr/local/bin/ruby +55bc6cf0c000-55bc6cf0d000 rw-p 00003000 08:01 2234292 /usr/local/bin/ruby +7fd8cdb83000-7fd8cdd41000 r--s 00000000 08:01 2089303 /lib/x86_64-linux-gnu/libc-2.28.so +7fd8cdd41000-7fd8cdd72000 r--s 00000000 08:01 1068321 /builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/google-protobuf-3.19.1-x86_64-linux/lib/google/2.7/protobuf_c.so +7fd8cdd72000-7fd8cdda9000 r--s 00000000 08:01 2351143 /usr/local/lib/ruby/2.7.0/x86_64-linux/objspace.so +7fd8cdda9000-7fd8cddcd000 r--s 00000000 08:01 2089362 /lib/x86_64-linux-gnu/libpthread-2.28.so +7fd8cddcd000-7fd8ce760000 r--s 00000000 08:01 2234335 /usr/local/lib/libruby.so.2.7.5 +7fd8ce760000-7fd8ce791000 r--s 00000000 08:01 2234292 /usr/local/bin/ruby +7fd8ce791000-7fd8d5f91000 rw-p 00000000 00:00 0 +7fd8d5f91000-7fd8d5ff0000 r--p 00000000 08:01 1069884 /builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/grpc-1.42.0-x86_64-linux/src/ruby/lib/grpc/2.7/grpc_c.so +7fd8d5ff0000-7fd8d6411000 r-xp 0005f000 08:01 1069884 /builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/grpc-1.42.0-x86_64-linux/src/ruby/lib/grpc/2.7/grpc_c.so +7fd8d6411000-7fd8d6592000 r--p 00480000 08:01 1069884 /builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/grpc-1.42.0-x86_64-linux/src/ruby/lib/grpc/2.7/grpc_c.so +7fd8d6592000-7fd8d6593000 ---p 00601000 08:01 1069884 /builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/grpc-1.42.0-x86_64-linux/src/ruby/lib/grpc/2.7/grpc_c.so +7fd8d6593000-7fd8d65be000 r--p 00601000 08:01 1069884 /builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/grpc-1.42.0-x86_64-linux/src/ruby/lib/grpc/2.7/grpc_c.so +7fd8d65be000-7fd8d65c4000 rw-p 0062c000 08:01 1069884 /builds/gitlab-org/gitlab/vendor/ruby/2.7.0/gems/grpc-1.42.0-x86_64-linux/src/ruby/lib/grpc/2.7/grpc_c.so +7fd8d65c4000-7fd8d65d3000 rw-p 00000000 00:00 0 + END # The whitespace on the second line is significant. @@ -639,6 +904,8 @@ def test_go def test_ruby check_exception(RUBY_EXC, false) + check_exception(RUBY_SEGFAULT_EXC, true) + check_exception(strip_blank_lines(RUBY_SEGFAULT_EXC), true) check_exception(RAILS_EXC, false) end @@ -714,6 +981,10 @@ def test_reset check_no_multiline(detector, JAVA_EXC_PART2) end + def strip_blank_lines(str) + str.split("\n").reject(&:empty?).join("\n") + "\n\n" + end + def feed_lines(buffer, *messages) messages.each do |m| m.each_line do |line|