summaryrefslogtreecommitdiff
path: root/test
AgeCommit message (Collapse)Author
2025-10-06[ruby/date] `Date._parse` does not accept `nil`Nobuyoshi Nakada
https://github.com/ruby/date/commit/545066ca28
2025-10-06[ruby/date] Do not repeat conversions to stringNobuyoshi Nakada
https://github.com/ruby/date/commit/159e1ebb7f https://github.com/ruby/date/commit/4f7b6c9b42
2025-10-06[ruby/json] Fix sliced string escapingtompng
https://github.com/ruby/json/commit/d7baf015d9
2025-10-05Also add LSAN_OPTIONS=handle_segv=0 in assert_segvPeter Zhu
Just like ASAN, when running with LSAN, we also want to set handle_segv=0 in assert_segv to make sure that the tests pass.
2025-10-05[ruby/pp] Suppress warnings in test on Ruby 2.7Nobuyoshi Nakada
TODO: Revert when dropping Ruby 2.7 support. https://github.com/ruby/pp/commit/feb417e152
2025-10-05[ruby/pp] Exclude out-of-scope test instead of omittingNobuyoshi Nakada
https://github.com/ruby/pp/commit/40b713d70f
2025-10-05[ruby/pp] Update pp for Set to use new inspect formatJeremy Evans
(https://github.com/ruby/pp/pull/43) Ruby 3.5 will use `Set[1, 2, 3]`. This updates pp to use the same format. https://github.com/ruby/pp/commit/507eebf711
2025-10-05[ruby/pp] Fix ::Data warning on Ruby 2.7Benoit Daloze
* It was showing on require 'pp': lib/pp.rb:525: warning: constant ::Data is deprecated * Fixes https://github.com/ruby/pp/issues/51 https://github.com/ruby/pp/commit/4fd8f4e0bb
2025-10-05[ruby/pp] Support new instance_variables_to_inspect method from Ruby coreJason Frey
This supports the new `instance_variables_to_inspect` method from Ruby core that was added in ruby/ruby#13555. If `instance_variables_to_inspect` is defined, then `pretty_print_instance_variables` will use it. Additionally, this commit introduces tests for both `pretty_print_instance_variables` and `instance_variables_to_inspect`. https://github.com/ruby/pp/commit/9cea466c95
2025-10-02ZJIT: Add `NoSingletonClass` patch point (#14680)Stan Lo
* ZJIT: Add NoSingletonClass patch point This patch point makes sure that when the object has a singleton class, the JIT code is invalidated. As of now, this is only needed for C call optimization. In YJIT, the singleton class guard only applies to Array, Hash, and String. But in ZJIT, we may optimize C calls from gems (e.g. `sqlite3`). So the patch point needs to be applied to a broader range of classes. * ZJIT: Only generate NoSingletonClass guard when the type can have singleton class * ZJIT: Update or forget NoSingletonClass patch point when needed
2025-10-02load.c: Fix dest and src of MEMMOVEYusuke Endoh
When multiple files with the same name are required, the features_index hash stores the indexes in `$LOADED_FEATURES` array into a darray. The dest and src arguments for `MEMMOVE` were wrongly reversed when inserting a new index in the darray. [Bug #21568]
2025-10-01[ruby/ipaddr] Remove warning by asserting its presenceÉtienne Barrié
$ rake test >/dev/null /tmp/test/test_ipaddr.rb:202: warning: IPAddr#ipv4_compat is obsolete https://github.com/ruby/ipaddr/commit/31d62407c2
2025-09-30ZJIT: Re-apply attr_writer inlining (#14678)Max Bernstein
This re-applies https://github.com/ruby/ruby/pull/14629 / 40bb47665d3ff57e0f2eb5a9fd9e0109617015c9 by reverting https://github.com/ruby/ruby/pull/14673 / d4393772b89dab4f33c118a284d92dc80cd63c39. Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
2025-09-30[ruby/openssl] pkey/dh: refactor testsKazuki Yamaguchi
- Generate smaller parameters in test_new_generate. Generating 2048-bit parameters is slow and sometimes takes a few minutes on GitHub-hosted CI runners. Also test the DH.generate alias, not just DH.new. - Simplify test_new_break to just check exceptions raised in the block because it is redundant. - Remove unnecessary OpenSSL::PKey::DH#public_key calls. - Update bare "assert" with more appropriate methods. https://github.com/ruby/openssl/commit/8bc7442310
2025-09-30[ruby/openssl] pkey: disallow {DH,DSA,EC,RSA}.new without arguments with ↵Kazuki Yamaguchi
OpenSSL 3.0 Raise ArgumentError if this is attempted when the extension is compiled with OpenSSL 3.0 or later. The form will be fully removed when we drop support for OpenSSL 1.1.1. When OpenSSL::PKey::{DH,DSA,EC,RSA}.new is called without any arguments, it sets up an empty corresponding low-level struct and wraps it in an EVP_PKEY. This is useful when the user later fills the missing fields using low-level setter methods such as OpenSSL::PKey::RSA#set_key. Such setter methods are not compatible with OpenSSL 3.0 or later, where EVP_PKEY is immutable once created. This means that the ability to create an empty instance is useless. https://github.com/ruby/openssl/commit/affd569f78
2025-09-30ZJIT: Revert SetIvar specialization (#14673)Max Bernstein
CI passed on SetIvar but broke some larger Ruby tests. Needs further investigation and testing. * Revert "ZJIT: Fix rebase issue with tests" This reverts commit 37248c51233d827ca56471661175c56e31c3b14f. * Revert "ZJIT: Inline attr_accessor/attr_writer to SetIvar (#14629)" This reverts commit 40bb47665d3ff57e0f2eb5a9fd9e0109617015c9.
2025-09-29ZJIT: Inline attr_accessor/attr_writer to SetIvar (#14629)Max Bernstein
2025-09-26[ruby/ipaddr] Fix `#ipv4_compat` returning invalid prefixTaketo Takashima
https://github.com/ruby/ipaddr/commit/7c85bb8dfd Co-authored-by: Tietew <tietew@gmail.com>
2025-09-25ZJIT: Compile ISEQ with optional arguments (#14653)Takashi Kokubun
2025-09-25Properly unlock locked mutexes on thread cleanup.Luke Gruber
Mutexes were being improperly unlocked on thread cleanup. This bug was introduced in 050a8954395. We must keep a reference from the mutex to the thread, because if the fiber is collected before the mutex is, then we cannot unlink it from the thread in `mutex_free`. If it's not unlinked from the the thread when it's freed, it causes bugs in `rb_thread_unlock_all_locking_mutexes`. We now mark the fiber when a mutex is locked, and the thread is marked as well. However, a fiber can still be freed in the same GC cycle as the mutex, so the reference to the thread is still needed. The reason we need to mark the fiber is that `mutex_owned_p()` has an ABA issue where if the fiber is collected while it's locked, a new fiber could be allocated at the same memory address and we could get false positives. Fixes [Bug #21342] Co-authored-by: John Hawthorn <john@hawthorn.email>
2025-09-24ZJIT: Incorporate bb0-prologue and PC check into HIR (#14643)Takashi Kokubun
* ZJIT: Incorporate bb0-prologue and PC check into HIR * Fix an outdated comment * Use shallow clone for LoadPC and EntryPoint * Reproduce the actual HIR graph to pass validation * Fill out param types for jit_entry_block * Add Type::from_cptr * Add a TODO comment about Const::CPtr printing
2025-09-24Ractor.shareable_procKoichi Sasada
call-seq: Ractor.sharable_proc(self: nil){} -> sharable proc It returns shareable Proc object. The Proc object is shareable and the self in a block will be replaced with the value passed via `self:` keyword. In a shareable Proc, the outer variables should * (1) refer shareable objects * (2) be not be overwritten ```ruby a = 42 Ractor.shareable_proc{ p a } #=> OK b = 43 Ractor.shareable_proc{ p b; b = 44 } #=> Ractor::IsolationError because 'b' is reassigned in the block. c = 44 Ractor.shareable_proc{ p c } #=> Ractor::IsolationError because 'c' will be reassigned outside of the block. c = 45 d = 45 d = 46 if cond Ractor.shareable_proc{ p d } #=> Ractor::IsolationError because 'd' was reassigned outside of the block. ``` The last `d`'s case can be relaxed in a future version. The above check will be done in a static analysis at compile time, so the reflection feature such as `Binding#local_varaible_set` can not be detected. ```ruby e = 42 shpr = Ractor.shareable_proc{ p e } #=> OK binding.local_variable_set(:e, 43) shpr.call #=> 42 (returns captured timing value) ``` Ractor.sharaeble_lambda is also introduced. [Feature #21550] [Feature #21557]
2025-09-23gc_validate_pc(): Exclude imemos, add a test and explain the assertsAlan Wu
The validation is relevant only for traceable userland ruby objects ruby code could interact with. ZJIT's use of rb_vm_method_cfunc_is() allocates a CC imemo and was failing this validation when it was actually fine. Relax the check.
2025-09-22ZJIT: Guard receiver class for CCallVariadic (#14630)Takashi Kokubun
2025-09-22ZJIT: Refactor NewRangeFixnum (#14607)André Luiz Tiago Soares
## Context #14409 https://github.com/ruby/ruby/pull/14409#discussion_r2350238583 >You may have noticed that this doesn't produce a New range instruction. For that you probably need to use a local variable (makes it harder for the bytecode compiler to reason about, but the JIT sees through it). If you have time, please rewrite these tests. https://github.com/ruby/ruby/pull/14409#discussion_r2350240389 >There's some code above to do this for you: see arguments_likely_fixnums and coerce something or other ## Changes ### Refactor tests Modify tests force the usage of `NewRangeFixnum` instruction and make tests names more consistent. ### Refactor optimize ranges Didn't found `arguments_likely_fixnums` to be applicable unless we enable profiling for `NewRange` and change the criteria of when the optimization fires. But there were other ways to clean up the code. Simplify the logic and move it to `type_specialize`. Deleted the standalone `optimize_ranges` function.
2025-09-21Exclude failing GC finalizer tests with ASANBenoit Daloze
* See https://bugs.ruby-lang.org/issues/21613
2025-09-19ZJIT: Fix opt_{hash,ary,str}_{freeze,uminus}Max Bernstein
The stack layout is incompatible with the way we reify the stack for generating fallback SendWithoutBlock: the receiver is an embedded VALUE in the bytecode, not on the stack. Since we don't expect these to be overridden often, instead of fussing about with the stack layout, just hope for the best and PatchPoint/SideExit. Fix https://github.com/Shopify/ruby/issues/760
2025-09-19[ruby/prism] Fix up locals test skip nameKevin Newton
https://github.com/ruby/prism/commit/d1b22f59a0
2025-09-19[ruby/prism] Turn off failing test for parse.yKevin Newton
https://github.com/ruby/prism/commit/cb27f5a70a
2025-09-19[ruby/prism] Reject argument command call taking a block with more trailing ↵Earlopain
arguments https://bugs.ruby-lang.org/issues/21168#note-5 The added code samples align with `parse.y`, except for `foo(bar baz do end)` which `parse.y` currently rejects but shouldn't. https://github.com/ruby/prism/commit/3a4e102d80
2025-09-19`JSON::Coder` callback now recieve a second argument to mark object keysJean Boussier
e.g. ```ruby { 1 => 2 } ``` The callback will be invoked for `1` as while it has a native JSON equivalent, it's not legal as an object name.
2025-09-19[ruby/json] Avoid scientific notation before exponent 15Jean Boussier
Fix: https://github.com/ruby/json/issues/861 It's not incorrect to use scientific notation, but it tend to throw people off a bit, so it's best to keep it for very large numbers. https://github.com/ruby/json/commit/1566cd01a6
2025-09-19[ruby/json] fix issue reading off the end of the ByteBuffer if ptr > 0Scott Myron
Fix: https://github.com/ruby/json/issues/859 https://github.com/ruby/json/commit/67ebabec75 Co-Authored-By: Jean Boussier <jean.boussier@gmail.com>
2025-09-19[ruby/json] Only enable test coverage when running the test suite standaloneJean Boussier
https://github.com/ruby/json/commit/08b9eb0ee6
2025-09-19[ruby/json] Add branch test coverage when available. Force track all files ↵Robin Miller
to prevent implicit file discovery missing files. https://github.com/ruby/json/commit/6bded942c4
2025-09-19[ruby/json] parser: Reject invalid surogate pairs more consistently.Jean Boussier
https://github.com/ruby/json/commit/5855f4f603
2025-09-18ZJIT: Compile sendforward with dynamic dispatch (#14501)Takashi Kokubun
* ZJIT: Compile sendforward with dynamic dispatch * Reload locals only if it has blockiseq * Add a test case of ... with other args
2025-09-18Prevent GC from running during `newobj_of` for internal_event_newobj.Luke Gruber
If another ractor is calling for GC, we need to prevent the current one from joining the barrier. Otherwise, our half-built object will be marked. The repro script was: test.rb: ```ruby require "objspace" 1000.times do ObjectSpace.trace_object_allocations do r = Ractor.new do _obj = 'a' * 1024 end r.join end end ``` $ untilfail lldb -b ./exe/ruby -o "target create ./exe/ruby" -o "run test.rb" -o continue It would fail at `ractor_port_mark`, rp->r was a garbage value. Credit to John for finding the solution. Co-authored-by: John Hawthorn <john.hawthorn@shopify.com>
2025-09-18ZJIT: Support variadic C calls (#14575)Stan Lo
* ZJIT: Support variadic C calls This reduces the `dynamic_send_count` in `liquid-render` by ~21% * ZJIT: Reuse gen_push_frame * ZJIT: Avoid optimizing variadic C call when tracing is enabled
2025-09-18Remove test causing warningÉtienne Barrié
The test is no longer useful since 5c7dfe85a1dc49334e2828791f0ade42eee662db because Module#initialize_copy is empty/not defined anymore.
2025-09-17ZJIT: Prevent custom allocator in ObjectAllocClassMax Bernstein
2025-09-17ZJIT: Const-fold IsMethodCfuncMax Bernstein
2025-09-17Unset RUBY_CRASH_REPORT in tests that crash on purposeAlan Wu
2025-09-17[ruby/prism] Reject `1 if foo = bar baz`Earlopain
and also `1 and foo = bar baz` This is a partial fix for https://github.com/ruby/prism/issues/3106 It still accepts `a = b c and 1` https://github.com/ruby/prism/commit/7a13d3535b
2025-09-17Skip TestObjSpaceRactor#test_tracing_does_not_crashPeter Zhu
It crashes frequently on CI but I am not able to reproduce locally: https://ci.rvm.jp/results/trunk-random1@ruby-sp2-noble-docker/5954509 https://ci.rvm.jp/results/trunk-random0@ruby-sp2-noble-docker/5954501
2025-09-17[ruby/openssl] Fix test_ssl.rb in FIPS.Jun Aruga
test_post_connect_check_with_anon_ciphers: test_tmp_dh_callback: test_tmp_dh: DH missing the q value on unknown named parameters (ciphers) is not FIPS-approved, according to the FIPS-186-4 APPENDIX B: Key Pair Generation - B.1.1 Key Pair Generation Using Extra Random Bits, the inputs p, q, and g are required. However, TLS doesn't send q. https://csrc.nist.gov/pubs/fips/186-4/final OpenSSL has a special workaround to recover the missing "q" value for known named parameters, which is the reason why other tests that use the default parameters in `lib/openssl/ssl.rb` are working. Note that the test_post_connect_check_with_anon_ciphers test got the following error on `OpenSSL.debug = true` in FIPS. ``` /home/jaruga/var/git/ruby/openssl/lib/openssl/ssl.rb:551: warning: error on stack: error:0A0C0103:SSL routines:tls_construct_server_key_exchange:internal error ``` test_get_ephemeral_key: kRSA (PKCS1-v1_5 padding) is not allowed in FIPS according to the NIST SP 800-131A Rev. 2 - 6 Key Agreement and Key Transport Using RSA - Table 5: Approval Status for the RSA-based Key Agreement and Key Transport Schemes - PKCS1-v1_5 padding - Disallowed after 2023 https://csrc.nist.gov/pubs/sp/800/131/a/r2/final Note that the test_get_ephemeral_key test got the following error on `OpenSSL.debug = true` in FIPS. ``` test/openssl/test_ssl.rb:2326: warning: error on stack: error:1C8000A8:Provider routines:rsa_encrypt:invalid padding mode ``` https://github.com/ruby/openssl/commit/ac3559e51e
2025-09-17[ruby/openssl] Add AuthTagError exception for AEAD authenticationSamuel Williams
failures (https://github.com/ruby/openssl/pull/939) * Add AuthTagError exception for AEAD authentication failures - Add OpenSSL::Cipher::AuthTagError as a subclass of CipherError - Raise AuthTagError specifically for AEAD cipher authentication tag verification failures - Enhanced error messages: 'AEAD authentication tag verification failed' for auth failures - Precise detection: Only EVP_CipherFinal_ex failures in AEAD ciphers raise AuthTagError - All other errors (key setup, IV setup, update failures, etc.) still raise CipherError - Comprehensive test coverage for GCM/CCM modes and error inheritance - Fully backwards compatible: AuthTagError < CipherError https://github.com/ruby/openssl/commit/9663b09040
2025-09-17[ruby/openssl] Revert "pkey: stop retrying after non-retryable error from ↵Kazuki Yamaguchi
OSSL_DECODER" This reverts commit https://github.com/ruby/openssl/commit/5347880c6eb0 and https://github.com/ruby/openssl/commit/985ba27d6339. These commits attempted to stop processing after the first relevant PEM block, whether it is successful or not, when the input contains multiple keys. It turned out that it cannot be reliably determined using the OSSL_DECODER API. There is an edge case where OSSL_DECODER_from_bio() reports "unsupported" even though the input actually contains an error: https://redirect.github.com/ruby/openssl/pull/931#discussion_r2347813807 Revert the changes for now and keep the existing behavior, as partial support does not seem worth the added complexity. https://github.com/ruby/openssl/commit/319cd4952a
2025-09-17Revert "Handle `uninitialized constant JSON::GenericObject` at ruby/ruby."Hiroshi SHIBATA
This reverts commit 0dc1cd407e7775610f2bcaef6c1282369867f91c. 1213adfe5526d65cce81a9fb127074130c8faea7 is fixed this issue.
2025-09-16[ruby/json] Better handle missing ostructÉtienne Barrié
In the Ruby test suite, this test class is causing trouble because ostruct is not available. Having an autoload for JSON::GenericObject but causing it not to define the constant causes a warning. See https://github.com/ruby/json/commit/0dc1cd407e77 and https://github.com/ruby/json/commit/caa5d8cdd748 in ruby. We can skip defining the test class entirely instead when ostruct is not available. https://github.com/ruby/json/commit/6f6a4cdfd7