summaryrefslogtreecommitdiff
path: root/test
AgeCommit message (Collapse)Author
2024-11-14[ruby/uri] Removed duplicated declare step for constants under the ↵Hiroshi SHIBATA
URI::RFC2396_REGEXP::PATTERN https://github.com/ruby/uri/commit/60a8bc1575
2024-11-14[ruby/uri] Restore constants like URI::REGEXP::PATTERN::IPV6ADDRHiroshi SHIBATA
https://github.com/ruby/uri/commit/ee9a38701a
2024-11-13Move Array#map to RubyTakashi Kokubun
Co-Authored-By: Aaron Patterson <tenderlove@ruby-lang.org> Notes: Merged: https://github.com/ruby/ruby/pull/12074
2024-11-13[ruby/openssl] make bn shareable when frozenHoneyryderChuck
https://github.com/ruby/openssl/commit/d3c8e661e8
2024-11-12ObjectSpace.dump: handle Module#set_temporary_nameJean Boussier
[Bug #20892] Until the introduction of that method, it was impossible for a Module name not to be valid JSON, hence it wasn't going through the slower escaping function. This assumption no longer hold. Notes: Merged: https://github.com/ruby/ruby/pull/12067
2024-11-12[ruby/prism] Fix use of uninitialized value when parsing regexpPeter Zhu
Parsing the regexp /\A{/ causes uses an uninitialized value because it tries to parse it as a range quantifier, so it reads the character after the closing curly bracket. This is using uninitialized values because prism strings are not null terminated. This can be seen in the Valgrind output: ==834710== Conditional jump or move depends on uninitialised value(s) ==834710== at 0x5DA010: pm_regexp_parse_range_quantifier (regexp.c:163) ==834710== by 0x5DA010: pm_regexp_parse_quantifier (regexp.c:243) ==834710== by 0x5DAD69: pm_regexp_parse_expression (regexp.c:738) ==834710== by 0x5DAD69: pm_regexp_parse_pattern (regexp.c:761) ==834710== by 0x5DAD69: pm_regexp_parse (regexp.c:773) ==834710== by 0x5A2EE7: parse_regular_expression_named_captures (prism.c:20886) ==834710== by 0x5A2EE7: parse_expression_infix (prism.c:21388) ==834710== by 0x5A5FA5: parse_expression (prism.c:21804) ==834710== by 0x5A64F3: parse_statements (prism.c:13858) ==834710== by 0x5A9730: parse_program (prism.c:22011) ==834710== by 0x576F0D: parse_input_success_p (extension.c:1062) ==834710== by 0x576F0D: parse_success_p (extension.c:1084) This commit adds checks for the end of the string to pm_regexp_parse_range_quantifier. https://github.com/ruby/prism/commit/be6cbc23ef
2024-11-12Allow Net::HTTP#request to raise Net::OpenTimeout (#12062)Misaki Shioi
with a TCPSoerver that is only listening to avoid AssertionFailedError on Ubuntu. --- The tests such as `TestNetHTTP_v1_2_chunked#test_timeout_during_non_chunked_streamed_HTTP_session_write` expect to raise a `Net::WriteTimeout` due to a failure in writing to the server. However, on Ubuntu environments, the server immediately returns a "Connection Refused" in such cases. The socket created with `TCPSocket.new` that supports HEv2 catches this immediately and raises a `Net::OpenTimeout`. As a result, these tests fail due to raising a different exception than expected. This PR adds `Net::OpenTimeout` asexceptions to avoid these test failures. Notes: Merged-By: shioimm <shioi.mm@gmail.com>
2024-11-11Fix regex timeout double-free after stack_doubleJohn Hawthorn
As of 10574857ce167869524b97ee862b610928f6272f, it's possible to crash on a double free due to `stk_alloc` AKA `msa->stack_p` being freed twice, once at the end of match_at and a second time in `FREE_MATCH_ARG` in the parent caller. Fixes [Bug #20886] Notes: Merged: https://github.com/ruby/ruby/pull/12030
2024-11-12[ruby/pp] Handle BasicObjectJean Boussier
Right now attempting to pretty print a BasicObject or any other object lacking a few core Object methods will result in an error ``` Error: test_basic_object(PPTestModule::PPInspectTest): NoMethodError: undefined method `is_a?' for an instance of BasicObject lib/pp.rb:192:in `pp' lib/pp.rb:97:in `block in pp' lib/pp.rb:158:in `guard_inspect_key' lib/pp.rb:97:in `pp' test/test_pp.rb:131:in `test_basic_object' 128: 129: def test_basic_object 130: a = BasicObject.new => 131: assert_match(/\A#<BasicObject:0x[\da-f]+>\n\z/, PP.pp(a, ''.dup)) 132: end 133: end 134: ``` With some fairly small changes we can fallback to `Object#inspect` which is better than an error. https://github.com/ruby/pp/commit/4e9f6c2de0
2024-11-12[ruby/pp] Data#pretty_print handle privated or removed membersJean Boussier
[Bug #20808] The previous implementation assumed all members are accessible, but it's possible for users to change the visibility of members or to entirely remove the accessor. https://github.com/ruby/pp/commit/fb19501434
2024-11-12[Feature #120782] Introduction of Happy Eyeballs Version 2 (RFC8305) in ↵Misaki Shioi
TCPSocket.new (#11653) * Introduction of Happy Eyeballs Version 2 (RFC8305) in TCPSocket.new This is an implementation of Happy Eyeballs version 2 (RFC 8305) in `TCPSocket.new`. See https://github.com/ruby/ruby/pull/11653 1. Background Prior to this implementation, I implemented Happy Eyeballs Version 2 (HEv2) for `Socket.tcp` in https://github.com/ruby/ruby/pull/9374. HEv2 is an algorithm defined in [RFC 8305](https://datatracker.ietf.org/doc/html/rfc8305), aimed at improving network connectivity. For more details on the specific cases that HEv2 helps, please refer to https://bugs.ruby-lang.org/issues/20108. 2. Proposal & Outcome This proposal implements the same HEv2 algorithm in `TCPSocket.new`. Since `TCPSocket.new` is used more widely than `Socket.tcp`, this change is expected to broaden the impact of HEv2's benefits. Like `Socket.tcp`, I have also added `fast_fallback` keyword argument to `TCPSocket.new`. This option is set to true by default, enabling the HEv2 functionality. However, users can explicitly set it to false to disable HEv2 and use the previous behavior of `TCPSocket.new`. It should be noted that HEv2 is enabled only in environments where pthreads are available. This specification follows the approach taken in https://bugs.ruby-lang.org/issues/19965 , where name resolution can be interrupted. (In environments where pthreads are not available, the `fast_fallback` option is ignored.) 3. Performance Below is the benchmark of 100 requests to `www.ruby-lang.org` with the fast_fallback option set to true and false, respectively. While there is a slight performance degradation when HEv2 is enabled, the degradation is smaller compared to that seen in `Socket.tcp`. ``` ~/s/build ❯❯❯ ../install/bin/ruby ../ruby/test.rb Rehearsal -------------------------------------------------------- fast_fallback: true 0.017588 0.097045 0.114633 ( 1.460664) fast_fallback: false 0.014033 0.078984 0.093017 ( 1.413951) ----------------------------------------------- total: 0.207650sec user system total real fast_fallback: true 0.020891 0.124054 0.144945 ( 1.473816) fast_fallback: false 0.018392 0.110852 0.129244 ( 1.466014) ``` * Update debug prints Co-authored-by: Nobuyoshi Nakada <nobu.nakada@gmail.com> * Remove debug prints * misc * Disable HEv2 in Win * Raise resolution error with hostname resolution * Fix to handle errors * Remove warnings * Errors that do not need to be handled * misc * Improve doc * Fix bug on cancellation * Avoid EAI_ADDRFAMILY for resolving IPv6 * Follow upstream * misc * Refactor connection_attempt_fds management - Introduced allocate_connection_attempt_fds and reallocate_connection_attempt_fds for improved memory allocation of connection_attempt_fds - Added remove_connection_attempt_fd to resize connection_attempt_fds dynamically. - Simplified the in_progress_fds function to only check the size of connection_attempt_fds. * Rename do_pthread_create to raddrinfo_pthread_create to avoid conflicting --------- Co-authored-by: Nobuyoshi Nakada <nobu.nakada@gmail.com> Notes: Merged-By: shioimm <shioi.mm@gmail.com>
2024-11-11[ruby/json] Fix $VERBOSE restorePeter Zhu
Manually sync this commit that was missed. https://github.com/ruby/json/commit/6ae9155
2024-11-11[ruby/reline] Refactor perform_completontomoya ishida
(https://github.com/ruby/reline/pull/778) Flatten recursive method Remove CompletionState::COMPLETE https://github.com/ruby/reline/commit/aa5b278f3d
2024-11-11[ruby/json] JSON.load_file: explictly load the file as UTF-8Jean Boussier
Fix: https://github.com/ruby/json/issues/697 This way even if `Encoding.default_external` is set to a weird value the document will be parsed just fine. https://github.com/ruby/json/commit/3a8505a8fa
2024-11-11[ruby/fiddle] Accept Symbol as Function name againSutou Kouhei
GitHub: fix https://github.com/ruby/fiddle/pull/159 It's used by FFI test. So Symbol may be used by other use cases. https://github.com/ruby/fiddle/pull/139 introduced the "Function name is String" limitation. This commit removed the limitation. Reported by Mamoru TASAKA. Thanks!!! https://github.com/ruby/fiddle/commit/cea30fe5f9
2024-11-10[ruby/reline] Remove unused things from reline/unicode.rbtomoya ishida
(https://github.com/ruby/reline/pull/759) * Remove garbage(nil) from Reline::Unicode.split_by_width result * Remove unused width from Reline::Unicode vi_ ed_ em_ method return value * Remove unused height from Unicode.split_by_width return value * Rename split_by_width to split_line_by_width and add legacy split_by_width for IRB https://github.com/ruby/reline/commit/f32446ebc4
2024-11-08Fix race condition in test_self_stopKJ Tsanaktsidis
This test was relying on a sleep to synchronise the parent and child processes. By having the child be the process that stops itself with SIGSTOP, instead of the parent, we can actually properly wait for that using waitpid2 and be notified of the stop. This use of sleep to synchronise processes is potentially flaky and caused failures under rr's `--chaos` mode. Notes: Merged: https://github.com/ruby/ruby/pull/12042
2024-11-08Fix update_coderange for binary stringsJohn Hawthorn
Although a binary (aka ASCII-8BIT) string will never have a broken coderange, it still has to differentiate between "valid" and "7bit". On Ruby 3.4/trunk this problem is masked because we now clear the coderange more agressively in rb_str_resize, and we happened to always be strinking this string, but we should not assume that. On Ruby 3.3 this created strings where `ascii_only?` was true in cases it shouldn't be as well as other problems. Fixes [Bug #20883] Co-authored-by: Daniel Colson <danieljamescolson@gmail.com> Co-authored-by: Matthew Draper <matthew@trebex.net> Notes: Merged: https://github.com/ruby/ruby/pull/12029
2024-11-08Fix memory leak in prism when syntax error in iseq compilationPeter Zhu
If there's a syntax error during iseq compilation then prism would leak memory because it would not free the pm_parse_result_t. This commit changes pm_iseq_new_with_opt to have a rb_protect to catch when an error is raised, and return NULL and set error_state to a value that can be raised by calling rb_jump_tag after memory has been freed. For example: 10.times do 10_000.times do eval("/[/=~s") rescue SyntaxError end puts `ps -o rss= -p #{$$}` end Before: 39280 68736 99232 128864 158896 188208 217344 246304 275376 304592 After: 12192 13200 14256 14848 16000 16000 16000 16064 17232 17952 Notes: Merged: https://github.com/ruby/ruby/pull/12036
2024-11-08[ruby/prism] Fix splat after kwsplatHaldun Bayhantopcu
https://github.com/ruby/prism/commit/70c1cd480f
2024-11-08Avoid calculating large powersYusuke Endoh
... for slow CI machines like macOS.
2024-11-08Do not round `a**b` to infinityYusuke Endoh
... instead, just calculate the value unless it is too big. Also, this change raises an ArgumentError if it is expected to exceed 16 GB in a 64-bit environment. (It is possible to calculate it straightforward, but it would likely be out-of-memory, so I didn't think it would make sense.) [Feature #20811] Notes: Merged: https://github.com/ruby/ruby/pull/12033
2024-11-08[ruby/uri] Added more fallback constants like URI::PARTTERN and URI::REGEXPHiroshi SHIBATA
Fixed https://github.com/ruby/uri/issues/125 https://github.com/ruby/uri/commit/1f3d3df02a
2024-11-08[ruby/reline] Windows fix (https://github.com/ruby/reline/pull/775)YO4
* test_yamatanooroti: close tempfile before unlink * test_yamatanooroti: omit because of windows does not support job control * test_yamatanooroti: change startup message detection for windows * windows.rb: can call win32api using nil as NULL for pointer argument Exception occurred when interrupted with Ctrl+C on legacy conhost * windows.rb: fix get_screen_size return [window height, buffer width] insted of [buffer height, buffer width] * windows.rb: import scroll_down() from ansi.rb * windows.rb: add auto linewrap control if VT output not supported (legacy console) * unfreeze WIN32API pointer arguments They internally duplicate arguments so api functions write to another place. This breaks the console mode detection with ruby-head. * remove useless code from Win32API#call argument repacking and return value tweaking is not needed for Reline::Windows requirements. * Correctly handle top of console viewport * Revert "remove useless code from Win32API#call" This reverts commit https://github.com/ruby/reline/commit/060ba140ed43. * Revert "windows.rb: can call win32api using nil as NULL for pointer argument" This reverts commit https://github.com/ruby/reline/commit/93a23bc5d0c9. https://github.com/ruby/reline/commit/47c1ffbabe
2024-11-08[ruby/benchmark] Adjust ljust Benchmark#bm with labels was not using the ↵Kaíque Kandy Koga
highest length among the labels to adjust the correct ljust. Instead of printing the result during the report generation, now it is waiting to print the result once it is generated. Benchmark.bm { |x| x.item("aaaa") { 1 } x.item("aaaaaaaa") { 0 } } After user system total real aaaa 0.000005 0.000002 0.000007 ( 0.000003) aaaaaaaa 0.000001 0.000001 0.000002 ( 0.000002) Before user system total real aaaa 0.000005 0.000001 0.000006 ( 0.000003) aaaaaaaa 0.000002 0.000001 0.000003 ( 0.000003) https://github.com/ruby/benchmark/commit/3e74533ead
2024-11-07[Bug #20869] Discard read buffer and encoding converters at seekingNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/12023
2024-11-07[Bug #20802] Copy encodings at reopen as wellNobuyoshi Nakada
Notes: Merged: https://github.com/ruby/ruby/pull/12022
2024-11-07Prevent method redefinition warnings in testYusuke Endoh
2024-11-07Prevent a warning: ambiguous `/`Yusuke Endoh
2024-11-07[ruby/logger] Enable subclasses to configure level isolationHartley McGuire
(https://github.com/ruby/logger/pull/103) `Logger#with_level` was recently added to enable configuring a `Logger`'s level for the duration of a block. However, the configured level is always tied to the currently running `Fiber`, which is not always ideal in applications that mix `Thread`s and `Fiber`s. For example, Active Support has provided a similar feature (`ActiveSupport::Logger#log_at`) which, depending on configuration, can be isolated to either `Thread`s or `Fiber`s. This commit enables subclasses of `Logger` to customize the level isolation. Ideally, it will enable replacing most of Active Support's `#log_at`, since both methods end up serving the same purpose. https://github.com/ruby/logger/commit/dae2b832cd
2024-11-06[ruby/json] Categorize deprecated warningNobuyoshi Nakada
https://github.com/ruby/json/commit/1acce7aceb
2024-11-06io_buffer.c: Allow copies between overlapping buffers with #copy and ↵Kasumi Hanazuki
#set_string (#11640) The current implementation of `IO::Buffer#copy` and `#set_string` has an undefined behavior when the source and destination memory overlaps, due to the underlying use of the `memcpy` C function. This patch guarantees the methods to be safe even when copying between overlapping buffers by replacing `memcpy` with `memmove`, Fixes: [Bug #20745] Notes: Merged-By: ioquatix <samuel@codeotaku.com>
2024-11-06[Bug #20868] Fix Method#hash to not change after compactionPeter Zhu
The hash value of a Method must remain constant after a compaction, otherwise it may not work as the key in a hash table. For example: def a; end # Need this method here because otherwise the iseq may be on the C stack # which would get pinned and not move during compaction def get_hash method(:a).hash end puts get_hash # => 2993401401091578131 GC.verify_compaction_references(expand_heap: true, toward: :empty) puts get_hash # => -2162775864511574135 Notes: Merged: https://github.com/ruby/ruby/pull/12004
2024-11-06Fix flakiness in TestGc#test_thrashing_for_young_objectsKJ Tsanaktsidis
I caught a reproduction of this test failing under rr, and was able to replay it to isolate the failure. The call to `before_stat_heap = GC.stat_heap` is itself allocating a hash, which in unlucky circumstances can result in a new page being allocated and thus `before_stats[:heap_allocated_pages]` no longer equals `after_stats[:heap_allocated_pages]`. The solution is to use the form of GC.stat/stat_heap which takes a hash as an argument, and thus needs to perform no Ruby allocations itself. Notes: Merged: https://github.com/ruby/ruby/pull/11997
2024-11-06[rubygems/rubygems] Fix manifest in gem package using incorrect platform ↵David Rodríguez
sometimes If a gem package is built from a specification whose platform has been modified, it will include metadata using the old platform. This change should fix the problem by making sure `original_platform` is always properly set. https://github.com/rubygems/rubygems/commit/ecd5cd4547
2024-11-06Revert "Introduce Fiber Scheduler `blocking_region` hook. (#11963)" (#12013)Samuel Williams
This reverts some of commit 87fb44dff6409a19d12052cf0fc07ba80a4c45ac. We will rename and propose a slightly different interface. Notes: Merged-By: ioquatix <samuel@codeotaku.com>
2024-11-06macOS 15 is the stable version todayHiroshi SHIBATA
2024-11-06[Bug #20873] Consider `-FIXNUM_MIN` overflowNobuyoshi Nakada
`-FIXNUM_MIN` is usually greater than `FIXNUM_MAX` on platforms using two's complement representation. Notes: Merged: https://github.com/ruby/ruby/pull/12011
2024-11-06`Warning[:strict_unused_block]`Koichi Sasada
to show unused block warning strictly. ```ruby class C def f = nil end class D def f = yield end [C.new, D.new].each{|obj| obj.f{}} ``` In this case, `D#f` accepts a block. However `C#f` doesn't accept a block. There are some cases passing a block with `obj.f{}` where `obj` is `C` or `D`. To avoid warnings on such cases, "unused block warning" will be warned only if there is not same name which accepts a block. On the above example, `C.new.f{}` doesn't show any warnings because there is a same name `D#f` which accepts a block. We call this default behavior as "relax mode". `strict_unused_block` new warning category changes from "relax mode" to "strict mode", we don't check same name methods and `C.new.f{}` will be warned. [Feature #15554] Notes: Merged: https://github.com/ruby/ruby/pull/12005
2024-11-05[ruby/json] Appease ruby/ruby CIJean Boussier
https://github.com/ruby/json/commit/bc2c970ce4 Notes: Merged: https://github.com/ruby/ruby/pull/12003
2024-11-05[ruby/json] Strip whitespacesJean Boussier
https://github.com/ruby/json/commit/e85107197b Notes: Merged: https://github.com/ruby/ruby/pull/12003
2024-11-05[ruby/json] ResyncJean Boussier
Notes: Merged: https://github.com/ruby/ruby/pull/12003
2024-11-05[ruby/json] Re-enable passing testBenoit Daloze
https://github.com/ruby/json/commit/82d21f01c5 Notes: Merged: https://github.com/ruby/ruby/pull/12003
2024-11-05[ruby/json] Add tests for the behavior of JSON.generate with base types ↵Jean Boussier
subclasses Ref: https://github.com/ruby/json/pull/674 Ref: https://github.com/ruby/json/pull/668 The behavior on such case it quite unclear, the goal here is to figure out whatever was the behavior on Cext version of `json 2.7.0` and get all implementations to converge. We can then decide to make them all behave differently if we so wish. https://github.com/ruby/json/commit/614921dcef Notes: Merged: https://github.com/ruby/ruby/pull/12003
2024-11-05[ruby/json] JSON::Ext::Parser mark the name cache entries when not on the heapJean Boussier
This is somewhat dead code as unless you are using `JSON::Parser.new` direcltly we never allocate `JSON::Ext::Parser` anymore. But still, we should mark all its reference in case some code out there uses that. Followup: #675 https://github.com/ruby/json/commit/8bf74a977b Notes: Merged: https://github.com/ruby/ruby/pull/12003
2024-11-05Use wide character startupNobuyoshi Nakada
Mingw crt-git 12.0.0.r369.g0d4221712-1 now prohibits "command line contains characters that are not supported in the active code page". https://sourceforge.net/p/mingw-w64/mingw-w64/ci/0d42217123d3aec0341b79f6d959c76e09648a1e/ Already Ruby builds `argv` in `rb_w32_sysinit`, instead of mswin- or mingw-made `argv`. Just bypass the conversion in mingw crt.
2024-11-05[ruby/stringio] Copy from the relocated stringNobuyoshi Nakada
When ungetting the string same as the same buffer string, extending the buffer can move the pointer in the argument. Reported by manun Manu (manun) at https://hackerone.com/reports/2805165. https://github.com/ruby/stringio/commit/95c1194832
2024-11-05[ruby/date] Refine assertionsNobuyoshi Nakada
https://github.com/ruby/date/commit/1970b740d0
2024-11-05[ruby/date] Fix incorrect argc2 decrement in datetime_s_iso8601 functionDmitrii Zudin
Replace the decrement (argc2--) with an increment (argc2++) for the correct number of arguments when opt is provided. https://github.com/ruby/date/commit/b6974b00d8
2024-11-04[ruby/rdoc] Display class ancestors in the sidebar #1183Alexis Bernard
https://github.com/ruby/rdoc/commit/50dda13426