Bump rubocop from 1.79.2 to 1.86.2#929
Closed
dependabot[bot] wants to merge 1 commit into
Closed
Conversation
Contributor
4 similar comments
Contributor
Contributor
Contributor
Contributor
Contributor
gem compare json 2.13.2 2.19.5Compared versions: ["2.13.2", "2.19.5"]
DIFFERENT date:
2.13.2: 2025-07-28 00:00:00 UTC
2.19.5: 1980-01-02 00:00:00 UTC
DIFFERENT require_paths:
2.13.2: ["/opt/hostedtoolcache/Ruby/4.0.4/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.13.2", "lib"]
2.19.5: ["/opt/hostedtoolcache/Ruby/4.0.4/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.19.5", "lib"]
DIFFERENT rubygems_version:
2.13.2: 3.6.2
2.19.5: 4.0.6
DIFFERENT version:
2.13.2: 2.13.2
2.19.5: 2.19.5
DIFFERENT files:
2.13.2->2.19.5:
* Added:
ext/json/ext/json.h +116/-0
ext/json/ext/vendor/ryu.h +819/-0
lib/json/add/string.rb +35/-0
* Changed:
CHANGES.md +114/-8
LEGAL +12/-0
README.md +19/-1
ext/json/ext/fbuffer/fbuffer.h +47/-66
ext/json/ext/generator/extconf.rb +3/-1
ext/json/ext/generator/generator.c +393/-563
ext/json/ext/parser/extconf.rb +6/-1
ext/json/ext/parser/parser.c +665/-502
ext/json/ext/simd/simd.h +42/-22
ext/json/ext/vendor/fpconv.c +13/-12
lib/json.rb +58/-3
lib/json/add/core.rb +1/-0
lib/json/common.rb +101/-33
lib/json/ext/generator/state.rb +11/-14
lib/json/generic_object.rb +0/-8
lib/json/truffle_ruby/generator.rb +133/-71
lib/json/version.rb +1/-1
DIFFERENT extra_rdoc_files:
2.13.2->2.19.5:
* Changed:
README.md +19/-1 |
3 similar comments
Contributor
gem compare json 2.13.2 2.19.5Compared versions: ["2.13.2", "2.19.5"]
DIFFERENT date:
2.13.2: 2025-07-28 00:00:00 UTC
2.19.5: 1980-01-02 00:00:00 UTC
DIFFERENT require_paths:
2.13.2: ["/opt/hostedtoolcache/Ruby/4.0.4/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.13.2", "lib"]
2.19.5: ["/opt/hostedtoolcache/Ruby/4.0.4/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.19.5", "lib"]
DIFFERENT rubygems_version:
2.13.2: 3.6.2
2.19.5: 4.0.6
DIFFERENT version:
2.13.2: 2.13.2
2.19.5: 2.19.5
DIFFERENT files:
2.13.2->2.19.5:
* Added:
ext/json/ext/json.h +116/-0
ext/json/ext/vendor/ryu.h +819/-0
lib/json/add/string.rb +35/-0
* Changed:
CHANGES.md +114/-8
LEGAL +12/-0
README.md +19/-1
ext/json/ext/fbuffer/fbuffer.h +47/-66
ext/json/ext/generator/extconf.rb +3/-1
ext/json/ext/generator/generator.c +393/-563
ext/json/ext/parser/extconf.rb +6/-1
ext/json/ext/parser/parser.c +665/-502
ext/json/ext/simd/simd.h +42/-22
ext/json/ext/vendor/fpconv.c +13/-12
lib/json.rb +58/-3
lib/json/add/core.rb +1/-0
lib/json/common.rb +101/-33
lib/json/ext/generator/state.rb +11/-14
lib/json/generic_object.rb +0/-8
lib/json/truffle_ruby/generator.rb +133/-71
lib/json/version.rb +1/-1
DIFFERENT extra_rdoc_files:
2.13.2->2.19.5:
* Changed:
README.md +19/-1 |
Contributor
gem compare json 2.13.2 2.19.5Compared versions: ["2.13.2", "2.19.5"]
DIFFERENT date:
2.13.2: 2025-07-28 00:00:00 UTC
2.19.5: 1980-01-02 00:00:00 UTC
DIFFERENT require_paths:
2.13.2: ["/opt/hostedtoolcache/Ruby/4.0.4/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.13.2", "lib"]
2.19.5: ["/opt/hostedtoolcache/Ruby/4.0.4/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.19.5", "lib"]
DIFFERENT rubygems_version:
2.13.2: 3.6.2
2.19.5: 4.0.6
DIFFERENT version:
2.13.2: 2.13.2
2.19.5: 2.19.5
DIFFERENT files:
2.13.2->2.19.5:
* Added:
ext/json/ext/json.h +116/-0
ext/json/ext/vendor/ryu.h +819/-0
lib/json/add/string.rb +35/-0
* Changed:
CHANGES.md +114/-8
LEGAL +12/-0
README.md +19/-1
ext/json/ext/fbuffer/fbuffer.h +47/-66
ext/json/ext/generator/extconf.rb +3/-1
ext/json/ext/generator/generator.c +393/-563
ext/json/ext/parser/extconf.rb +6/-1
ext/json/ext/parser/parser.c +665/-502
ext/json/ext/simd/simd.h +42/-22
ext/json/ext/vendor/fpconv.c +13/-12
lib/json.rb +58/-3
lib/json/add/core.rb +1/-0
lib/json/common.rb +101/-33
lib/json/ext/generator/state.rb +11/-14
lib/json/generic_object.rb +0/-8
lib/json/truffle_ruby/generator.rb +133/-71
lib/json/version.rb +1/-1
DIFFERENT extra_rdoc_files:
2.13.2->2.19.5:
* Changed:
README.md +19/-1 |
Contributor
gem compare json 2.13.2 2.19.5Compared versions: ["2.13.2", "2.19.5"]
DIFFERENT date:
2.13.2: 2025-07-28 00:00:00 UTC
2.19.5: 1980-01-02 00:00:00 UTC
DIFFERENT require_paths:
2.13.2: ["/opt/hostedtoolcache/Ruby/4.0.4/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.13.2", "lib"]
2.19.5: ["/opt/hostedtoolcache/Ruby/4.0.4/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.19.5", "lib"]
DIFFERENT rubygems_version:
2.13.2: 3.6.2
2.19.5: 4.0.6
DIFFERENT version:
2.13.2: 2.13.2
2.19.5: 2.19.5
DIFFERENT files:
2.13.2->2.19.5:
* Added:
ext/json/ext/json.h +116/-0
ext/json/ext/vendor/ryu.h +819/-0
lib/json/add/string.rb +35/-0
* Changed:
CHANGES.md +114/-8
LEGAL +12/-0
README.md +19/-1
ext/json/ext/fbuffer/fbuffer.h +47/-66
ext/json/ext/generator/extconf.rb +3/-1
ext/json/ext/generator/generator.c +393/-563
ext/json/ext/parser/extconf.rb +6/-1
ext/json/ext/parser/parser.c +665/-502
ext/json/ext/simd/simd.h +42/-22
ext/json/ext/vendor/fpconv.c +13/-12
lib/json.rb +58/-3
lib/json/add/core.rb +1/-0
lib/json/common.rb +101/-33
lib/json/ext/generator/state.rb +11/-14
lib/json/generic_object.rb +0/-8
lib/json/truffle_ruby/generator.rb +133/-71
lib/json/version.rb +1/-1
DIFFERENT extra_rdoc_files:
2.13.2->2.19.5:
* Changed:
README.md +19/-1 |
Contributor
|
2 similar comments
Contributor
|
Contributor
|
Contributor
gem compare parallel 1.27.0 2.1.0Compared versions: ["1.27.0", "2.1.0"]
DIFFERENT date:
1.27.0: 2025-04-14 00:00:00 UTC
2.1.0: 1980-01-02 00:00:00 UTC
DIFFERENT metadata:
1.27.0: {"bug_tracker_uri" => "https://github.com/grosser/parallel/issues", "documentation_uri" => "https://github.com/grosser/parallel/blob/v1.27.0/Readme.md", "source_code_uri" => "https://github.com/grosser/parallel/tree/v1.27.0", "wiki_uri" => "https://github.com/grosser/parallel/wiki"}
2.1.0: {"bug_tracker_uri" => "https://github.com/grosser/parallel/issues", "documentation_uri" => "https://github.com/grosser/parallel/blob/v2.1.0/Readme.md", "source_code_uri" => "https://github.com/grosser/parallel/tree/v2.1.0", "wiki_uri" => "https://github.com/grosser/parallel/wiki", "changelog_uri" => "https://github.com/grosser/parallel/blob/v2.1.0/CHANGELOG.md", "rubygems_mfa_required" => "true"}
DIFFERENT required_ruby_version:
1.27.0: >= 2.7
2.1.0: >= 3.3
DIFFERENT rubygems_version:
1.27.0: 3.6.2
2.1.0: 4.0.3
DIFFERENT version:
1.27.0: 1.27.0
2.1.0: 2.1.0
DIFFERENT files:
1.27.0->2.1.0:
* Added:
lib/parallel/serializer.rb +52/-0
* Changed:
lib/parallel.rb +79/-40
lib/parallel/version.rb +1/-1 |
2 similar comments
Contributor
gem compare parallel 1.27.0 2.1.0Compared versions: ["1.27.0", "2.1.0"]
DIFFERENT date:
1.27.0: 2025-04-14 00:00:00 UTC
2.1.0: 1980-01-02 00:00:00 UTC
DIFFERENT metadata:
1.27.0: {"bug_tracker_uri" => "https://github.com/grosser/parallel/issues", "documentation_uri" => "https://github.com/grosser/parallel/blob/v1.27.0/Readme.md", "source_code_uri" => "https://github.com/grosser/parallel/tree/v1.27.0", "wiki_uri" => "https://github.com/grosser/parallel/wiki"}
2.1.0: {"bug_tracker_uri" => "https://github.com/grosser/parallel/issues", "documentation_uri" => "https://github.com/grosser/parallel/blob/v2.1.0/Readme.md", "source_code_uri" => "https://github.com/grosser/parallel/tree/v2.1.0", "wiki_uri" => "https://github.com/grosser/parallel/wiki", "changelog_uri" => "https://github.com/grosser/parallel/blob/v2.1.0/CHANGELOG.md", "rubygems_mfa_required" => "true"}
DIFFERENT required_ruby_version:
1.27.0: >= 2.7
2.1.0: >= 3.3
DIFFERENT rubygems_version:
1.27.0: 3.6.2
2.1.0: 4.0.3
DIFFERENT version:
1.27.0: 1.27.0
2.1.0: 2.1.0
DIFFERENT files:
1.27.0->2.1.0:
* Added:
lib/parallel/serializer.rb +52/-0
* Changed:
lib/parallel.rb +79/-40
lib/parallel/version.rb +1/-1 |
Contributor
gem compare parallel 1.27.0 2.1.0Compared versions: ["1.27.0", "2.1.0"]
DIFFERENT date:
1.27.0: 2025-04-14 00:00:00 UTC
2.1.0: 1980-01-02 00:00:00 UTC
DIFFERENT metadata:
1.27.0: {"bug_tracker_uri" => "https://github.com/grosser/parallel/issues", "documentation_uri" => "https://github.com/grosser/parallel/blob/v1.27.0/Readme.md", "source_code_uri" => "https://github.com/grosser/parallel/tree/v1.27.0", "wiki_uri" => "https://github.com/grosser/parallel/wiki"}
2.1.0: {"bug_tracker_uri" => "https://github.com/grosser/parallel/issues", "documentation_uri" => "https://github.com/grosser/parallel/blob/v2.1.0/Readme.md", "source_code_uri" => "https://github.com/grosser/parallel/tree/v2.1.0", "wiki_uri" => "https://github.com/grosser/parallel/wiki", "changelog_uri" => "https://github.com/grosser/parallel/blob/v2.1.0/CHANGELOG.md", "rubygems_mfa_required" => "true"}
DIFFERENT required_ruby_version:
1.27.0: >= 2.7
2.1.0: >= 3.3
DIFFERENT rubygems_version:
1.27.0: 3.6.2
2.1.0: 4.0.3
DIFFERENT version:
1.27.0: 1.27.0
2.1.0: 2.1.0
DIFFERENT files:
1.27.0->2.1.0:
* Added:
lib/parallel/serializer.rb +52/-0
* Changed:
lib/parallel.rb +79/-40
lib/parallel/version.rb +1/-1 |
Contributor
gem compare json 2.13.2 2.19.5Compared versions: ["2.13.2", "2.19.5"]
DIFFERENT date:
2.13.2: 2025-07-28 00:00:00 UTC
2.19.5: 1980-01-02 00:00:00 UTC
DIFFERENT require_paths:
2.13.2: ["/opt/hostedtoolcache/Ruby/4.0.4/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.13.2", "lib"]
2.19.5: ["/opt/hostedtoolcache/Ruby/4.0.4/x64/lib/ruby/gems/4.0.0/extensions/x86_64-linux/4.0.0/json-2.19.5", "lib"]
DIFFERENT rubygems_version:
2.13.2: 3.6.2
2.19.5: 4.0.6
DIFFERENT version:
2.13.2: 2.13.2
2.19.5: 2.19.5
DIFFERENT files:
2.13.2->2.19.5:
* Added:
ext/json/ext/json.h +116/-0
ext/json/ext/vendor/ryu.h +819/-0
lib/json/add/string.rb +35/-0
* Changed:
CHANGES.md +114/-8
LEGAL +12/-0
README.md +19/-1
ext/json/ext/fbuffer/fbuffer.h +47/-66
ext/json/ext/generator/extconf.rb +3/-1
ext/json/ext/generator/generator.c +393/-563
ext/json/ext/parser/extconf.rb +6/-1
ext/json/ext/parser/parser.c +665/-502
ext/json/ext/simd/simd.h +42/-22
ext/json/ext/vendor/fpconv.c +13/-12
lib/json.rb +58/-3
lib/json/add/core.rb +1/-0
lib/json/common.rb +101/-33
lib/json/ext/generator/state.rb +11/-14
lib/json/generic_object.rb +0/-8
lib/json/truffle_ruby/generator.rb +133/-71
lib/json/version.rb +1/-1
DIFFERENT extra_rdoc_files:
2.13.2->2.19.5:
* Changed:
README.md +19/-1 |
Contributor
gem compare --diff parallel 1.27.0 2.1.0Compared versions: ["1.27.0", "2.1.0"]
DIFFERENT files:
1.27.0->2.1.0:
* Added:
lib/parallel/serializer.rb
--- /tmp/20260515-677-v9y0n0 2026-05-15 02:33:41.842840117 +0000
+++ /tmp/d20260515-677-ppmui9/parallel-2.1.0/lib/parallel/serializer.rb 2026-05-15 02:33:41.841840119 +0000
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+require 'openssl'
+require 'securerandom'
+
+module Parallel
+ # Pluggable wire serializers. Each must respond to `dump(data, io)` /
+ # `load(io)` (used directly by Worker) and `dump(data)` / `load(string)`
+ # (used by wrappers like Hmac).
+ module Serializer
+ # Raw Marshal. Fast but trusts anything written to the pipe — a same-UID
+ # attacker that reopens /proc/<pid>/fd/<n> can inject Marshal gadgets (RCE).
+ Marshal = ::Marshal
+
+ # Wraps any inner serializer with a length-prefixed HMAC-SHA256 frame keyed
+ # on a per-worker secret generated before fork. Forged frames from a
+ # pipe-injector fail verification.
+ class Hmac
+ LENGTH_FORMAT = 'N' # 32-bit big-endian unsigned int
+ LENGTH_BYTES = 4
+ MAC_BYTES = 32 # SHA256
+
+ def initialize(inner: Marshal, secret: SecureRandom.bytes(32))
+ @inner = inner
+ @secret = secret
+ end
+
+ def dump(data, io)
+ payload = @inner.dump(data)
+ mac = OpenSSL::HMAC.digest('SHA256', @secret, payload)
+ io.write([payload.bytesize].pack(LENGTH_FORMAT), mac, payload)
+ end
+
+ def load(io)
+ # nil at frame boundary = clean EOF (worker died / pipe closed between messages)
+ header = io.read(LENGTH_BYTES) || raise(EOFError) # eof stops worker
+ raise SecurityError, "truncated frame header" if header.bytesize != LENGTH_BYTES
+
+ length = header.unpack1(LENGTH_FORMAT)
+ mac = io.read(MAC_BYTES)
+ raise SecurityError, "truncated frame mac" if mac.nil? || mac.bytesize != MAC_BYTES
+
+ payload = io.read(length)
+ raise SecurityError, "truncated frame payload" if payload.nil? || payload.bytesize != length
+
+ expected = OpenSSL::HMAC.digest('SHA256', @secret, payload)
+ raise SecurityError, "HMAC mismatch on worker pipe" unless OpenSSL.fixed_length_secure_compare(mac, expected)
+
+ @inner.load(payload)
+ end
+ end
+ end
+end
* Changed:
lib/parallel.rb
--- /tmp/d20260515-677-ppmui9/parallel-1.27.0/lib/parallel.rb 2026-05-15 02:33:41.840840121 +0000
+++ /tmp/d20260515-677-ppmui9/parallel-2.1.0/lib/parallel.rb 2026-05-15 02:33:41.841840119 +0000
@@ -3,0 +4 @@
+require 'parallel/serializer'
@@ -17,0 +19,11 @@
+
+ # marshal_dump that is used for ruby exceptions
+ # avoid dumping the cause since nobody needs that and it can include undumpable exceptions
+ def _dump(_depth)
+ Marshal.dump(@value)
+ end
+
+ # marshal_load that is used for ruby exceptions
+ def self._load(data)
+ new(Marshal.load(data))
+ end
@@ -55 +67 @@
- def initialize(read, write, pid)
+ def initialize(read, write, pid, serializer)
@@ -58,0 +71 @@
+ @serializer = serializer
@@ -75 +88 @@
- Marshal.dump(data, write)
+ @serializer.dump(data, write)
@@ -81 +94 @@
- Marshal.load(read)
+ @serializer.load(read)
@@ -258 +271 @@
- elsif RUBY_PLATFORM =~ (/java/) && !options[:in_processes]
+ elsif RUBY_PLATFORM.include?('java') && !options[:in_processes]
@@ -462,0 +476,2 @@
+ use_port = defined?(Ractor::Port)
+
@@ -464,13 +479,4 @@
- ractors = Array.new(options.fetch(:count)) do
- Ractor.new do
- loop do
- got = receive
- (klass, method_name), item, index = got
- break if index == :break
- begin
- Ractor.yield [nil, klass.send(method_name, item), item, index]
- rescue StandardError => e
- Ractor.yield [e, nil, item, index]
- end
- end
- end
+ ports = {} # port (ruby 4+) or ractor (ruby 3) => ractor
+ options.fetch(:count).times do
+ port, ractor = ractor_build(use_port)
+ ports[port] = ractor
@@ -480,3 +486,3 @@
- ractors.dup.each do |ractor|
- if (set = job_factory.next)
- item, index = set
+ ports.dup.each do |port, ractor|
+ if (job = job_factory.next)
+ item, index = job
@@ -485,3 +491,3 @@
- else
- ractor.send([[nil, nil], nil, :break]) # stop the ractor
- ractors.delete ractor
+ else # not enough work, `receive` would hang
+ ractor_stop ractor
+ ports.delete port
@@ -491,4 +497,5 @@
- # replace with new items
- while (set = job_factory.next)
- item_next, index_next = set
- done, (exception, result, item, index) = Ractor.select(*ractors)
+ # receive result and send new items to done ractors
+ while (job = job_factory.next)
+ # receive result
+ done_port, (exception, result, item_prev, index_prev) = Ractor.select(*ports.keys)
+ done_ractor = ports[done_port]
@@ -496 +503 @@
- ractors.delete done
+ ports.delete done_port
@@ -499,2 +506 @@
- instrument_finish item, index, result, options
- results_mutex.synchronize { results[index] = (options[:preserve_results] == false ? nil : result) }
+ ractor_result item_prev, index_prev, result, results, results_mutex, options
@@ -501,0 +508,2 @@
+ # send new
+ item_next, index_next = job
@@ -503 +511 @@
- done.send([callback, item_next, index_next])
+ done_ractor.send([callback, item_next, index_next])
@@ -507,2 +515,2 @@
- ractors.each do |ractor|
- (new_exception, result, item, index) = ractor.take
+ ports.each do |port, ractor|
+ (new_exception, result, item, index) = use_port ? port.receive : ractor.take
@@ -511,3 +519,2 @@
- instrument_finish item, index, result, options
- results_mutex.synchronize { results[index] = (options[:preserve_results] == false ? nil : result) }
- ractor.send([[nil, nil], nil, :break]) # stop the ractor
+ ractor_result item, index, result, results, results_mutex, options
+ ractor_stop ractor
@@ -518,0 +526,30 @@
+ def ractor_build(use_port)
+ args = use_port ? [Ractor::Port.new] : []
+ ractor = Ractor.new(*args) do |port|
+ loop do
+ (klass, method_name), item, index = receive
+ break if index == :break
+ begin
+ result = [nil, klass.send(method_name, item), item, index]
+ rescue StandardError => e
+ result = [e, nil, item, index]
+ end
+ if port
+ port.send result
+ else
+ Ractor.yield result
+ end
+ end
+ end
+ [use_port ? args.first : ractor, ractor]
+ end
+
+ def ractor_result(item, index, result, results, results_mutex, options)
+ instrument_finish item, index, result, options
+ results_mutex.synchronize { results[index] = (options[:preserve_results] == false ? nil : result) }
+ end
+
+ def ractor_stop(ractor)
+ ractor.send([[nil, nil], nil, :break])
+ end
+
@@ -589,0 +627 @@
+ options[:serializer] ||= Serializer::Marshal
@@ -610 +648 @@
- Worker.new(parent_read, parent_write, pid)
+ Worker.new(parent_read, parent_write, pid, options[:serializer])
@@ -613,0 +652 @@
+ serializer = options.fetch(:serializer)
@@ -615 +654 @@
- data = Marshal.load(read)
+ data = serializer.load(read)
@@ -624 +663 @@
- rescue Exception # # rubocop:disable Lint/RescueException
+ rescue Exception # rubocop:disable Lint/RescueException
@@ -629 +668 @@
- Marshal.dump(result, write)
+ serializer.dump(result, write)
lib/parallel/version.rb
--- /tmp/d20260515-677-ppmui9/parallel-1.27.0/lib/parallel/version.rb 2026-05-15 02:33:41.841840119 +0000
+++ /tmp/d20260515-677-ppmui9/parallel-2.1.0/lib/parallel/version.rb 2026-05-15 02:33:41.841840119 +0000
@@ -3 +3 @@
- VERSION = Version = '1.27.0' # rubocop:disable Naming/ConstantName
+ VERSION = Version = '2.1.0' # rubocop:disable Naming/ConstantName |
Contributor
gem compare --diff parallel 1.27.0 2.1.0Compared versions: ["1.27.0", "2.1.0"]
DIFFERENT files:
1.27.0->2.1.0:
* Added:
lib/parallel/serializer.rb
--- /tmp/20260515-674-s61ro3 2026-05-15 02:33:43.788486329 +0000
+++ /tmp/d20260515-674-pvssi5/parallel-2.1.0/lib/parallel/serializer.rb 2026-05-15 02:33:43.788486329 +0000
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+require 'openssl'
+require 'securerandom'
+
+module Parallel
+ # Pluggable wire serializers. Each must respond to `dump(data, io)` /
+ # `load(io)` (used directly by Worker) and `dump(data)` / `load(string)`
+ # (used by wrappers like Hmac).
+ module Serializer
+ # Raw Marshal. Fast but trusts anything written to the pipe — a same-UID
+ # attacker that reopens /proc/<pid>/fd/<n> can inject Marshal gadgets (RCE).
+ Marshal = ::Marshal
+
+ # Wraps any inner serializer with a length-prefixed HMAC-SHA256 frame keyed
+ # on a per-worker secret generated before fork. Forged frames from a
+ # pipe-injector fail verification.
+ class Hmac
+ LENGTH_FORMAT = 'N' # 32-bit big-endian unsigned int
+ LENGTH_BYTES = 4
+ MAC_BYTES = 32 # SHA256
+
+ def initialize(inner: Marshal, secret: SecureRandom.bytes(32))
+ @inner = inner
+ @secret = secret
+ end
+
+ def dump(data, io)
+ payload = @inner.dump(data)
+ mac = OpenSSL::HMAC.digest('SHA256', @secret, payload)
+ io.write([payload.bytesize].pack(LENGTH_FORMAT), mac, payload)
+ end
+
+ def load(io)
+ # nil at frame boundary = clean EOF (worker died / pipe closed between messages)
+ header = io.read(LENGTH_BYTES) || raise(EOFError) # eof stops worker
+ raise SecurityError, "truncated frame header" if header.bytesize != LENGTH_BYTES
+
+ length = header.unpack1(LENGTH_FORMAT)
+ mac = io.read(MAC_BYTES)
+ raise SecurityError, "truncated frame mac" if mac.nil? || mac.bytesize != MAC_BYTES
+
+ payload = io.read(length)
+ raise SecurityError, "truncated frame payload" if payload.nil? || payload.bytesize != length
+
+ expected = OpenSSL::HMAC.digest('SHA256', @secret, payload)
+ raise SecurityError, "HMAC mismatch on worker pipe" unless OpenSSL.fixed_length_secure_compare(mac, expected)
+
+ @inner.load(payload)
+ end
+ end
+ end
+end
* Changed:
lib/parallel.rb
--- /tmp/d20260515-674-pvssi5/parallel-1.27.0/lib/parallel.rb 2026-05-15 02:33:43.787486317 +0000
+++ /tmp/d20260515-674-pvssi5/parallel-2.1.0/lib/parallel.rb 2026-05-15 02:33:43.787486317 +0000
@@ -3,0 +4 @@
+require 'parallel/serializer'
@@ -17,0 +19,11 @@
+
+ # marshal_dump that is used for ruby exceptions
+ # avoid dumping the cause since nobody needs that and it can include undumpable exceptions
+ def _dump(_depth)
+ Marshal.dump(@value)
+ end
+
+ # marshal_load that is used for ruby exceptions
+ def self._load(data)
+ new(Marshal.load(data))
+ end
@@ -55 +67 @@
- def initialize(read, write, pid)
+ def initialize(read, write, pid, serializer)
@@ -58,0 +71 @@
+ @serializer = serializer
@@ -75 +88 @@
- Marshal.dump(data, write)
+ @serializer.dump(data, write)
@@ -81 +94 @@
- Marshal.load(read)
+ @serializer.load(read)
@@ -258 +271 @@
- elsif RUBY_PLATFORM =~ (/java/) && !options[:in_processes]
+ elsif RUBY_PLATFORM.include?('java') && !options[:in_processes]
@@ -462,0 +476,2 @@
+ use_port = defined?(Ractor::Port)
+
@@ -464,13 +479,4 @@
- ractors = Array.new(options.fetch(:count)) do
- Ractor.new do
- loop do
- got = receive
- (klass, method_name), item, index = got
- break if index == :break
- begin
- Ractor.yield [nil, klass.send(method_name, item), item, index]
- rescue StandardError => e
- Ractor.yield [e, nil, item, index]
- end
- end
- end
+ ports = {} # port (ruby 4+) or ractor (ruby 3) => ractor
+ options.fetch(:count).times do
+ port, ractor = ractor_build(use_port)
+ ports[port] = ractor
@@ -480,3 +486,3 @@
- ractors.dup.each do |ractor|
- if (set = job_factory.next)
- item, index = set
+ ports.dup.each do |port, ractor|
+ if (job = job_factory.next)
+ item, index = job
@@ -485,3 +491,3 @@
- else
- ractor.send([[nil, nil], nil, :break]) # stop the ractor
- ractors.delete ractor
+ else # not enough work, `receive` would hang
+ ractor_stop ractor
+ ports.delete port
@@ -491,4 +497,5 @@
- # replace with new items
- while (set = job_factory.next)
- item_next, index_next = set
- done, (exception, result, item, index) = Ractor.select(*ractors)
+ # receive result and send new items to done ractors
+ while (job = job_factory.next)
+ # receive result
+ done_port, (exception, result, item_prev, index_prev) = Ractor.select(*ports.keys)
+ done_ractor = ports[done_port]
@@ -496 +503 @@
- ractors.delete done
+ ports.delete done_port
@@ -499,2 +506 @@
- instrument_finish item, index, result, options
- results_mutex.synchronize { results[index] = (options[:preserve_results] == false ? nil : result) }
+ ractor_result item_prev, index_prev, result, results, results_mutex, options
@@ -501,0 +508,2 @@
+ # send new
+ item_next, index_next = job
@@ -503 +511 @@
- done.send([callback, item_next, index_next])
+ done_ractor.send([callback, item_next, index_next])
@@ -507,2 +515,2 @@
- ractors.each do |ractor|
- (new_exception, result, item, index) = ractor.take
+ ports.each do |port, ractor|
+ (new_exception, result, item, index) = use_port ? port.receive : ractor.take
@@ -511,3 +519,2 @@
- instrument_finish item, index, result, options
- results_mutex.synchronize { results[index] = (options[:preserve_results] == false ? nil : result) }
- ractor.send([[nil, nil], nil, :break]) # stop the ractor
+ ractor_result item, index, result, results, results_mutex, options
+ ractor_stop ractor
@@ -518,0 +526,30 @@
+ def ractor_build(use_port)
+ args = use_port ? [Ractor::Port.new] : []
+ ractor = Ractor.new(*args) do |port|
+ loop do
+ (klass, method_name), item, index = receive
+ break if index == :break
+ begin
+ result = [nil, klass.send(method_name, item), item, index]
+ rescue StandardError => e
+ result = [e, nil, item, index]
+ end
+ if port
+ port.send result
+ else
+ Ractor.yield result
+ end
+ end
+ end
+ [use_port ? args.first : ractor, ractor]
+ end
+
+ def ractor_result(item, index, result, results, results_mutex, options)
+ instrument_finish item, index, result, options
+ results_mutex.synchronize { results[index] = (options[:preserve_results] == false ? nil : result) }
+ end
+
+ def ractor_stop(ractor)
+ ractor.send([[nil, nil], nil, :break])
+ end
+
@@ -589,0 +627 @@
+ options[:serializer] ||= Serializer::Marshal
@@ -610 +648 @@
- Worker.new(parent_read, parent_write, pid)
+ Worker.new(parent_read, parent_write, pid, options[:serializer])
@@ -613,0 +652 @@
+ serializer = options.fetch(:serializer)
@@ -615 +654 @@
- data = Marshal.load(read)
+ data = serializer.load(read)
@@ -624 +663 @@
- rescue Exception # # rubocop:disable Lint/RescueException
+ rescue Exception # rubocop:disable Lint/RescueException
@@ -629 +668 @@
- Marshal.dump(result, write)
+ serializer.dump(result, write)
lib/parallel/version.rb
--- /tmp/d20260515-674-pvssi5/parallel-1.27.0/lib/parallel/version.rb 2026-05-15 02:33:43.787486317 +0000
+++ /tmp/d20260515-674-pvssi5/parallel-2.1.0/lib/parallel/version.rb 2026-05-15 02:33:43.788486329 +0000
@@ -3 +3 @@
- VERSION = Version = '1.27.0' # rubocop:disable Naming/ConstantName
+ VERSION = Version = '2.1.0' # rubocop:disable Naming/ConstantName |
Contributor
gem compare --diff parallel 1.27.0 2.1.0Compared versions: ["1.27.0", "2.1.0"]
DIFFERENT files:
1.27.0->2.1.0:
* Added:
lib/parallel/serializer.rb
--- /tmp/20260515-730-e4jdz9 2026-05-15 02:33:49.502850998 +0000
+++ /tmp/d20260515-730-htm8x7/parallel-2.1.0/lib/parallel/serializer.rb 2026-05-15 02:33:49.502850998 +0000
@@ -0,0 +1,52 @@
+# frozen_string_literal: true
+require 'openssl'
+require 'securerandom'
+
+module Parallel
+ # Pluggable wire serializers. Each must respond to `dump(data, io)` /
+ # `load(io)` (used directly by Worker) and `dump(data)` / `load(string)`
+ # (used by wrappers like Hmac).
+ module Serializer
+ # Raw Marshal. Fast but trusts anything written to the pipe — a same-UID
+ # attacker that reopens /proc/<pid>/fd/<n> can inject Marshal gadgets (RCE).
+ Marshal = ::Marshal
+
+ # Wraps any inner serializer with a length-prefixed HMAC-SHA256 frame keyed
+ # on a per-worker secret generated before fork. Forged frames from a
+ # pipe-injector fail verification.
+ class Hmac
+ LENGTH_FORMAT = 'N' # 32-bit big-endian unsigned int
+ LENGTH_BYTES = 4
+ MAC_BYTES = 32 # SHA256
+
+ def initialize(inner: Marshal, secret: SecureRandom.bytes(32))
+ @inner = inner
+ @secret = secret
+ end
+
+ def dump(data, io)
+ payload = @inner.dump(data)
+ mac = OpenSSL::HMAC.digest('SHA256', @secret, payload)
+ io.write([payload.bytesize].pack(LENGTH_FORMAT), mac, payload)
+ end
+
+ def load(io)
+ # nil at frame boundary = clean EOF (worker died / pipe closed between messages)
+ header = io.read(LENGTH_BYTES) || raise(EOFError) # eof stops worker
+ raise SecurityError, "truncated frame header" if header.bytesize != LENGTH_BYTES
+
+ length = header.unpack1(LENGTH_FORMAT)
+ mac = io.read(MAC_BYTES)
+ raise SecurityError, "truncated frame mac" if mac.nil? || mac.bytesize != MAC_BYTES
+
+ payload = io.read(length)
+ raise SecurityError, "truncated frame payload" if payload.nil? || payload.bytesize != length
+
+ expected = OpenSSL::HMAC.digest('SHA256', @secret, payload)
+ raise SecurityError, "HMAC mismatch on worker pipe" unless OpenSSL.fixed_length_secure_compare(mac, expected)
+
+ @inner.load(payload)
+ end
+ end
+ end
+end
* Changed:
lib/parallel.rb
--- /tmp/d20260515-730-htm8x7/parallel-1.27.0/lib/parallel.rb 2026-05-15 02:33:49.501850997 +0000
+++ /tmp/d20260515-730-htm8x7/parallel-2.1.0/lib/parallel.rb 2026-05-15 02:33:49.502850998 +0000
@@ -3,0 +4 @@
+require 'parallel/serializer'
@@ -17,0 +19,11 @@
+
+ # marshal_dump that is used for ruby exceptions
+ # avoid dumping the cause since nobody needs that and it can include undumpable exceptions
+ def _dump(_depth)
+ Marshal.dump(@value)
+ end
+
+ # marshal_load that is used for ruby exceptions
+ def self._load(data)
+ new(Marshal.load(data))
+ end
@@ -55 +67 @@
- def initialize(read, write, pid)
+ def initialize(read, write, pid, serializer)
@@ -58,0 +71 @@
+ @serializer = serializer
@@ -75 +88 @@
- Marshal.dump(data, write)
+ @serializer.dump(data, write)
@@ -81 +94 @@
- Marshal.load(read)
+ @serializer.load(read)
@@ -258 +271 @@
- elsif RUBY_PLATFORM =~ (/java/) && !options[:in_processes]
+ elsif RUBY_PLATFORM.include?('java') && !options[:in_processes]
@@ -462,0 +476,2 @@
+ use_port = defined?(Ractor::Port)
+
@@ -464,13 +479,4 @@
- ractors = Array.new(options.fetch(:count)) do
- Ractor.new do
- loop do
- got = receive
- (klass, method_name), item, index = got
- break if index == :break
- begin
- Ractor.yield [nil, klass.send(method_name, item), item, index]
- rescue StandardError => e
- Ractor.yield [e, nil, item, index]
- end
- end
- end
+ ports = {} # port (ruby 4+) or ractor (ruby 3) => ractor
+ options.fetch(:count).times do
+ port, ractor = ractor_build(use_port)
+ ports[port] = ractor
@@ -480,3 +486,3 @@
- ractors.dup.each do |ractor|
- if (set = job_factory.next)
- item, index = set
+ ports.dup.each do |port, ractor|
+ if (job = job_factory.next)
+ item, index = job
@@ -485,3 +491,3 @@
- else
- ractor.send([[nil, nil], nil, :break]) # stop the ractor
- ractors.delete ractor
+ else # not enough work, `receive` would hang
+ ractor_stop ractor
+ ports.delete port
@@ -491,4 +497,5 @@
- # replace with new items
- while (set = job_factory.next)
- item_next, index_next = set
- done, (exception, result, item, index) = Ractor.select(*ractors)
+ # receive result and send new items to done ractors
+ while (job = job_factory.next)
+ # receive result
+ done_port, (exception, result, item_prev, index_prev) = Ractor.select(*ports.keys)
+ done_ractor = ports[done_port]
@@ -496 +503 @@
- ractors.delete done
+ ports.delete done_port
@@ -499,2 +506 @@
- instrument_finish item, index, result, options
- results_mutex.synchronize { results[index] = (options[:preserve_results] == false ? nil : result) }
+ ractor_result item_prev, index_prev, result, results, results_mutex, options
@@ -501,0 +508,2 @@
+ # send new
+ item_next, index_next = job
@@ -503 +511 @@
- done.send([callback, item_next, index_next])
+ done_ractor.send([callback, item_next, index_next])
@@ -507,2 +515,2 @@
- ractors.each do |ractor|
- (new_exception, result, item, index) = ractor.take
+ ports.each do |port, ractor|
+ (new_exception, result, item, index) = use_port ? port.receive : ractor.take
@@ -511,3 +519,2 @@
- instrument_finish item, index, result, options
- results_mutex.synchronize { results[index] = (options[:preserve_results] == false ? nil : result) }
- ractor.send([[nil, nil], nil, :break]) # stop the ractor
+ ractor_result item, index, result, results, results_mutex, options
+ ractor_stop ractor
@@ -518,0 +526,30 @@
+ def ractor_build(use_port)
+ args = use_port ? [Ractor::Port.new] : []
+ ractor = Ractor.new(*args) do |port|
+ loop do
+ (klass, method_name), item, index = receive
+ break if index == :break
+ begin
+ result = [nil, klass.send(method_name, item), item, index]
+ rescue StandardError => e
+ result = [e, nil, item, index]
+ end
+ if port
+ port.send result
+ else
+ Ractor.yield result
+ end
+ end
+ end
+ [use_port ? args.first : ractor, ractor]
+ end
+
+ def ractor_result(item, index, result, results, results_mutex, options)
+ instrument_finish item, index, result, options
+ results_mutex.synchronize { results[index] = (options[:preserve_results] == false ? nil : result) }
+ end
+
+ def ractor_stop(ractor)
+ ractor.send([[nil, nil], nil, :break])
+ end
+
@@ -589,0 +627 @@
+ options[:serializer] ||= Serializer::Marshal
@@ -610 +648 @@
- Worker.new(parent_read, parent_write, pid)
+ Worker.new(parent_read, parent_write, pid, options[:serializer])
@@ -613,0 +652 @@
+ serializer = options.fetch(:serializer)
@@ -615 +654 @@
- data = Marshal.load(read)
+ data = serializer.load(read)
@@ -624 +663 @@
- rescue Exception # # rubocop:disable Lint/RescueException
+ rescue Exception # rubocop:disable Lint/RescueException
@@ -629 +668 @@
- Marshal.dump(result, write)
+ serializer.dump(result, write)
lib/parallel/version.rb
--- /tmp/d20260515-730-htm8x7/parallel-1.27.0/lib/parallel/version.rb 2026-05-15 02:33:49.501850997 +0000
+++ /tmp/d20260515-730-htm8x7/parallel-2.1.0/lib/parallel/version.rb 2026-05-15 02:33:49.502850998 +0000
@@ -3 +3 @@
- VERSION = Version = '1.27.0' # rubocop:disable Naming/ConstantName
+ VERSION = Version = '2.1.0' # rubocop:disable Naming/ConstantName |
Contributor
gem compare parser 3.3.9.0 3.3.11.1Compared versions: ["3.3.9.0", "3.3.11.1"]
DIFFERENT date:
3.3.9.0: 2025-07-25 00:00:00 UTC
3.3.11.1: 2026-03-27 00:00:00 UTC
DIFFERENT metadata:
3.3.9.0: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.9.0/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.9.0", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.9.0"}
3.3.11.1: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.11.1/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.11.1", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.11.1"}
DIFFERENT version:
3.3.9.0: 3.3.9.0
3.3.11.1: 3.3.11.1
DIFFERENT files:
3.3.9.0->3.3.11.1:
* Changed:
lib/parser/current.rb +2/-2
lib/parser/meta.rb +1/-1
lib/parser/version.rb +1/-1
parser.gemspec +1/-1
DIFFERENT development dependencies:
3.3.9.0->3.3.11.1:
* Updated:
bundler from: [">= 1.15", "< 3.0.0"] to: [">= 1.15"] |
Contributor
|
Contributor
gem compare parser 3.3.9.0 3.3.11.1Compared versions: ["3.3.9.0", "3.3.11.1"]
DIFFERENT date:
3.3.9.0: 2025-07-25 00:00:00 UTC
3.3.11.1: 2026-03-27 00:00:00 UTC
DIFFERENT metadata:
3.3.9.0: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.9.0/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.9.0", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.9.0"}
3.3.11.1: {"bug_tracker_uri" => "https://github.com/whitequark/parser/issues", "changelog_uri" => "https://github.com/whitequark/parser/blob/v3.3.11.1/CHANGELOG.md", "documentation_uri" => "https://www.rubydoc.info/gems/parser/3.3.11.1", "source_code_uri" => "https://github.com/whitequark/parser/tree/v3.3.11.1"}
DIFFERENT version:
3.3.9.0: 3.3.9.0
3.3.11.1: 3.3.11.1
DIFFERENT files:
3.3.9.0->3.3.11.1:
* Changed:
lib/parser/current.rb +2/-2
lib/parser/meta.rb +1/-1
lib/parser/version.rb +1/-1
parser.gemspec +1/-1
DIFFERENT development dependencies:
3.3.9.0->3.3.11.1:
* Updated:
bundler from: [">= 1.15", "< 3.0.0"] to: [">= 1.15"] |
Contributor
gem compare --diff parser 3.3.9.0 3.3.11.1Compared versions: ["3.3.9.0", "3.3.11.1"]
DIFFERENT files:
3.3.9.0->3.3.11.1:
* Changed:
lib/parser/current.rb
--- /tmp/d20260515-1060-9z0awy/parser-3.3.9.0/lib/parser/current.rb 2026-05-15 02:34:07.740792372 +0000
+++ /tmp/d20260515-1060-9z0awy/parser-3.3.11.1/lib/parser/current.rb 2026-05-15 02:34:07.797792278 +0000
@@ -105 +105 @@
- current_version = '3.2.9'
+ current_version = '3.2.11'
@@ -114 +114 @@
- current_version = '3.3.9'
+ current_version = '3.3.11'
lib/parser/meta.rb
--- /tmp/d20260515-1060-9z0awy/parser-3.3.9.0/lib/parser/meta.rb 2026-05-15 02:34:07.748792359 +0000
+++ /tmp/d20260515-1060-9z0awy/parser-3.3.11.1/lib/parser/meta.rb 2026-05-15 02:34:07.807792262 +0000
@@ -10 +10 @@
- itarg itblock
+ itarg itblock blocknilarg
lib/parser/version.rb
--- /tmp/d20260515-1060-9z0awy/parser-3.3.9.0/lib/parser/version.rb 2026-05-15 02:34:07.790792290 +0000
+++ /tmp/d20260515-1060-9z0awy/parser-3.3.11.1/lib/parser/version.rb 2026-05-15 02:34:07.858792178 +0000
@@ -4 +4 @@
- VERSION = '3.3.9.0'
+ VERSION = '3.3.11.1'
parser.gemspec
--- /tmp/d20260515-1060-9z0awy/parser-3.3.9.0/parser.gemspec 2026-05-15 02:34:07.791792288 +0000
+++ /tmp/d20260515-1060-9z0awy/parser-3.3.11.1/parser.gemspec 2026-05-15 02:34:07.858792178 +0000
@@ -32 +32 @@
- spec.add_development_dependency 'bundler', '>= 1.15', '< 3.0.0'
+ spec.add_development_dependency 'bundler', '>= 1.15' |
Contributor
gem compare parallel 1.27.0 2.1.0Compared versions: ["1.27.0", "2.1.0"]
DIFFERENT date:
1.27.0: 2025-04-14 00:00:00 UTC
2.1.0: 1980-01-02 00:00:00 UTC
DIFFERENT metadata:
1.27.0: {"bug_tracker_uri" => "https://github.com/grosser/parallel/issues", "documentation_uri" => "https://github.com/grosser/parallel/blob/v1.27.0/Readme.md", "source_code_uri" => "https://github.com/grosser/parallel/tree/v1.27.0", "wiki_uri" => "https://github.com/grosser/parallel/wiki"}
2.1.0: {"bug_tracker_uri" => "https://github.com/grosser/parallel/issues", "documentation_uri" => "https://github.com/grosser/parallel/blob/v2.1.0/Readme.md", "source_code_uri" => "https://github.com/grosser/parallel/tree/v2.1.0", "wiki_uri" => "https://github.com/grosser/parallel/wiki", "changelog_uri" => "https://github.com/grosser/parallel/blob/v2.1.0/CHANGELOG.md", "rubygems_mfa_required" => "true"}
DIFFERENT required_ruby_version:
1.27.0: >= 2.7
2.1.0: >= 3.3
DIFFERENT rubygems_version:
1.27.0: 3.6.2
2.1.0: 4.0.3
DIFFERENT version:
1.27.0: 1.27.0
2.1.0: 2.1.0
DIFFERENT files:
1.27.0->2.1.0:
* Added:
lib/parallel/serializer.rb +52/-0
* Changed:
lib/parallel.rb +79/-40
lib/parallel/version.rb +1/-1 |
Contributor
gem compare --diff parser 3.3.9.0 3.3.11.1Compared versions: ["3.3.9.0", "3.3.11.1"]
DIFFERENT files:
3.3.9.0->3.3.11.1:
* Changed:
lib/parser/current.rb
--- /tmp/d20260515-1114-biqdi6/parser-3.3.9.0/lib/parser/current.rb 2026-05-15 02:34:19.027878443 +0000
+++ /tmp/d20260515-1114-biqdi6/parser-3.3.11.1/lib/parser/current.rb 2026-05-15 02:34:19.098878509 +0000
@@ -105 +105 @@
- current_version = '3.2.9'
+ current_version = '3.2.11'
@@ -114 +114 @@
- current_version = '3.3.9'
+ current_version = '3.3.11'
lib/parser/meta.rb
--- /tmp/d20260515-1114-biqdi6/parser-3.3.9.0/lib/parser/meta.rb 2026-05-15 02:34:19.038878453 +0000
+++ /tmp/d20260515-1114-biqdi6/parser-3.3.11.1/lib/parser/meta.rb 2026-05-15 02:34:19.109878520 +0000
@@ -10 +10 @@
- itarg itblock
+ itarg itblock blocknilarg
lib/parser/version.rb
--- /tmp/d20260515-1114-biqdi6/parser-3.3.9.0/lib/parser/version.rb 2026-05-15 02:34:19.090878502 +0000
+++ /tmp/d20260515-1114-biqdi6/parser-3.3.11.1/lib/parser/version.rb 2026-05-15 02:34:19.158878565 +0000
@@ -4 +4 @@
- VERSION = '3.3.9.0'
+ VERSION = '3.3.11.1'
parser.gemspec
--- /tmp/d20260515-1114-biqdi6/parser-3.3.9.0/parser.gemspec 2026-05-15 02:34:19.090878502 +0000
+++ /tmp/d20260515-1114-biqdi6/parser-3.3.11.1/parser.gemspec 2026-05-15 02:34:19.158878565 +0000
@@ -32 +32 @@
- spec.add_development_dependency 'bundler', '>= 1.15', '< 3.0.0'
+ spec.add_development_dependency 'bundler', '>= 1.15' |
27897ae to
5247f5f
Compare
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.79.2 to 1.86.2. - [Release notes](https://github.com/rubocop/rubocop/releases) - [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md) - [Commits](rubocop/rubocop@v1.79.2...v1.86.2) --- updated-dependencies: - dependency-name: rubocop dependency-version: 1.86.2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com>
5247f5f to
909a290
Compare
Contributor
Author
|
Superseded by #994. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bumps rubocop from 1.79.2 to 1.86.2.
Release notes
Sourced from rubocop's releases.
... (truncated)
Changelog
Sourced from rubocop's changelog.
... (truncated)
Commits
e513d33Cut 1.86.25fea1b5Update Changelog2a3dfcdDon't use Registry#to_h836b275Simplify registry internals90348d5Fix false positives inStyle/Copyright7419163Fix extension suggestion documentation linke467335Merge pull request #15161 from koic/fix_an_error_for_style_reduce_to_hash.mdbd48b6bMerge pull request #15160 from lovro-bikic/autoload-mixinsb9cda61Autoload mixins instead of requiring them55a8278Fix an error forStyle/ReduceToHashcop