summaryrefslogtreecommitdiff
path: root/ext
AgeCommit message (Collapse)Author
2025-03-16merge revision(s) 2b6fc9ea7212543a1be26768403f59c7a759b5ea: [Backport #21092]nagachika
[Bug #21092] Fallback variables after execonf has done When reading from a dummy makefile, the global variables initialized in `init_mkmf` may not be overridden.
2024-11-12ObjectSpace.dump: handle Module#set_temporary_name (#12068)Jean byroot Boussier
ObjectSpace.dump: handle Module#set_temporary_name [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. Co-authored-by: Jean Boussier <jean.boussier@gmail.com>
2024-11-04merge revision(s) 0d16c36d0ab2afa2ec79b72b229e69c141ebdaba: [Backport #13831]Jonathan Calvert
[win32/registry] Fallback to UTF-8 for unknown codepages There are some codepages like cp708 for which no ruby encoding exists: $ ruby -e "Encoding.find('cp708')" Traceback (most recent call last): 1: from -e:1:in `<main>' -e:1:in `find': unknown encoding name - cp708 (ArgumentError) win32/registry uses ENCODING to transcode error messages and expand environment variables from UTF-16LE, so using UTF-8 seems like the best choice and is better than a hard failure. This should resolve [Bug #13831]
2024-09-04Merge JSON 2.7.2 for Ruby 3.3 (#11541)Hiroshi SHIBATA
Merge JSON 2.7.2
2024-09-02merge revision(s) 97449338d6cb42d9dd7c9ca61550616e7e6b6ef6: [Backport #20649]Takashi Kokubun
[Bug #20649] Allow `nil` as 2nd argument of `assign_error` Fallback to the last token element in that case, for the backward compatibilities.
2024-07-09retry on cancelling of `getaddrinfo` (#11131)Koichi Sasada
When the registerred unblock function is called, it should retry the cancelled blocking function if possible after checkints. For example, `SIGCHLD` can cancel this method, but it should not raise any exception if there is no trap handlers. The following is repro-code: ```ruby require 'socket' PN = 10_000 1000000.times{ p _1 PN.times{ fork{ sleep rand(0.3) } } i = 0 while i<PN cpid = Process.wait -1, Process::WNOHANG if cpid # p [i, cpid] i += 1 end begin TCPServer.new(nil, 0).close rescue p $! exit! end end } ```
2024-07-08merge revision(s) fba8aff7, d8c6e91748871ab2287d7703347847fe18a292d2: ↵Takashi Kokubun
[Backport #20592] [Bug #20592] Fix segfault when sending NULL to freeaddrinfo On alpine freeaddrinfo does not accept NULL pointer Fix dangling `else`
2024-06-04merge revision(s) f54369830f83a65fb54916d762883fbe6eeb7d0b, ↵Takashi Kokubun
338eb0065bd81ba8ae8b9402abc94804a24594cc, ac636f5709feb1d9d7a0c46a86be153be765cf21: [Backport #20516] Revert "Rollback to released version numbers of stringio and strscan" This reverts commit 6a79e53823e328281b9e9eee53cd141af28f8548. [ruby/strscan] StringScanner#captures: Return nil not "" for unmached capture (https://github.com/ruby/strscan/pull/72) fix https://github.com/ruby/strscan/issues/70 If there is no substring matching the group (s[3]), the behavior is different. If there is no substring matching the group, the corresponding element (s[3]) should be nil. ``` s = StringScanner.new('foobarbaz') #=> #<StringScanner 0/9 @ "fooba..."> s.scan /(foo)(bar)(BAZ)?/ #=> "foobar" s[0] #=> "foobar" s[1] #=> "foo" s[2] #=> "bar" s[3] #=> nil s.captures #=> ["foo", "bar", ""] s.captures.compact #=> ["foo", "bar", ""] ``` ``` s = StringScanner.new('foobarbaz') #=> #<StringScanner 0/9 @ "fooba..."> s.scan /(foo)(bar)(BAZ)?/ #=> "foobar" s[0] #=> "foobar" s[1] #=> "foo" s[2] #=> "bar" s[3] #=> nil s.captures #=> ["foo", "bar", nil] s.captures.compact #=> ["foo", "bar"] ``` https://docs.ruby-lang.org/ja/latest/method/MatchData/i/captures.html ``` /(foo)(bar)(BAZ)?/ =~ "foobarbaz" #=> 0 $~.to_a #=> ["foobar", "foo", "bar", nil] $~.captures #=> ["foo", "bar", nil] $~.captures.compact #=> ["foo", "bar"] ``` * StringScanner#captures is not yet documented. https://docs.ruby-lang.org/ja/latest/class/StringScanner.html https://github.com/ruby/strscan/commit/1fbfdd3c6f [ruby/strscan] Bump version https://github.com/ruby/strscan/commit/d6f97ec102
2024-05-29[ruby/zlib] Bump up 3.1.1Takashi Kokubun
2024-05-29merge revision(s) 9f8f32bf9f3758ba67dd2afe7e07d9eccb68bbc7: [Backport #20289]Takashi Kokubun
[ruby/zlib] In Zlib::GzipReader#eof? check if we're actually at eof Only consider it eof if we read ahead and something fills the buf. If not, we may only have empty blocks and the footer. Fixes https://github.com/ruby/zlib/pull/56 https://github.com/ruby/zlib/commit/437bea8003
2024-05-29merge revision(s) 7e4b1f8e1935a10df3c41ee60ca0987d73281126: [Backport #20322]Takashi Kokubun
[Bug #20322] Fix rb_enc_interned_str_cstr null encoding The documentation for `rb_enc_interned_str_cstr` notes that `enc` can be a null pointer, but this currently causes a segmentation fault when trying to autoload the encoding. This commit fixes the issue by checking for NULL before calling `rb_enc_autoload`.
2024-05-29Initialize errno variables and fix maybe-uninitialized warningsNobuyoshi Nakada
2024-03-21merge revision(s) ae8990aef098410ecc2b5f48fea9d7d171a3c5f6: [Backport ↵NARUSE, Yui
#20183] (#10310) Alias init functions The extension library has each initialization function named "Init_" + basename. If multiple extensions have the same base name (such as cgi/escape and erb/escape), the same function will be registered for both names. To fix this conflict, rename the initialization functions under sub directories using using parent names, when statically linking.
2024-03-14[Bug #20208] Revert "Set AI_ADDRCONFIG when making getaddrinfo(3) calls for ↵KJ Tsanaktsidis
outgoi… (#9791) Revert "Set AI_ADDRCONFIG when making getaddrinfo(3) calls for outgoing conns" This reverts commit 673ed41c81cf5a6951bcb2c3dec82d7bd6ea7440.
2024-03-14merge revision(s) 6c0e58a54e3fda604386d9c409e2a9998bbc9352: [Backport ↵NARUSE, Yui
#20198] (#10252) Make sure the correct error is raised for EAI_SYSTEM resolver fail In case of EAI_SYSTEM, getaddrinfo is supposed to set more detail in errno; however, because we call getaddrinfo on a thread now, and errno is threadlocal, that information is being lost. Instead, we just raise whatever errno happens to be on the calling thread (which can be something very confusing, like `ECHILD`). Fix it by explicitly propagating errno back to the calling thread through the getaddrinfo_arg structure. [Bug #20198] --- ext/socket/raddrinfo.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-)
2024-03-04merge revision(s) 051a874325c177e040301878069c2b28f5d06ce6: [Backport #20096]NARUSE, Yui
Fix memory overread in registry.rb The terminator is not actually getting filled in; we're simply passing (two) bytes of empty memory as the NUL terminator. This can lead to garbage characters getting written to registry values. Fix this by explicitly putting a WCHAR_NUL character into the string to be sent to the registry API, like we do in the MULTI_SZ case. [Bug #20096] --- ext/win32/lib/win32/registry.rb | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)
2024-02-03merge revision(s) 1bd98c820da46a05328d2d53b8f748f28e7ee8f7: [Backport ↵NARUSE, Yui
#20172] (#9798) Remove setaffinity of pthread for getaddrinfo It looks like `sched_getcpu(3)` returns a strange number on some (virtual?) environments. I decided to remove the setaffinity mechanism because the performance does not appear to degrade on a quick benchmark even if removed. [Bug #20172] --- ext/socket/extconf.rb | 2 -- ext/socket/raddrinfo.c | 48 ++++-------------------------------------------- 2 files changed, 4 insertions(+), 46 deletions(-)
2024-02-01merge revision(s) 6aacbd690ccde53f9b97c6673482cb11df3f2955: [Backport #20149]NARUSE, Yui
Free pthread_attr after setting up the thread [bug #20149] --- ext/socket/raddrinfo.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-)
2023-12-19[ruby/psych] Bump up 5.1.2Hiroshi SHIBATA
https://github.com/ruby/psych/commit/a9ab74d132
2023-12-19[ruby/psych] Use `compare_by_identity` instead of `object_id`Alexander Momchilov
Object IDs became more expensive in Ruby 2.7. Using `Hash#compare_by_identity` let's us get the same effect, without needing to force all these objects to have object_ids assigned to them. https://github.com/ruby/psych/commit/df69e4a12e
2023-12-18Update `BasicSocket#recv` documentation on return valueJean Boussier
Ref: https://github.com/ruby/ruby/pull/6407 [Bug #19012] `0` is now interpreted as closed connection an not an empty packet, as these are very rare and pretty much useless.
2023-12-18[DOC] Show `PTY.getpty` as an alias of `PTY.spawn`Nobuyoshi Nakada
`:nodoc:` directive does not work at method definition in C, and must be at the implementation function. That is, there is no way to make one method visible and another method sharing the implementation invisible at the same time.
2023-12-18[DOC] Add Socket::ResolutionError documentationNobuyoshi Nakada
2023-12-18[DOC] Correct the location of Addrinfo documentNobuyoshi Nakada
The document must be placed immediately before the class definition. No other statements can be placed in between.
2023-12-18[DOC] Stop unintentional references to builtin or standard namesNobuyoshi Nakada
2023-12-17Revert "[DOC] Make undocumented socket constans nodoc"Nobuyoshi Nakada
This reverts commit cbda94edd80b0f664eda927f9ce9405b2074633a, because `:nodoc:` does not work for constants. In the case of `rb_define_const`, RDoc parses the preceeding comment as in `"/* definition: comment */"` form.
2023-12-17[DOC] Make undocumented socket constans nodocNobuyoshi Nakada
2023-12-17[DOC] Utilize COMMENTS.default_proc to add fallback documentsNobuyoshi Nakada
2023-12-16[ruby/io-console] Bump up v0.7.1Hiroshi SHIBATA
https://github.com/ruby/io-console/commit/8ac766d870
2023-12-16[ruby/syslog] Bump up v0.1.2Hiroshi SHIBATA
https://github.com/ruby/syslog/commit/f7b29e2199
2023-12-16Rollback to released version numbers of stringio and strscanHiroshi SHIBATA
2023-12-15stop warnings from running the test case requiring .so twiceSatoshi Tagomori
2023-12-14rb_ext_resolve_symbol: C API to resolve and return externed symbols [Feature ↵Satoshi Tagomori
#20005] This is a C API for extensions to resolve and get function symbols of other extensions. Extensions can check the expected symbol is correctly loaded and accessible, and use it if it is available. Otherwise, extensions can raise their own error to guide users to setup their environments correctly and what's missing.
2023-12-13[ruby/io-console] Bump up 0.7.0Hiroshi SHIBATA
https://github.com/ruby/io-console/commit/3e5586e632
2023-12-13[ruby/io-nonblock] Bump up 0.3.0Hiroshi SHIBATA
https://github.com/ruby/io-nonblock/commit/501e2ffea3
2023-12-13[ruby/io-wait] Bump up 0.3.1Hiroshi SHIBATA
https://github.com/ruby/io-wait/commit/5ec3db36c8
2023-12-13[ruby/etc] Bump up 1.4.3Hiroshi SHIBATA
https://github.com/ruby/etc/commit/743c26086d
2023-12-13Add a test case for preregistering with different dataKJ Tsanaktsidis
We want to make sure that if preregister is called with different data, that the postponed job table is updated.
2023-12-13Simplify implementation of tracepoint testsKJ Tsanaktsidis
With the latest version of the postponed job patchset merged, we don't actually need to go through the contortions of keeping the data in a global variable; we can just update `data` with multiple calls to rb_postponed_job_preregister.
2023-12-12Partially revert "Set AI_ADDRCONFIG when making getaddrinfo(3) calls"KJ Tsanaktsidis
This _partially_ reverts commit d2ba8ea54a4089959afdeecdd963e3c4ff391748, but for UDP sockets only. With TCP sockets (and other things which use `rsock_init_inetsock`), the order of operations is to call `getaddrinfo(3)` with AF_UNSPEC, look at the returned addresses, pick one, and then call `socket(2)` with the family for that address (i.e. AF_INET or AF_INET6). With UDP sockets, however, this is reversed; `UDPSocket.new` takes an address family as an argument, and then calls `socket(2)` with that family. A subsequent call to UDPSocket#connect will then call `getaddrinfo(3)` with that family. The problem here is that... * If you are in a networking situation that _only_ has loopback addrs, * And you want to look up a name like "localhost" (or NULL) * And you pass AF_INET or AF_INET6 as the ai_family argument to getaddrinfo(3), * And you pass AI_ADDRCONFIG to the hints argument as well, then glibc on Linux will not return an address. This is because AI_ADDRCONFIG is supposed to return addresses for families we actually have an address for and could conceivably connect to, but also is documented to explicitly ignore localhost in that situation. It honestly doesn't make a ton of sense to pass AI_ADDRCONFIG if you're explicitly passing the address family anyway, because you're not looking for "an address for this name we can connect to"; you're looking for "an IPv(4|6) address for this name". And the original glibc bug that d2ba8ea5 was supposed to work around was related to parallel issuance of A and AAAA queries, which of course won't happen if an address family is explicitly specified. So, we fix this by not passing AI_ADDRCONFIG for calls to `rsock_addrinfo` that we also pass an explicit family to (i.e. for UDPsocket). [Bug #20048]
2023-12-10add `flags` to `rb_postponed_job_preregister`Koichi Sasada
for future extensions.
2023-12-10Change the semantics of rb_postponed_job_registerKJ Tsanaktsidis
Our current implementation of rb_postponed_job_register suffers from some safety issues that can lead to interpreter crashes (see bug #1991). Essentially, the issue is that jobs can be called with the wrong arguments. We made two attempts to fix this whilst keeping the promised semantics, but: * The first one involved masking/unmasking when flushing jobs, which was believed to be too expensive * The second one involved a lock-free, multi-producer, single-consumer ringbuffer, which was too complex The critical insight behind this third solution is that essentially the only user of these APIs are a) internal, or b) profiling gems. For a), none of the usages actually require variable data; they will work just fine with the preregistration interface. For b), generally profiling gems only call a single callback with a single piece of data (which is actually usually just zero) for the life of the program. The ringbuffer is complex because it needs to support multi-word inserts of job & data (which can't be atomic); but nobody actually even needs that functionality, really. So, this comit: * Introduces a pre-registration API for jobs, with a GVL-requiring rb_postponed_job_prereigster, which returns a handle which can be used with an async-signal-safe rb_postponed_job_trigger. * Deprecates rb_postponed_job_register (and re-implements it on top of the preregister function for compatability) * Moves all the internal usages of postponed job register pre-registration
2023-12-07[ruby/io-console] [DOC] Add documentation for IO#cursorMatheus Richard
ruby/io-console#50 https://github.com/ruby/io-console/commit/ee752ce771
2023-12-07Set AI_ADDRCONFIG when making getaddrinfo(3) calls for outgoing conns (#7295)KJ Tsanaktsidis
When making an outgoing TCP or UDP connection, set AI_ADDRCONFIG in the hints we send to getaddrinfo(3) (if supported). This will prompt the resolver to _NOT_ issue A or AAAA queries if the system does not actually have an IPv4 or IPv6 address (respectively). This makes outgoing connections marginally more efficient on non-dual-stack systems, since we don't have to try connecting to an address which can't possibly work. More importantly, however, this works around a race condition present in some older versions of glibc on aarch64 where it could accidently send the two outgoing DNS queries with the same DNS txnid, and get confused when receiving the responses. This manifests as outgoing connections sometimes taking 5 seconds (the DNS timeout before retry) to be made. Fixes #19144
2023-12-06[ruby/bigdecimal] Clarify that JSON methods come from the JSON gemPeter Zhu
https://github.com/ruby/bigdecimal/commit/581725d4e5
2023-12-06[ruby/bigdecimal] [DOC] Add section Methods for Working with JSONBurdetteLamar
https://github.com/ruby/bigdecimal/commit/2edd8d0a23
2023-12-05[flori/json] Bump up 2.7.1Hiroshi SHIBATA
https://github.com/flori/json/commit/a1af7a308c
2023-12-05Removed obsoleted version definitionHiroshi SHIBATA
2023-12-05[flori/json] Detect json version from version.rbHiroshi SHIBATA
https://github.com/flori/json/commit/3ef57b5b39
2023-12-05[flori/json] The modern Ruby uses utf-8 encodings by defaultHiroshi SHIBATA
https://github.com/flori/json/commit/11b31210ac