http-cookie 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 633adcbc5625bcf9d8c1509b9480d955f3107a06
4
- data.tar.gz: 17c8fefbe45bb8429d3c533a1338bf4cec02345e
3
+ metadata.gz: d1a93009a55673a4827d9f8d85c19b5c08f4b19c
4
+ data.tar.gz: a7f4a3bb7a58ded55e6edac658cb20e0ad5d0821
5
5
  SHA512:
6
- metadata.gz: 190e3fc5a0a658b73a9fc6c0e43937b6fd9fdebb9b6d92e09edd51c24209fbd2fb61e9ea49eb29621f2fefeb1ec5095779deded65c343f2f0c52c4f53c1e0b76
7
- data.tar.gz: 96627fd5e6617b71c0b5dadf08e918169aabeda0c9ebf0f3a3d1d3d4c920b3999637f61009f4d531ddb588178bd6f0e26529b9ee49bf1808374971b7337a69f3
6
+ metadata.gz: d46e2e2d42e8a5e7947ccb2b0eb187b930e1e1dcb5912b75ffd78aca7532af0b9144d0210b7ca46ec3c4d591cfd8c742b64e393c60fda814d7ce75ae2aaada26
7
+ data.tar.gz: 5debdf55ddc8886db1e4e117e13829f6f93e2f08364126c0c693ed4dfde469374c49a35bef3f5b18455ab5379bf1289b386f30ebbae25603b4c5725beb2c231e
@@ -1,17 +1,21 @@
1
+ sudo: false
1
2
  language: ruby
3
+ cache: bundler
2
4
  rvm:
3
5
  - 1.8.7
4
6
  - ree
5
7
  - 1.9.3
6
8
  - 2.0.0
9
+ - 2.1
10
+ - 2.2
11
+ - 2.3.0
7
12
  - ruby-head
8
- - jruby-18mode
9
- - jruby-19mode
10
- - jruby-head
11
- - rbx-18mode
12
- - rbx-19mode
13
+ - jruby-1.7
14
+ - jruby-9
15
+ - rbx-2
13
16
  matrix:
14
17
  allow_failures:
15
18
  - rvm: ruby-head
16
- - rvm: rbx-18mode
17
- - rvm: rbx-19mode
19
+ - rvm: rbx-2
20
+ before_install:
21
+ - gem update bundler
@@ -1,3 +1,9 @@
1
+ ## 1.0.3 (2016-09-30)
2
+
3
+ - Treat comma as normal character in HTTP::Cookie.cookie_value_to_hash
4
+ instead of key-value pair separator. This should fix the problem
5
+ described in CVE-2016-7401.
6
+
1
7
  ## 1.0.2 (2013-09-10)
2
8
 
3
9
  - Fix HTTP::Cookie.parse so that it does not raise ArgumentError
@@ -27,8 +27,8 @@ Gem::Specification.new do |gem|
27
27
  gem.add_runtime_dependency("domain_name", ["~> 0.5"])
28
28
  gem.add_development_dependency("sqlite3", ["~> 1.3.3"]) unless defined?(JRUBY_VERSION)
29
29
  gem.add_development_dependency("bundler", [">= 1.2.0"])
30
- gem.add_development_dependency("test-unit", [">= 2.4.3"])
31
- gem.add_development_dependency("rake", [">= 0.9.2.2"])
30
+ gem.add_development_dependency("test-unit", [">= 2.4.3", *("< 3" if RUBY_VERSION < "1.9")])
31
+ gem.add_development_dependency("rake", [">= 0.9.2.2", *("< 11" if RUBY_VERSION < "1.9")])
32
32
  gem.add_development_dependency("rdoc", ["> 2.4.2"])
33
33
  gem.add_development_dependency("simplecov", [">= 0"])
34
34
  end
@@ -50,7 +50,7 @@ class HTTP::Cookie::Scanner < StringScanner
50
50
  }
51
51
  end
52
52
 
53
- def scan_value
53
+ def scan_value(comma_as_separator = false)
54
54
  ''.tap { |s|
55
55
  case
56
56
  when scan(/[^,;"]+/)
@@ -59,7 +59,9 @@ class HTTP::Cookie::Scanner < StringScanner
59
59
  # RFC 6265 2.2
60
60
  # A cookie-value may be DQUOTE'd.
61
61
  s << scan_dquoted
62
- when check(/;|#{RE_COOKIE_COMMA}/o)
62
+ when check(/;/)
63
+ break
64
+ when comma_as_separator && check(RE_COOKIE_COMMA)
63
65
  break
64
66
  else
65
67
  s << getch
@@ -68,12 +70,12 @@ class HTTP::Cookie::Scanner < StringScanner
68
70
  }
69
71
  end
70
72
 
71
- def scan_name_value
73
+ def scan_name_value(comma_as_separator = false)
72
74
  name = scan_name
73
75
  if skip(/\=/)
74
- value = scan_value
76
+ value = scan_value(comma_as_separator)
75
77
  else
76
- scan_value
78
+ scan_value(comma_as_separator)
77
79
  value = nil
78
80
  end
79
81
  [name, value]
@@ -159,7 +161,7 @@ class HTTP::Cookie::Scanner < StringScanner
159
161
 
160
162
  skip_wsp
161
163
 
162
- name, value = scan_name_value
164
+ name, value = scan_name_value(true)
163
165
  if value.nil?
164
166
  @logger.warn("Cookie definition lacks a name-value pair.") if @logger
165
167
  elsif name.empty?
@@ -176,7 +178,7 @@ class HTTP::Cookie::Scanner < StringScanner
176
178
  break
177
179
  when skip(/;/)
178
180
  skip_wsp
179
- aname, avalue = scan_name_value
181
+ aname, avalue = scan_name_value(true)
180
182
  next if aname.empty? || value.nil?
181
183
  aname.downcase!
182
184
  case aname
@@ -218,13 +220,12 @@ class HTTP::Cookie::Scanner < StringScanner
218
220
  until eos?
219
221
  skip_wsp
220
222
 
221
- name, value = scan_name_value
223
+ # Do not treat comma in a Cookie header value as separator; see CVE-2016-7401
224
+ name, value = scan_name_value(false)
222
225
 
223
226
  yield name, value if value
224
227
 
225
- # The comma is used as separator for concatenating multiple
226
- # values of a header.
227
- skip(/[;,]/)
228
+ skip(/;/)
228
229
  end
229
230
  end
230
231
  end
@@ -1,5 +1,5 @@
1
1
  module HTTP
2
2
  class Cookie
3
- VERSION = "1.0.2"
3
+ VERSION = "1.0.3"
4
4
  end
5
5
  end
@@ -441,17 +441,28 @@ class TestHTTPCookie < Test::Unit::TestCase
441
441
  ['Bar', 'value 2'],
442
442
  ['Baz', 'value3'],
443
443
  ['Bar', 'value"4'],
444
+ ['Quux', 'x, value=5'],
444
445
  ]
445
446
 
446
447
  cookie_value = HTTP::Cookie.cookie_value(pairs.map { |name, value|
447
448
  HTTP::Cookie.new(:name => name, :value => value)
448
449
  })
449
450
 
450
- assert_equal 'Foo=value1; Bar="value 2"; Baz=value3; Bar="value\\"4"', cookie_value
451
+ assert_equal 'Foo=value1; Bar="value 2"; Baz=value3; Bar="value\\"4"; Quux="x, value=5"', cookie_value
451
452
 
452
453
  hash = HTTP::Cookie.cookie_value_to_hash(cookie_value)
453
454
 
454
- assert_equal 3, hash.size
455
+ assert_equal pairs.map(&:first).uniq.size, hash.size
456
+
457
+ hash.each_pair { |name, value|
458
+ _, pvalue = pairs.assoc(name)
459
+ assert_equal pvalue, value
460
+ }
461
+
462
+ # Do not treat comma in a Cookie header value as separator; see CVE-2016-7401
463
+ hash = HTTP::Cookie.cookie_value_to_hash('Quux=x, value=5; Foo=value1; Bar="value 2"; Baz=value3; Bar="value\\"4"')
464
+
465
+ assert_equal pairs.map(&:first).uniq.size, hash.size
455
466
 
456
467
  hash.each_pair { |name, value|
457
468
  _, pvalue = pairs.assoc(name)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: http-cookie
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Akinori MUSHA
@@ -11,104 +11,104 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2013-09-10 00:00:00.000000000 Z
14
+ date: 2016-09-30 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: domain_name
18
18
  requirement: !ruby/object:Gem::Requirement
19
19
  requirements:
20
- - - ~>
20
+ - - "~>"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '0.5'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ~>
27
+ - - "~>"
28
28
  - !ruby/object:Gem::Version
29
29
  version: '0.5'
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: sqlite3
32
32
  requirement: !ruby/object:Gem::Requirement
33
33
  requirements:
34
- - - ~>
34
+ - - "~>"
35
35
  - !ruby/object:Gem::Version
36
36
  version: 1.3.3
37
37
  type: :development
38
38
  prerelease: false
39
39
  version_requirements: !ruby/object:Gem::Requirement
40
40
  requirements:
41
- - - ~>
41
+ - - "~>"
42
42
  - !ruby/object:Gem::Version
43
43
  version: 1.3.3
44
44
  - !ruby/object:Gem::Dependency
45
45
  name: bundler
46
46
  requirement: !ruby/object:Gem::Requirement
47
47
  requirements:
48
- - - '>='
48
+ - - ">="
49
49
  - !ruby/object:Gem::Version
50
50
  version: 1.2.0
51
51
  type: :development
52
52
  prerelease: false
53
53
  version_requirements: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - '>='
55
+ - - ">="
56
56
  - !ruby/object:Gem::Version
57
57
  version: 1.2.0
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: test-unit
60
60
  requirement: !ruby/object:Gem::Requirement
61
61
  requirements:
62
- - - '>='
62
+ - - ">="
63
63
  - !ruby/object:Gem::Version
64
64
  version: 2.4.3
65
65
  type: :development
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
68
68
  requirements:
69
- - - '>='
69
+ - - ">="
70
70
  - !ruby/object:Gem::Version
71
71
  version: 2.4.3
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: rake
74
74
  requirement: !ruby/object:Gem::Requirement
75
75
  requirements:
76
- - - '>='
76
+ - - ">="
77
77
  - !ruby/object:Gem::Version
78
78
  version: 0.9.2.2
79
79
  type: :development
80
80
  prerelease: false
81
81
  version_requirements: !ruby/object:Gem::Requirement
82
82
  requirements:
83
- - - '>='
83
+ - - ">="
84
84
  - !ruby/object:Gem::Version
85
85
  version: 0.9.2.2
86
86
  - !ruby/object:Gem::Dependency
87
87
  name: rdoc
88
88
  requirement: !ruby/object:Gem::Requirement
89
89
  requirements:
90
- - - '>'
90
+ - - ">"
91
91
  - !ruby/object:Gem::Version
92
92
  version: 2.4.2
93
93
  type: :development
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
- - - '>'
97
+ - - ">"
98
98
  - !ruby/object:Gem::Version
99
99
  version: 2.4.2
100
100
  - !ruby/object:Gem::Dependency
101
101
  name: simplecov
102
102
  requirement: !ruby/object:Gem::Requirement
103
103
  requirements:
104
- - - '>='
104
+ - - ">="
105
105
  - !ruby/object:Gem::Version
106
106
  version: '0'
107
107
  type: :development
108
108
  prerelease: false
109
109
  version_requirements: !ruby/object:Gem::Requirement
110
110
  requirements:
111
- - - '>='
111
+ - - ">="
112
112
  - !ruby/object:Gem::Version
113
113
  version: '0'
114
114
  description: HTTP::Cookie is a Ruby library to handle HTTP Cookies based on RFC 6265. It
@@ -127,8 +127,8 @@ extra_rdoc_files:
127
127
  - README.md
128
128
  - LICENSE.txt
129
129
  files:
130
- - .gitignore
131
- - .travis.yml
130
+ - ".gitignore"
131
+ - ".travis.yml"
132
132
  - CHANGELOG.md
133
133
  - Gemfile
134
134
  - LICENSE.txt
@@ -162,17 +162,17 @@ require_paths:
162
162
  - lib
163
163
  required_ruby_version: !ruby/object:Gem::Requirement
164
164
  requirements:
165
- - - '>='
165
+ - - ">="
166
166
  - !ruby/object:Gem::Version
167
167
  version: '0'
168
168
  required_rubygems_version: !ruby/object:Gem::Requirement
169
169
  requirements:
170
- - - '>='
170
+ - - ">="
171
171
  - !ruby/object:Gem::Version
172
172
  version: '0'
173
173
  requirements: []
174
174
  rubyforge_project:
175
- rubygems_version: 2.0.3
175
+ rubygems_version: 2.6.6
176
176
  signing_key:
177
177
  specification_version: 4
178
178
  summary: A Ruby library to handle HTTP Cookies based on RFC 6265