Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package rubygem-addressable for openSUSE:Factory checked in at 2023-11-03 22:19:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/rubygem-addressable (Old) and /work/SRC/openSUSE:Factory/.rubygem-addressable.new.17445 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-addressable" Fri Nov 3 22:19:20 2023 rev:24 rq:1122805 version:2.8.5 Changes: -------- --- /work/SRC/openSUSE:Factory/rubygem-addressable/rubygem-addressable.changes 2023-06-14 16:29:17.038447786 +0200 +++ /work/SRC/openSUSE:Factory/.rubygem-addressable.new.17445/rubygem-addressable.changes 2023-11-03 22:19:22.334344060 +0100 @@ -1,0 +2,13 @@ +Thu Nov 2 14:29:46 UTC 2023 - Dan Äermák <dan.cer...@posteo.net> + +- # Addressable 2.8.5 +- Fix thread safety issue with encoding tables ([#515]) +- Define URI::NONE as a module to avoid serialization issues ([#509]) +- Fix YAML serialization ([#508]) + +[#508]: https://github.com/sporkmonger/addressable/pull/508 +[#509]: https://github.com/sporkmonger/addressable/pull/509 +[#515]: https://github.com/sporkmonger/addressable/pull/515 + + +------------------------------------------------------------------- Old: ---- addressable-2.8.4.gem New: ---- addressable-2.8.5.gem ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ rubygem-addressable.spec ++++++ --- /var/tmp/diff_new_pack.XrnOz4/_old 2023-11-03 22:19:23.218376580 +0100 +++ /var/tmp/diff_new_pack.XrnOz4/_new 2023-11-03 22:19:23.218376580 +0100 @@ -24,11 +24,10 @@ # Name: rubygem-addressable -Version: 2.8.4 +Version: 2.8.5 Release: 0 %define mod_name addressable %define mod_full_name %{mod_name}-%{version} -BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: %{ruby >= 2.2} BuildRequires: %{rubygem gem2rpm} BuildRequires: %{rubygem rdoc > 3.10} @@ -38,7 +37,6 @@ Source1: gem2rpm.yml Summary: URI Implementation License: Apache-2.0 -Group: Development/Languages/Ruby %description Addressable is an alternative implementation to the URI implementation that is ++++++ addressable-2.8.4.gem -> addressable-2.8.5.gem ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CHANGELOG.md new/CHANGELOG.md --- old/CHANGELOG.md 2023-04-09 17:02:36.000000000 +0200 +++ new/CHANGELOG.md 2023-08-03 10:54:34.000000000 +0200 @@ -1,3 +1,12 @@ +# Addressable 2.8.5 +- Fix thread safety issue with encoding tables ([#515]) +- Define URI::NONE as a module to avoid serialization issues ([#509]) +- Fix YAML serialization ([#508]) + +[#508]: https://github.com/sporkmonger/addressable/pull/508 +[#509]: https://github.com/sporkmonger/addressable/pull/509 +[#515]: https://github.com/sporkmonger/addressable/pull/515 + # Addressable 2.8.4 - Restore `Addressable::IDNA.unicode_normalize_kc` as a deprecated method ([#504]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/Rakefile new/Rakefile --- old/Rakefile 2023-04-09 17:02:36.000000000 +0200 +++ new/Rakefile 2023-08-03 10:54:34.000000000 +0200 @@ -20,12 +20,17 @@ TEXT PKG_FILES = FileList[ - "lib/**/*", "spec/**/*", "vendor/**/*", "data/**/*", - "tasks/**/*", - "[A-Z]*", "Rakefile" -].exclude(/pkg/).exclude(/database\.yml/). - exclude(/Gemfile\.lock/).exclude(/[_\.]git$/). - exclude(/coverage/) + "data/**/*", + "lib/**/*.rb", + "spec/**/*.rb", + "tasks/**/*.rake", + "addressable.gemspec", + "CHANGELOG.md", + "Gemfile", + "LICENSE.txt", + "README.md", + "Rakefile", +] task :default => "spec" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/addressable.gemspec new/addressable.gemspec --- old/addressable.gemspec 2023-04-09 17:02:36.000000000 +0200 +++ new/addressable.gemspec 2023-08-03 10:54:34.000000000 +0200 @@ -1,15 +1,15 @@ # -*- encoding: utf-8 -*- -# stub: addressable 2.8.4 ruby lib +# stub: addressable 2.8.5 ruby lib Gem::Specification.new do |s| s.name = "addressable".freeze - s.version = "2.8.4" + s.version = "2.8.5" s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version= s.metadata = { "changelog_uri" => "https://github.com/sporkmonger/addressable/blob/main/CHANGELOG.md" } if s.respond_to? :metadata= s.require_paths = ["lib".freeze] s.authors = ["Bob Aman".freeze] - s.date = "2023-04-09" + s.date = "2023-08-03" s.description = "Addressable is an alternative implementation to the URI implementation that is\npart of Ruby's standard library. It is flexible, offers heuristic parsing, and\nadditionally provides extensive support for IRIs and URI templates.\n".freeze s.email = "b...@sporkmonger.com".freeze s.extra_rdoc_files = ["README.md".freeze] @@ -18,7 +18,7 @@ s.licenses = ["Apache-2.0".freeze] s.rdoc_options = ["--main".freeze, "README.md".freeze] s.required_ruby_version = Gem::Requirement.new(">= 2.2".freeze) - s.rubygems_version = "3.4.10".freeze + s.rubygems_version = "3.4.18".freeze s.summary = "URI Implementation".freeze s.specification_version = 4 Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/addressable/uri.rb new/lib/addressable/uri.rb --- old/lib/addressable/uri.rb 2023-04-09 17:02:36.000000000 +0200 +++ new/lib/addressable/uri.rb 2023-08-03 10:54:34.000000000 +0200 @@ -344,17 +344,13 @@ ## # Tables used to optimize encoding operations in `self.encode_component` # and `self.normalize_component` - SEQUENCE_ENCODING_TABLE = Hash.new do |hash, sequence| - hash[sequence] = sequence.unpack("C*").map do |c| - format("%02x", c) - end.join - end - - SEQUENCE_UPCASED_PERCENT_ENCODING_TABLE = Hash.new do |hash, sequence| - hash[sequence] = sequence.unpack("C*").map do |c| - format("%%%02X", c) - end.join - end + SEQUENCE_ENCODING_TABLE = (0..255).map do |byte| + format("%02x", byte).freeze + end.freeze + + SEQUENCE_UPCASED_PERCENT_ENCODING_TABLE = (0..255).map do |byte| + format("%%%02X", byte).freeze + end.freeze ## # Percent encodes a URI component. @@ -421,16 +417,17 @@ component = component.dup component.force_encoding(Encoding::ASCII_8BIT) # Avoiding gsub! because there are edge cases with frozen strings - component = component.gsub(character_class) do |sequence| - SEQUENCE_UPCASED_PERCENT_ENCODING_TABLE[sequence] + component = component.gsub(character_class) do |char| + SEQUENCE_UPCASED_PERCENT_ENCODING_TABLE[char.ord] end if upcase_encoded.length > 0 - upcase_encoded_chars = upcase_encoded.chars.map do |char| - SEQUENCE_ENCODING_TABLE[char] + upcase_encoded_chars = upcase_encoded.bytes.map do |byte| + SEQUENCE_ENCODING_TABLE[byte] end component = component.gsub(/%(#{upcase_encoded_chars.join('|')})/, &:upcase) end + return component end @@ -560,10 +557,9 @@ leave_re = if leave_encoded.length > 0 character_class = "#{character_class}%" unless character_class.include?('%') - "|%(?!#{leave_encoded.chars.flat_map do |char| - seq = SEQUENCE_ENCODING_TABLE[char] - [seq.upcase, seq.downcase] - end.join('|')})" + bytes = leave_encoded.bytes + leave_encoded_pattern = bytes.map { |b| SEQUENCE_ENCODING_TABLE[b] }.join('|') + "|%(?!#{leave_encoded_pattern}|#{leave_encoded_pattern.upcase})" end character_class = if leave_re @@ -2396,6 +2392,25 @@ @validation_deferred = false end + def encode_with(coder) + instance_variables.each do |ivar| + value = instance_variable_get(ivar) + if value != NONE + key = ivar.to_s.slice(1..-1) + coder[key] = value + end + end + nil + end + + def init_with(coder) + reset_ivs + coder.map.each do |key, value| + instance_variable_set("@#{key}", value) + end + nil + end + protected SELF_REF = '.' PARENT = '..' @@ -2569,7 +2584,7 @@ @query = nil end - NONE = Object.new.freeze + NONE = Module.new.freeze private_constant :NONE end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/lib/addressable/version.rb new/lib/addressable/version.rb --- old/lib/addressable/version.rb 2023-04-09 17:02:36.000000000 +0200 +++ new/lib/addressable/version.rb 2023-08-03 10:54:34.000000000 +0200 @@ -23,7 +23,7 @@ module VERSION MAJOR = 2 MINOR = 8 - TINY = 4 + TINY = 5 STRING = [MAJOR, MINOR, TINY].join('.') end diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/metadata new/metadata --- old/metadata 2023-04-09 17:02:36.000000000 +0200 +++ new/metadata 2023-08-03 10:54:34.000000000 +0200 @@ -1,14 +1,14 @@ --- !ruby/object:Gem::Specification name: addressable version: !ruby/object:Gem::Version - version: 2.8.4 + version: 2.8.5 platform: ruby authors: - Bob Aman autorequire: bindir: bin cert_chain: [] -date: 2023-04-09 00:00:00.000000000 Z +date: 2023-08-03 00:00:00.000000000 Z dependencies: - !ruby/object:Gem::Dependency name: public_suffix @@ -109,7 +109,7 @@ - !ruby/object:Gem::Version version: '0' requirements: [] -rubygems_version: 3.4.10 +rubygems_version: 3.4.18 signing_key: specification_version: 4 summary: URI Implementation diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/spec/addressable/uri_spec.rb new/spec/addressable/uri_spec.rb --- old/spec/addressable/uri_spec.rb 2023-04-09 17:02:36.000000000 +0200 +++ new/spec/addressable/uri_spec.rb 2023-08-03 10:54:34.000000000 +0200 @@ -20,6 +20,7 @@ require "addressable/uri" require "uri" require "ipaddr" +require "yaml" if !"".respond_to?("force_encoding") class String @@ -6768,6 +6769,37 @@ end end +describe Addressable::URI, "support serialization roundtrip" do + before do + @uri = Addressable::URI.new( + :scheme => "http", + :user => "user", + :password => "password", + :host => "example.com", + :port => 80, + :path => "/path", + :query => "query=value", + :fragment => "fragment" + ) + end + + it "is in a working state after being serialized with Marshal" do + @uri = Addressable::URI.parse("http://example.com") + cloned_uri = Marshal.load(Marshal.dump(@uri)) + expect(cloned_uri.normalized_scheme).to be == @uri.normalized_scheme + end + + it "is in a working state after being serialized with YAML" do + @uri = Addressable::URI.parse("http://example.com") + cloned_uri = if YAML.respond_to?(:unsafe_load) + YAML.unsafe_load(YAML.dump(@uri)) + else + YAML.load(YAML.dump(@uri)) + end + expect(cloned_uri.normalized_scheme).to be == @uri.normalized_scheme + end +end + describe Addressable::URI, "when initialized in a non-main `Ractor`" do it "should have the same value as if used in the main `Ractor`" do pending("Ruby 3.0+ for `Ractor` support") unless defined?(Ractor) @@ -6799,3 +6831,10 @@ expect(res).to be nil end end + +describe Addressable::URI, "YAML safe loading" do + it "doesn't serialize anonymous objects" do + url = Addressable::URI.parse("http://example.com/") + expect(YAML.dump(url)).to_not include("!ruby/object {}") + end +end