Hello community,
here is the log from the commit of package rubygem-rspec-support for
openSUSE:Factory checked in at 2015-03-01 14:57:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-rspec-support (Old)
and /work/SRC/openSUSE:Factory/.rubygem-rspec-support.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-rspec-support"
Changes:
--------
---
/work/SRC/openSUSE:Factory/rubygem-rspec-support/rubygem-rspec-support.changes
2015-02-08 13:03:35.000000000 +0100
+++
/work/SRC/openSUSE:Factory/.rubygem-rspec-support.new/rubygem-rspec-support.changes
2015-03-01 14:57:46.000000000 +0100
@@ -1,0 +2,9 @@
+Thu Feb 26 05:34:24 UTC 2015 - [email protected]
+
+- updated to version 3.2.2
+ Bug Fixes:
+
+ * Fix an encoding issue with `EncodedString#split` when encountering an
+ invalid byte string. (Benjamin Fleischer, #1760)
+
+-------------------------------------------------------------------
Old:
----
rspec-support-3.2.1.gem
New:
----
rspec-support-3.2.2.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-rspec-support.spec ++++++
--- /var/tmp/diff_new_pack.0Rltqm/_old 2015-03-01 14:57:47.000000000 +0100
+++ /var/tmp/diff_new_pack.0Rltqm/_new 2015-03-01 14:57:47.000000000 +0100
@@ -24,7 +24,7 @@
#
Name: rubygem-rspec-support
-Version: 3.2.1
+Version: 3.2.2
Release: 0
%define mod_name rspec-support
%define mod_full_name %{mod_name}-%{version}
++++++ rspec-support-3.2.1.gem -> rspec-support-3.2.2.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/Changelog.md new/Changelog.md
--- old/Changelog.md 2015-02-04 23:48:43.000000000 +0100
+++ new/Changelog.md 2015-02-24 04:35:55.000000000 +0100
@@ -1,3 +1,10 @@
+### 3.2.2 / 2015-02-23
+
+Bug Fixes:
+
+* Fix an encoding issue with `EncodedString#split` when encountering an
+ invalid byte string. (Benjamin Fleischer, #1760)
+
### 3.2.1 / 2015-02-04
[Full Changelog](http://github.com/rspec/rspec-support/compare/v3.2.0...v3.2.1)
Files old/checksums.yaml.gz and new/checksums.yaml.gz differ
Files old/checksums.yaml.gz.sig and new/checksums.yaml.gz.sig differ
Files old/data.tar.gz.sig and new/data.tar.gz.sig differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rspec/support/encoded_string.rb
new/lib/rspec/support/encoded_string.rb
--- old/lib/rspec/support/encoded_string.rb 2015-02-04 23:48:43.000000000
+0100
+++ new/lib/rspec/support/encoded_string.rb 2015-02-24 04:35:55.000000000
+0100
@@ -3,16 +3,32 @@
# @private
class EncodedString
# Reduce allocations by storing constants.
- UTF_8 = "UTF-8"
- US_ASCII = 'US-ASCII'
- # else: '?' 63.chr ("\x3F")
+ UTF_8 = "UTF-8"
+ US_ASCII = "US-ASCII"
+ #
+ # In MRI 2.1 'invalid: :replace' changed to also replace an invalid byte
sequence
+ # see https://github.com/ruby/ruby/blob/v2_1_0/NEWS#L176
+ # https://www.ruby-forum.com/topic/6861247
+ # https://twitter.com/nalsh/status/553413844685438976
+ #
+ # For example, given:
+ # "\x80".force_encoding("Emacs-Mule").encode(:invalid =>
:replace).bytes.to_a
+ #
+ # On MRI 2.1 or above: 63 # '?'
+ # else : 128 # "\x80"
+ #
+ # Ruby's default replacement string is:
+ # U+FFFD ("\xEF\xBF\xBD"), for Unicode encoding forms, else
+ # ? ("\x3F")
REPLACE = "?"
ENCODE_UNCONVERTABLE_BYTES = {
:invalid => :replace,
- :undef => :replace
+ :undef => :replace,
+ :replace => REPLACE
}
ENCODE_NO_CONVERTER = {
:invalid => :replace,
+ :replace => REPLACE
}
def initialize(string, encoding=nil)
@@ -54,7 +70,7 @@
# vs "\x80".encode('UTF-8','ASCII-8BIT', undef: :replace, replace:
'<undef>')
# # => '<undef>'
# Encoding::CompatibilityError
- # when Enconding.compatbile?(str1, str2) is false
+ # when Encoding.compatibile?(str1, str2) is nil
# e.g. utf_16le_emoji_string.split("\n")
# e.g. valid_unicode_string.encode(utf8_encoding) << ascii_string
# Encoding::InvalidByteSequenceError:
@@ -64,13 +80,13 @@
# vs "\x80".encode('UTF-8','US-ASCII', invalid: :replace, replace:
'<byte>')
# # => '<byte>'
# ArgumentError
- # when operating on a string with invalid bytes
- # e.g."\xEF".split("\n")
+ # when operating on a string with invalid bytes
+ # e.g."\x80".split("\n")
# TypeError
- # when a symbol is passed as an encoding
- # Encoding.find(:"utf-8")
- # when calling force_encoding on an object
- # that doesn't respond to #to_str
+ # when a symbol is passed as an encoding
+ # Encoding.find(:"UTF-8")
+ # when calling force_encoding on an object
+ # that doesn't respond to #to_str
#
# Raised by transcoding methods:
# Encoding::ConverterNotFoundError:
@@ -80,25 +96,35 @@
# e.g. "\x80".force_encoding('ASCII-8BIT').encode('Emacs-Mule')
#
# Raised by byte <-> char conversions
- # RangeError: out of char range
- # e.g. the UTF-16LE emoji: 128169.chr
+ # RangeError: out of char range
+ # e.g. the UTF-16LE emoji: 128169.chr
def matching_encoding(string)
+ string = remove_invalid_bytes(string)
string.encode(@encoding)
rescue Encoding::UndefinedConversionError,
Encoding::InvalidByteSequenceError
- normalize_missing(string.encode(@encoding,
ENCODE_UNCONVERTABLE_BYTES))
+ string.encode(@encoding, ENCODE_UNCONVERTABLE_BYTES)
rescue Encoding::ConverterNotFoundError
-
normalize_missing(string.dup.force_encoding(@encoding).encode(ENCODE_NO_CONVERTER))
+ string.dup.force_encoding(@encoding).encode(ENCODE_NO_CONVERTER)
end
- # Ruby's default replacement string is:
- # for Unicode encoding forms: U+FFFD ("\xEF\xBF\xBD")
- MRI_UNICODE_UNKOWN_CHARACTER = "\xEF\xBF\xBD".force_encoding(UTF_8)
-
- def normalize_missing(string)
- if @encoding.to_s == UTF_8
- string.gsub(MRI_UNICODE_UNKOWN_CHARACTER, REPLACE)
- else
- string
+ # Prevents raising ArgumentError
+ if String.method_defined?(:scrub)
+ #
https://github.com/ruby/ruby/blob/eeb05e8c11/doc/NEWS-2.1.0#L120-L123
+ # https://github.com/ruby/ruby/blob/v2_1_0/string.c#L8242
+ # https://github.com/hsbt/string-scrub
+ #
https://github.com/rubinius/rubinius/blob/v2.5.2/kernel/common/string.rb#L1913-L1972
+ def remove_invalid_bytes(string)
+ string.scrub(REPLACE)
+ end
+ else
+ # http://stackoverflow.com/a/8711118/879854
+ # Loop over chars in a string replacing chars
+ # with invalid encoding, which is a pretty good proxy
+ # for the invalid byte sequence that causes an ArgumentError
+ def remove_invalid_bytes(string)
+ string.chars.map do |char|
+ char.valid_encoding? ? char : REPLACE
+ end.join
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/rspec/support/version.rb
new/lib/rspec/support/version.rb
--- old/lib/rspec/support/version.rb 2015-02-04 23:48:43.000000000 +0100
+++ new/lib/rspec/support/version.rb 2015-02-24 04:35:55.000000000 +0100
@@ -1,7 +1,7 @@
module RSpec
module Support
module Version
- STRING = '3.2.1'
+ STRING = '3.2.2'
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2015-02-04 23:48:43.000000000 +0100
+++ new/metadata 2015-02-24 04:35:55.000000000 +0100
@@ -1,7 +1,7 @@
--- !ruby/object:Gem::Specification
name: rspec-support
version: !ruby/object:Gem::Version
- version: 3.2.1
+ version: 3.2.2
platform: ruby
authors:
- David Chelimsky
@@ -48,7 +48,7 @@
ZsVDj6a7lH3cNqtWXZxrb2wO38qV5AkYj8SQK7Hj3/Yui9myUX3crr+PdetazSqQ
F3MdtaDehhjC
-----END CERTIFICATE-----
-date: 2015-02-04 00:00:00.000000000 Z
+date: 2015-02-24 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: bundler
@@ -134,5 +134,5 @@
rubygems_version: 2.2.2
signing_key:
specification_version: 4
-summary: rspec-support-3.2.1
+summary: rspec-support-3.2.2
test_files: []
Files old/metadata.gz.sig and new/metadata.gz.sig differ
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]