summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* v3.2.2p53v3_2_2ruby_3_2NARUSE, Yui2023-03-301-1/+1
|
* v3.2.1p53NARUSE, Yui2023-03-301-1/+1
|
* Merge Time-0.2.2 (#7623)Hiroshi SHIBATA2023-03-303-3/+12
|
* gem related automation must run only on masterNARUSE, Yui2023-03-291-0/+3
|
* Skip failing test on MSWinNobuyoshi Nakada2023-03-281-0/+1
|
* Use merge_groupNARUSE, Yui2023-03-2813-0/+87
|
* Merge RubyGems-3.4.10 and Bundler-2.4.10 (#7479)Hiroshi SHIBATA2023-03-28179-470/+2883
| | | | | | | | | | | | | | | * Merge RubyGems-3.4.7 and Bundler-2.4.7 * Merge RubyGems-3.4.8 and Bundler-2.4.8 * Skip failing test on MSWin * Merge RubyGems-3.4.9 and Bundler-2.4.9 * Merge RubyGems-3.4.10 and Bundler-2.4.10 --------- Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
* Use URI-0.12.1 for Ruby 3.2 (#7603)Hiroshi SHIBATA2023-03-286-11/+61
| | | | | | | * Merge URI-0.12.1 * Use URI-0.12.1 * Update core_assertions for using assert_linear_performance
* merge revision(s) ↵NARUSE, Yui2023-03-282-2/+2
| | | | | | | | | | | | | | | | | 2f916812a9b818b432ee7c299e021ec62d4727fb,ac458f6bc3c520c9f23364c85bfb033acda907a6: Skip test_europe_lisbon on macOS until we figure out why it's failing. --- test/ruby/test_time_tz.rb | 1 + 1 file changed, 1 insertion(+) Historical timezones of Lisbon in tzdata are unstable --- test/ruby/test_time_tz.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
* merge revision(s) 680bd9027f8cb7977bbc216609db2f4e3cf199a8: [Backport #19471]NARUSE, Yui2023-03-283-2/+7
| | | | | | | | | | | [Bug #19471] `Regexp.compile` should handle keyword arguments As well as `Regexp.new`, it should pass keyword arguments to the `Regexp#initialize` method. --- re.c | 2 +- test/ruby/test_regexp.rb | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-)
* merge revision(s) e7342e76dfd26237c604e42f9a59a1eaa578c94e: [Backport #19485]NARUSE, Yui2023-03-232-1/+7
| | | | | | | | | [Bug #19485] [DOC] Mention tabs in indentation of heredoc identifier Co-Authored-By: sawa (Tsuyoshi Sawada) <sawadatsuyoshi@gmail.com> --- doc/syntax/literals.rdoc | 6 ++++++ 1 file changed, 6 insertions(+)
* merge revision(s) cb22d78354e201ca74eba68a8b4edefb593e6754: [Backport #19536]NARUSE, Yui2023-03-233-2/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix frozen status loss when moving objects [Bug #19536] When objects are moved between size pools, their frozen status is lost in the shape. This will cause the frozen check to be bypassed when there is an inline cache. For example, the following script should raise a FrozenError, but doesn't on Ruby 3.2 and master. class A def add_ivars @a = @b = @c = @d = 1 end def set_a @a = 10 end end a = A.new a.add_ivars a.freeze b = A.new b.add_ivars b.set_a # Set the inline cache in set_a GC.verify_compaction_references(expand_heap: true, toward: :empty) a.set_a --- shape.c | 2 +- test/ruby/test_gc_compact.rb | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-)
* merge revision(s) dddc542e9b61b292d80a96d0d0efbbf58719e3be: [Backport #19476]NARUSE, Yui2023-03-223-3/+8
| | | | | | | | | [Bug #19476]: correct cache index computation for repetition (#7457) --- regexec.c | 4 ++-- test/ruby/test_regexp.rb | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-)
* merge revision(s) e22c4e8877677ff90805e4a4dcbdef80f4220136: [Backport #19467]NARUSE, Yui2023-03-203-5/+27
| | | | | | | | | | [Bug #19467] correct cache points and counting failure on `OP_ANYCHAR_STAR_PEEK_NEXT` (#7454) --- regexec.c | 20 ++++++++++++++++---- test/ruby/test_regexp.rb | 10 ++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-)
* merge revision(s) 96d1acfdf6c6b42f2029f44d5b5920961d6efa92: [Backport #19161]NARUSE, Yui2023-03-182-7/+8
| | | | | | | | | [Bug #19161] Check for TLS usability On all platforms using GCC, even other than darwin. --- configure.ac | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
* merge revision(s) ↵NARUSE, Yui2023-03-174-10/+23
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 0700d0fd1c77b4fddf803dea3c10be654df600ff,62c2082f1f726cb90d8c332fbedbecf41d5d82ec: [Backport #19469] Fix indentation in vm_setivar_default --- vm_insnhelper.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) [Bug #19469] Fix crash when resizing generic iv list The following script can sometimes trigger a crash: ```ruby GC.stress = true class Array def foo(bool) if bool @a = 1 @b = 2 @c = 1 else @c = 1 end end end obj = [] obj.foo(true) obj2 = [] obj2.foo(false) obj3 = [] obj3.foo(true) ``` This is because vm_setivar_default calls rb_ensure_generic_iv_list_size to resize the iv list. However, the call to gen_ivtbl_resize reallocs the iv list, and then inserts into the generic iv table. If the st_insert triggers a GC then the old iv list will be read during marking, causing a use-after-free bug. Co-Authored-By: Jemma Issroff <jemmaissroff@gmail.com> --- internal/variable.h | 2 +- variable.c | 23 ++++++++++++++++++----- vm_insnhelper.c | 4 ++-- 3 files changed, 21 insertions(+), 8 deletions(-)
* merge revision(s) d78ae78fd76e556e281a743c75bea4c0bb81ed8c: [Backport #19468]NARUSE, Yui2023-03-172-1/+2
| | | | | | | | | | | | | | | rb_str_modify_expand: clear the string coderange [Bug #19468] b0b9f7201acab05c2a3ad92c3043a1f01df3e17f errornously stopped clearing the coderange. Since `rb_str_modify` clears it, `rb_str_modify_expand` should too. --- string.c | 1 + 1 file changed, 1 insertion(+)
* merge revision(s) 0eb634ae73cb327ede833b72492f912792a4a9d5: [Backport #19464]NARUSE, Yui2023-03-153-16/+31
| | | | | | | | | | | | | | | | | | | | | | | YJIT: Detect and reject `send(:alias_for_send, :foo)` Previously, YJIT failed to put the stack into the correct shape when `BasicObject#send` calls an alias method for the send method itself. This can manifest as strange `NoMethodError`s in the final non-send receiver, as [seen][1] with the kt-paperclip gem. I also found a case where it makes YJIT fail the stack size assertion while compiling `leave`. YJIT's `BasicObject#__send__` implementation already rejects sends to `send`, but didn't detect sends to aliases of `send`. Adjust the detection and reject these cases. Fixes [Bug #19464] [1]: https://github.com/Shopify/yjit/issues/306 --- test/ruby/test_yjit.rb | 20 ++++++++++++++++++++ yjit/src/codegen.rs | 25 ++++++++++--------------- 2 files changed, 30 insertions(+), 15 deletions(-)
* merge revision(s) 3b567eb491e460e00a66fdea8054eeb083b5dafd: [Backport #19459]NARUSE, Yui2023-03-092-18/+8
| | | | | | | | | | | [Bug #19459] Remove unnecessary always-true checks (#7362) `length` is a required argument for `IO::Buffer#read` and `IO::Buffer#write` methods, and `argc` is already checked with `rb_check_arity`. Also fix the call-seq of `IO::Buffer#read`. --- io_buffer.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-)
* merge revision(s) d2520b7b76759118071a16e6bca22726a5de9fb4: [Backport #19439]NARUSE, Yui2023-03-083-3/+30
| | | | | | | | | | | | | | | | | | | | | | | | | Marshal.load: restore instance variables on Regexp [Bug #19439] The instance variables were restore on the Regexp source, not the regexp itself. Unfortunately we have a bit of a chicken and egg problem. The source holds the encoding, and the encoding need to be set on the source to be able to instantiate the Regexp. So the instance variables have to be read on the `source`. To correct this we transfert the instance variables after instantiating the Regexp. The only way to avoid this would be to read the instance variable twice and rewind. --- marshal.c | 20 ++++++++++++++++++-- spec/ruby/core/marshal/shared/load.rb | 11 +++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-)
* merge revision(s) dd28c55a7cd6780dad637b4d6a20507fbfc6af4a: [Backport #19445]NARUSE, Yui2023-03-083-2/+5
| | | | | | | | | | [Bug#19445] Fix keyword splat in enumerator Extracted arguments do not have keyword hash to splat. --- numeric.c | 2 +- test/ruby/test_numeric.rb | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-)
* merge revision(s) ↵NARUSE, Yui2023-03-073-5/+56
| | | | | | | | | | | | | | | | | | | | | | | | | | c178926fbe879045fa711444a1fd9e906af23e3b,a4b7ec12298c78392797e5ba7704076550e4f100: [Backport #19444] YJIT: jit_prepare_routine_call() for String#+@ missing We saw SEGVs due to this when running with StackProf, which needs a correct PC for RUBY_INTERNAL_EVENT_NEWOBJ, the same event used for ObjectSpace allocation tracing. [Bug #19444] --- test/ruby/test_yjit.rb | 27 +++++++++++++++++++++++++++ yjit/src/codegen.rs | 5 ++++- 2 files changed, 31 insertions(+), 1 deletion(-) YJIT: Fix false assumption that String#+@ => ::String Could return a subclass. [Bug #19444] --- test/ruby/test_yjit.rb | 17 +++++++++++++++++ yjit/src/codegen.rs | 10 +++++++--- 2 files changed, 24 insertions(+), 3 deletions(-)
* merge revision(s) 86de48e9f69b665ba9ffb5bdc5a181a3adb1a7b8: [Backport #19419]NARUSE, Yui2023-03-072-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | Remove ibf_dumper's WB_PROTECTED status It doesn't have the right write barriers in place. For example, there is rb_mark_set(dump->global_buffer.obj_table); in the mark function, but there is no corresponding write barrier when adding to the table in the `ibf_dump_object() -> ibf_table_find_or_insert() -> st_insert()` code path. To insert write barrier correctly, we need to store the T_STRUCT VALUE inside `struct ibf_dump`. Instead of doing that, let's just demote it to WB unproected for correctness. These dumper object are ephemeral so there is not a huge benefit for having them WB protected. Users of the bootsnap gem ran into crashes due to this issue: https://github.com/Shopify/bootsnap/issues/436 Fixes [Bug #19419] --- compile.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
* merge revision(s) ↵NARUSE, Yui2023-03-045-34/+94
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | b78f871d838c168789648738e5c67b071beb8a19,ecd0cdaf820af789f355f1a18c31d6adfe8aad94: [Backport #19400] YJIT: Use the system page size when the code page size is too small (#7267) Previously on ARM64 Linux systems that use 64 KiB pages (`CONFIG_ARM64_64K_PAGES=y`), YJIT was panicking on boot due to a failed assertion. The assertion was making sure that code GC can free the last code page that YJIT manages without freeing unrelated memory. YJIT prefers picking 16 KiB as the granularity at which to free code memory, but when the system can only free at 64 KiB granularity, that is not possible. The fix is to use the system page size as the code page size when the system page size is 64 KiB. Continue to use 16 KiB as the code page size on common systems that use 16/4 KiB pages. Add asserts to code_gc() and free_page() about code GC's assumptions. Fixes [Bug #19400] --- yjit/src/asm/mod.rs | 78 ++++++++++++++++++++++++++++++++------------------ yjit/src/codegen.rs | 2 -- yjit/src/virtualmem.rs | 13 +++++++++ 3 files changed, 63 insertions(+), 30 deletions(-) YJIT: Fix assertion for partially mapped last pages (#7337) Follows up [Bug #19400] --- test/ruby/test_yjit.rb | 19 +++++++++++++++++++ yjit/src/asm/mod.rs | 2 +- yjit/src/virtualmem.rs | 18 +++++++++++++----- 3 files changed, 33 insertions(+), 6 deletions(-)
* merge revision(s) ↵NARUSE, Yui2023-03-027-5/+30
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 8ce2fb9bbbaea14737c84385b1573f743a30f773,3a0f6ce1d31eefd8af01b50f3632a64d64e8f8c1: [Backport #19415] Only emit circular dependency warning for owned thread shields [Bug #19415] If multiple threads attemps to load the same file concurrently it's not a circular dependency issue. So we check that the existing ThreadShield is owner by the current fiber before warning about circular dependencies. --- internal/thread.h | 1 + load.c | 3 ++- spec/ruby/core/kernel/shared/require.rb | 11 +++++++++++ spec/ruby/fixtures/code/concurrent_require_fixture.rb | 4 ++++ test/ruby/test_require.rb | 3 --- thread.c | 11 +++++++++++ 6 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 spec/ruby/fixtures/code/concurrent_require_fixture.rb Use Thread.pass until thread.stop? to wait for thread to block [Bug #19415] It should be more reliable --- spec/ruby/fixtures/code/concurrent_require_fixture.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
* Backport [Bug #19158] for Ruby 3.2 (#7356)Hiroshi SHIBATA2023-02-221-2/+5
| | | Backport https://github.com/ruby/ruby/pull/7321
* v3.2.1v3_2_1NARUSE, Yui2023-02-081-2/+2
|
* Remove wrong fileNARUSE, Yui2023-02-081-38/+0
|
* merge revision(s) 3a7367ccc319499127ead147e5a08f769e44208e: [Backport #19403]NARUSE, Yui2023-02-074-13/+6
| | | | | | | | | | | | | mkconfig: Map `includedir` only for system ruby Only when installing to the system path on macOS, prepend '$(SDKROOT)' and remap `includedir`. Fix https://github.com/rbenv/ruby-build/discussions/2123 --- test/mkmf/test_config.rb | 4 ++-- test/test_rbconfig.rb | 9 --------- tool/mkconfig.rb | 4 +++- 3 files changed, 5 insertions(+), 12 deletions(-)
* merge revision(s) fad48fefe19cc282a5b209944244a3713359b47f: [Backport #19399]NARUSE, Yui2023-02-073-2/+14
| | | | | | | | | | | [Bug #19399] Parsing invalid heredoc inside block parameter Although this is of course invalid as Ruby code, allow to just parse and tokenize. --- ext/ripper/lib/ripper/lexer.rb | 2 +- test/ripper/test_lexer.rb | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-)
* merge revision(s) c6f84e918943a0bf8db6fee556fc53180d257510: [Backport #19398]NARUSE, Yui2023-02-063-1/+11
| | | | | | | | | | | | | | | | | | | | | | [Bug #19398] Memory leak in WeakMap There's a memory leak in ObjectSpace::WeakMap due to not freeing the `struct weakmap`. It can be seen in the following script: ``` 100.times do 10000.times do ObjectSpace::WeakMap.new end # Output the Resident Set Size (memory usage, in KB) of the current Ruby process puts `ps -o rss= -p #{$$}` end ``` --- gc.c | 1 + test/ruby/test_weakmap.rb | 9 +++++++++ 2 files changed, 10 insertions(+)
* merge revision(s) 3b83b265f11965582d4b9b439eff8a501792ab68: [Backport #19404]NARUSE, Yui2023-02-064-3/+32
| | | | | | | | | | | | YJIT: Crash with rb_bug() when panicking Helps with getting good bug reports in the wild. Intended to be backported to the 3.2.x series. --- yjit/bindgen/src/main.rs | 3 +++ yjit/src/cruby_bindings.inc.rs | 1 + yjit/src/yjit.rs | 29 +++++++++++++++++++++++++++-- 3 files changed, 31 insertions(+), 2 deletions(-)
* merge revision(s) 188688a53e7708d25ab80e14d05e70ffcf792e13: [Backport #19385]NARUSE, Yui2023-02-035-121/+229
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [PATCH 1/4] YJIT: Move CodegenGlobals::freed_pages into an Rc This allows for supplying a freed_pages vec in Rust tests. We need it so we can test scenarios that occur after code GC. --- yjit/src/asm/mod.rs | 48 +++++++++++++++++++++++++++++++++------------ yjit/src/codegen.rs | 16 ++++----------- 2 files changed, 39 insertions(+), 25 deletions(-) Subject: [PATCH 2/4] YJIT: other_cb is None in tests Since the other cb is in CodegenGlobals, and we want Rust tests to be self-contained. --- yjit/src/asm/mod.rs | 1 + 1 file changed, 1 insertion(+) Subject: [PATCH 3/4] YJIT: ARM64: Move functions out of arm64_emit() --- yjit/src/backend/arm64/mod.rs | 180 +++++++++++++++++----------------- 1 file changed, 90 insertions(+), 90 deletions(-) Subject: [PATCH 4/4] YJIT: ARM64: Fix long jumps to labels Previously, with Code GC, YJIT panicked while trying to emit a B.cond instruction with an offset that is not encodable in 19 bits. This only happens when the code in an assembler instance straddles two pages. To fix this, when we detect that a jump to a label can land on a different page, we switch to a fresh new page and regenerate all the code in the assembler there. We still assume that no one assembler has so much code that it wouldn't fit inside a fresh new page. [Bug #19385] --- yjit/src/backend/arm64/mod.rs | 65 ++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 5 deletions(-)
* Merge RubyGems 3.4.6 and Bundler 2.4.6 (#7214)Hiroshi SHIBATA2023-02-0130-717/+948
| | | Merge RubyGems-3.4.6 and Bundler-2.4.6
* merge revision(s) 9726736006b3f74635fd8af05814fe0908e2cf84: [Backport #19327]NARUSE, Yui2023-01-312-1/+2
| | | | | | | | Set STR_SHARED_ROOT flag on root of string --- string.c | 1 + 1 file changed, 1 insertion(+)
* Remove "Miscellaneous checks" from CINARUSE, Yui2023-01-311-122/+0
| | | | It is expected to use on master branch
* merge revision(s) eccfc978fd6f65332eb70c9a46fbb4d5110bbe0a: [Backport #19379]NARUSE, Yui2023-01-313-34/+177
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix parsing of regexps that toggle extended mode on/off inside regexp This was broken in ec3542229b29ec93062e9d90e877ea29d3c19472. That commit didn't handle cases where extended mode was turned on/off inside the regexp. There are two ways to turn extended mode on/off: ``` /(?-x:#y)#z /x =~ '#y' /(?-x)#y(?x)#z /x =~ '#y' ``` These can be nested inside the same regexp: ``` /(?-x:(?x)#x (?-x)#y)#z /x =~ '#y' ``` As you can probably imagine, this makes handling these regexps somewhat complex. Due to the nesting inside portions of regexps, the unassign_nonascii function needs to be recursive. In recursive mode, it needs to track both opening and closing parentheses, similar to how it already tracked opening and closing brackets for character classes. When scanning the regexp and coming to `(?` not followed by `#`, scan for options, and use `x` and `i` to determine whether to turn on or off extended mode. For `:`, indicting only the current regexp section should have the extended mode switched, recurse with the extended mode set or unset. For `)`, indicating the remainder of the regexp (or current regexp portion if already recursing) should turn extended mode on or off, just change the extended mode flag and keep scanning. While testing this, I noticed that `a`, `d`, and `u` are accepted as options, in addition to `i`, `m`, and `x`, but I can't see where those options are documented. I'm not sure whether or not handling `a`, `d`, and `u` as options is a bug. Fixes [Bug #19379] --- re.c | 153 +++++++++++++++++++++++++++++++++++++---------- test/ruby/test_regexp.rb | 56 +++++++++++++++++ 2 files changed, 176 insertions(+), 33 deletions(-)
* merge revision(s) 3f54d09a5b8b6e4fd734abc8911e170d5967b5b0: [Backport #19390]NARUSE, Yui2023-01-313-2/+5
| | | | | | | | | | | | | bignum.c: rb_int_parse_cstr handle `0` strings [Bug #19390] We shouldn't check the string length when skipping zeros, as the string might only contains zero characters, resulting in an empty string. --- bignum.c | 1 - test/ruby/test_time.rb | 4 ++++ 2 files changed, 4 insertions(+), 1 deletion(-)
* merge revision(s) 21dced8b01823a991829b66ffdc8ffc635965c76: [Backport #19389]NARUSE, Yui2023-01-313-3/+6
| | | | | | | | | | [ruby/stringio] [Bug #19389] Fix chomping with longer separator https://github.com/ruby/stringio/commit/eb322a9716 --- ext/stringio/stringio.c | 5 +++-- test/stringio/test_stringio.rb | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-)
* Merge the latest stable versions of RubyGems and Bundler to Ruby 3.2.x (#7061)Hiroshi SHIBATA2023-01-25105-742/+1327
| | | | | | | | | | | | | | | | | | | | | | | | | [Bug #19350] * Merge RubyGems-3.4.2 and Bundler-2.4.2 * Merge RubyGems-3.4.3 and Bundler-2.4.3 * Generate parser-text.rb of racc when sync it * Ignore LICENSE files of libraries vendored in rubygems [ci skip] * Adjust spec of bundler like as `sync_default_gems` [ci skip] * Fixed a typo * Removed vendored LICENSE file. * Update LEGAL sections for pub_grub * Merge RubyGems-3.4.4 and Bundler-2.4.4 * Merge RubyGems-3.4.5 and Bundler-2.4.5 Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org>
* merge revision(s) ↵NARUSE, Yui2023-01-256-4/+29
| | | | | | | | | | | | | | | | | | | | | | | | | 2c93c554019ebdc394d3c51c6d925620d3005f84,f5ea43a2e61789357e9c4b374b4bc6756abeae17: [Backport #19360] Ensure main file has default coverage if required. (#7169) * Extract common code for coverage setup. --- iseq.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) More coverage tests & specs. (#7171) * Add spec for eval and line coverage. * Add test for main file coverage. --- spec/ruby/library/coverage/start_spec.rb | 8 +++++++- test/coverage/autostart.rb | 2 ++ test/coverage/main.rb | 1 + test/coverage/test_coverage.rb | 7 +++++++ 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 test/coverage/autostart.rb create mode 100644 test/coverage/main.rb
* merge revision(s) 6f3aff3961a4c5ce87e05096a1a9dcf1055b7647: [Backport #19289]NARUSE, Yui2023-01-252-3/+6
| | | | | | | | | | | | | [Bug #19289] Retain `ruby_abi_version` function A few extension libraries, to hide all symbols except for necessary to load, hardcode the symbols to be exported in symbol list files for linker without even checking by `have_func`. As a workaround for such libraries, retain `ruby_abi_version` symbol always even in released versions for now. --- include/ruby/internal/abi.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
* merge revision(s) df6b72b8ff7af16a56fa48f3b4abb1d8850f4d1c: [Backport #19348]NARUSE, Yui2023-01-254-2/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Avoid checking interrupt when loading iseq MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The interrupt check will unintentionally release the VM lock when loading an iseq. And this will cause issues with the `debug` gem's [`ObjectSpace.each_iseq` method](https://github.com/ruby/debug/blob/0fcfc28acae33ec1c08068fb7c33703cfa681fa7/ext/debug/iseq_collector.c#L61-L67), which wraps iseqs with a wrapper and exposes their internal states when they're actually not ready to be used. And when that happens, errors like this would occur and kill the `debug` gem's thread: ``` DEBUGGER: ReaderThreadError: uninitialized InstructionSequence ┃ DEBUGGER: Disconnected. ┃ ["/opt/rubies/ruby-3.2.0/lib/ruby/gems/3.2.0/gems/debug-1.7.1/lib/debug/breakpoint.rb:247:in `absolute_path'", ┃ "/opt/rubies/ruby-3.2.0/lib/ruby/gems/3.2.0/gems/debug-1.7.1/lib/debug/breakpoint.rb:247:in `block in iterate_iseq'", ┃ "/opt/rubies/ruby-3.2.0/lib/ruby/gems/3.2.0/gems/debug-1.7.1/lib/debug/breakpoint.rb:246:in `each_iseq'", ... ``` A way to reproduce the issue is to satisfy these conditions at the same time: 1. `debug` gem calling `ObjectSpace.each_iseq` (e.g. [activating a `LineBreakpoint`](https://github.com/ruby/debug/blob/0fcfc28acae33ec1c08068fb7c33703cfa681fa7/lib/debug/breakpoint.rb#L246)). 2. A large amount of iseq being loaded from another thread (possibly through the `bootsnap` gem). 3. 1 and 2 iterating through the same iseq(s) at the same time. Because this issue requires external dependencies and a rather complicated timing setup to reproduce, I wasn't able to write a test case for it. But here's some pseudo code to help reproduce it: ```rb require "debug/session" Thread.new do 100.times do ObjectSpace.each_iseq do |iseq| iseq.absolute_path end end end sleep 0.1 load_a_bunch_of_iseq possibly_through_bootsnap ``` [Bug #19348] Co-authored-by: Peter Zhu <peter@peterzhu.ca> --- compile.c | 2 +- vm_core.h | 1 + vm_insnhelper.c | 11 +++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-)
* merge revision(s) 72eb33066fa9e7dacb7470cd140b219abe37667e: [Backport #19320]NARUSE, Yui2023-01-242-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix off-by-one error in rb_vm_each_stack_value Applying the following patch to test/erb/test_erb.rb and running that file will cause Ruby to crash on my machine (macOS 13.1 on M1 Pro): ``` --- a/test/erb/test_erb.rb +++ b/test/erb/test_erb.rb @@ -7,6 +7,12 @@ class TestERB < Test::Unit::TestCase class MyError < RuntimeError ; end + def setup + GC.auto_compact = true + GC.stress = true + GC.verify_compaction_references(expand_heap: true, toward: :empty) + end + ``` It crashes with the following log: ``` /Users/peter/src/ruby/lib/erb/compiler.rb:276: [BUG] Segmentation fault at 0x00000001083a8690 ... -- C level backtrace information ------------------------------------------- ... /Users/peter/src/ruby/build/ruby(rb_vm_each_stack_value+0xa8) [0x104cc3a44] ../vm.c:2737 /Users/peter/src/ruby/build/ruby(rb_vm_each_stack_value+0xa8) [0x104cc3a44] ../vm.c:2737 /Users/peter/src/ruby/build/ruby(check_stack_for_moved+0x2c) [0x104b272a4] ../gc.c:5512 /Users/peter/src/ruby/build/ruby(gc_compact_finish) ../gc.c:5534 /Users/peter/src/ruby/build/ruby(gc_sweep_compact) ../gc.c:8653 /Users/peter/src/ruby/build/ruby(gc_sweep) ../gc.c:6196 /Users/peter/src/ruby/build/ruby(has_sweeping_pages+0x0) [0x104b19c54] ../gc.c:9568 /Users/peter/src/ruby/build/ruby(gc_rest) ../gc.c:9570 ``` This crash happens because it's reading the VALUE at sp. But since sp points to the top of the stack, it's reading the VALUE above the top of the stack, which is causing this segfault. Fixes [Bug #19320] --- vm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
* merge revision(s) ed6fbb79e19bf401db0e85447fee955fd10a25c7: [Backport #19339]NARUSE, Yui2023-01-203-1/+12
| | | | | | | | | | Fix crash when defining ivars on special constants [Bug #19339] --- test/ruby/test_variable.rb | 6 ++++++ vm_insnhelper.c | 5 +++++ 2 files changed, 11 insertions(+)
* merge revision(s) f7b72462aa27716370c6bea1f2c240983aca9a55: [Backport #19356]NARUSE, Yui2023-01-203-4/+4
| | | | | | | | | | | | | | String#bytesplice should return self In Feature #19314, we concluded that the return value of String#bytesplice should be changed from the source string to the receiver, because the source string is useless and confusing when extra arguments are added. This change should be included in Ruby 3.2.1. --- string.c | 4 ++-- test/ruby/test_string.rb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-)
* merge revision(s) 3be2acfafd3b3c6168e2266c7c6561d143d7ae5c: [Backport #19327]NARUSE, Yui2023-01-194-16/+22
| | | | | | | | | | | | | | | | Fix re-embedding of strings during compaction The reference updating code for strings is not re-embedding strings because the code is incorrectly wrapped inside of a `if (STR_SHARED_P(obj))` clause. Shared strings can't be re-embedded so this ends up being a no-op. This means that strings can be moved to a large size pool during compaction, but won't be re-embedded, which would waste the space. --- gc.c | 16 +++++++++------- string.c | 12 ++++++++---- test/ruby/test_gc_compact.rb | 8 ++++---- 3 files changed, 21 insertions(+), 15 deletions(-)
* Fix test when Ruby is verbosePeter Zhu2023-01-191-1/+1
| | | | | | | The test added in 90a80eb0 fails if Ruby is verbose, it outputs the following line to stderr: RUBY_GC_HEAP_INIT_SLOTS=100 (default value: 10000)
* merge revision(s) d8ef0a98c670449b20436947f5ebbd327ed5ab0d: [Backport #19319]NARUSE, Yui2023-01-192-1/+3
| | | | | | | | | | | | | | | | | | | | [Bug #19319] Fix crash in rb_str_casemap The following code crashes on my machine: ``` GC.stress = true str = "testing testing testing" puts str.capitalize ``` We need to ensure that the object `buffer_anchor` remains on the stack so it does not get GC'd. --- string.c | 2 ++ 1 file changed, 2 insertions(+)
* merge revision(s) 979dd02e2f0a70f3f30d47c6115780d8fac6147e: [Backport #19262]NARUSE, Yui2023-01-193-1/+12
| | | | | | | | | | Check if the argument is Thread::Backtrace::Location object [Bug #19262] --- ast.c | 5 +++++ test/ruby/test_ast.rb | 6 ++++++ 2 files changed, 11 insertions(+)