diff options
-rw-r--r-- | lib/rubygems/package/tar_header.rb | 3 | ||||
-rw-r--r-- | test/rubygems/test_gem_package_tar_header.rb | 19 |
2 files changed, 21 insertions, 1 deletions
diff --git a/lib/rubygems/package/tar_header.rb b/lib/rubygems/package/tar_header.rb index c37612772a..83a208bdf3 100644 --- a/lib/rubygems/package/tar_header.rb +++ b/lib/rubygems/package/tar_header.rb @@ -126,7 +126,8 @@ class Gem::Package::TarHeader end def self.strict_oct(str) - return str.oct if str =~ /\A[0-7]*\z/ + return str.strip.oct if str.strip =~ /\A[0-7]*\z/ + raise ArgumentError, "#{str.inspect} is not an octal string" end diff --git a/test/rubygems/test_gem_package_tar_header.rb b/test/rubygems/test_gem_package_tar_header.rb index 7e59073407..3629e6b685 100644 --- a/test/rubygems/test_gem_package_tar_header.rb +++ b/test/rubygems/test_gem_package_tar_header.rb @@ -205,4 +205,23 @@ tjmather\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 assert_equal 6932, tar_header.checksum end + def test_spaces_in_headers + stream = StringIO.new( + <<-EOF.dup.force_encoding('binary').split("\n").join +Access_Points_09202018.csv +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 +\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00 +\x00\x00100777 \x00 0 \x00 0 \x00 4357 13545040367 104501 +\x000 + EOF + ) + + tar_header = Gem::Package::TarHeader.from stream + + assert_equal 0, tar_header.uid + assert_equal 0, tar_header.gid + end + end |