From e23292120ee6a2e1c26b141c9fc5d82705ad578a Mon Sep 17 00:00:00 2001 From: Dmitry Dygalo Date: Sat, 21 Jun 2025 20:54:16 +0200 Subject: [PATCH] fix: sigsegv on malformed shebang Signed-off-by: Dmitry Dygalo --- rust/ruby-prism/src/lib.rs | 8 ++++++++ src/prism.c | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/rust/ruby-prism/src/lib.rs b/rust/ruby-prism/src/lib.rs index 868a4cd5c0..22054de8ba 100644 --- a/rust/ruby-prism/src/lib.rs +++ b/rust/ruby-prism/src/lib.rs @@ -1238,4 +1238,12 @@ end extractor.push_scope(node.as_program_node().unwrap().statements().body().iter().next().unwrap()); assert_eq!(3, extractor.scopes.len()); } + + #[test] + fn malformed_shebang() { + let source = "#!\x00"; + let result = parse(source.as_ref()); + assert!(result.errors().next().is_none()); + assert!(result.warnings().next().is_none()); + } } diff --git a/src/prism.c b/src/prism.c index c42a62f528..c5f5744f58 100644 --- a/src/prism.c +++ b/src/prism.c @@ -22663,7 +22663,7 @@ pm_parser_init(pm_parser_t *parser, const uint8_t *source, size_t size, const pm } search_shebang = false; - } else if (options->main_script && !parser->parsing_eval) { + } else if (options != NULL && options->main_script && !parser->parsing_eval) { search_shebang = true; } }