From efc459348003ec9a544c10e69556aff421c8b6b9 Mon Sep 17 00:00:00 2001 From: Oskar Eichler Date: Sat, 29 Aug 2026 21:57:49 +0200 Subject: [PATCH 1/2] Honor exception false for strings with null bytes --- ext/bigdecimal/bigdecimal.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index 99bd9f06..49a340c4 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -2845,6 +2845,7 @@ rb_cstr_convert_to_BigDecimal(const char *c_str, int raise_exception) static inline VALUE rb_str_convert_to_BigDecimal(VALUE val, int raise_exception) { + if (!raise_exception && memchr(RSTRING_PTR(val), '\0', RSTRING_LEN(val))) return Qnil; const char *c_str = StringValueCStr(val); return rb_cstr_convert_to_BigDecimal(c_str, raise_exception); } From 092c639a73d67e5473dbfbe3b981307845e1b07a Mon Sep 17 00:00:00 2001 From: tompng Date: Sat, 12 Sep 2026 15:31:13 +0900 Subject: [PATCH 2/2] Add test for BigDecimal("1\0", exception: false) Co-Authored-By: Claude Fable 5.1 --- test/bigdecimal/test_bigdecimal.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/bigdecimal/test_bigdecimal.rb b/test/bigdecimal/test_bigdecimal.rb index 4487f4a4..b956b225 100644 --- a/test/bigdecimal/test_bigdecimal.rb +++ b/test/bigdecimal/test_bigdecimal.rb @@ -275,6 +275,12 @@ def test_BigDecimal_with_exception_keyword assert_nothing_raised(ArgumentError) { assert_equal(nil, BigDecimal(".", exception: false)) } + assert_raise(ArgumentError) { + BigDecimal("1\0", exception: true) + } + assert_nothing_raised(ArgumentError) { + assert_equal(nil, BigDecimal("1\0", exception: false)) + } assert_raise(ArgumentError) { BigDecimal("1", -1, exception: true) }