Skip to content

Commit 5f7416e

Browse files
committed
v3.3.7 with updated uri, cgi and net-imap
1 parent 64dfc2d commit 5f7416e

File tree

10 files changed

+57
-18
lines changed

10 files changed

+57
-18
lines changed

Diff for: doc/legal/bundled_gems

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ test-unit 3.6.1 https://github.com/test-unit/test-unit
1212
rexml 3.3.9 https://github.com/ruby/rexml
1313
rss 0.3.1 https://github.com/ruby/rss
1414
net-ftp 0.3.4 https://github.com/ruby/net-ftp
15-
net-imap 0.4.9.1 https://github.com/ruby/net-imap
15+
net-imap 0.4.19 https://github.com/ruby/net-imap
1616
net-pop 0.1.2 https://github.com/ruby/net-pop
1717
net-smtp 0.4.0.1 https://github.com/ruby/net-smtp
1818
matrix 0.4.2 https://github.com/ruby/matrix

Diff for: lib/mri/cgi.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@
288288
#
289289

290290
class CGI
291-
VERSION = "0.4.1"
291+
VERSION = "0.4.2"
292292
end
293293

294294
require 'cgi/core'

Diff for: lib/mri/cgi/cookie.rb

+3-2
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,10 @@ def self.parse(raw_cookie)
190190
values ||= ""
191191
values = values.split('&').collect{|v| CGI.unescape(v,@@accept_charset) }
192192
if cookies.has_key?(name)
193-
values = cookies[name].value + values
193+
cookies[name].concat(values)
194+
else
195+
cookies[name] = Cookie.new(name, *values)
194196
end
195-
cookies[name] = Cookie.new(name, *values)
196197
end
197198

198199
cookies

Diff for: lib/mri/cgi/session/pstore.rb

+5-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@
1111
# cgi/session.rb for more details on session storage managers.
1212

1313
require_relative '../session'
14-
require 'pstore'
14+
begin
15+
require 'pstore'
16+
rescue LoadError
17+
end
1518

1619
class CGI
1720
class Session
@@ -82,7 +85,7 @@ def delete
8285
File::unlink path
8386
end
8487

85-
end
88+
end if defined?(::PStore)
8689
end
8790
end
8891
# :enddoc:

Diff for: lib/mri/cgi/util.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ def unescapeHTML(string)
184184
def escapeElement(string, *elements)
185185
elements = elements[0] if elements[0].kind_of?(Array)
186186
unless elements.empty?
187-
string.gsub(/<\/?(?:#{elements.join("|")})(?!\w)(?:.|\n)*?>/i) do
187+
string.gsub(/<\/?(?:#{elements.join("|")})\b[^<>]*+>?/im) do
188188
CGI.escapeHTML($&)
189189
end
190190
else
@@ -204,7 +204,7 @@ def escapeElement(string, *elements)
204204
def unescapeElement(string, *elements)
205205
elements = elements[0] if elements[0].kind_of?(Array)
206206
unless elements.empty?
207-
string.gsub(/&lt;\/?(?:#{elements.join("|")})(?!\w)(?:.|\n)*?&gt;/i) do
207+
string.gsub(/&lt;\/?(?:#{elements.join("|")})\b(?>[^&]+|&(?![gl]t;)\w+;)*(?:&gt;)?/im) do
208208
unescapeHTML($&)
209209
end
210210
else

Diff for: lib/mri/uri/generic.rb

+7-8
Original file line numberDiff line numberDiff line change
@@ -1141,17 +1141,16 @@ def merge(oth)
11411141
base.fragment=(nil)
11421142

11431143
# RFC2396, Section 5.2, 4)
1144-
if !authority
1145-
base.set_path(merge_path(base.path, rel.path)) if base.path && rel.path
1146-
else
1147-
# RFC2396, Section 5.2, 4)
1148-
base.set_path(rel.path) if rel.path
1144+
if authority
1145+
base.set_userinfo(rel.userinfo)
1146+
base.set_host(rel.host)
1147+
base.set_port(rel.port || base.default_port)
1148+
base.set_path(rel.path)
1149+
elsif base.path && rel.path
1150+
base.set_path(merge_path(base.path, rel.path))
11491151
end
11501152

11511153
# RFC2396, Section 5.2, 7)
1152-
base.set_userinfo(rel.userinfo) if rel.userinfo
1153-
base.set_host(rel.host) if rel.host
1154-
base.set_port(rel.port) if rel.port
11551154
base.query = rel.query if rel.query
11561155
base.fragment=(rel.fragment) if rel.fragment
11571156

Diff for: lib/mri/uri/version.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
module URI
22
# :stopdoc:
3-
VERSION_CODE = '001301'.freeze
3+
VERSION_CODE = '001302'.freeze
44
VERSION = VERSION_CODE.scan(/../).collect{|n| n.to_i}.join('.').freeze
55
# :startdoc:
66
end

Diff for: test/mri/tests/cgi/test_cgi_session.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ def test_cgi_session_pstore
9191
assert_equal(value1,session["key1"])
9292
assert_equal(value2,session["key2"])
9393
session.close
94-
end
94+
end if defined?(::PStore)
9595
def test_cgi_session_specify_session_id
9696
update_env(
9797
'REQUEST_METHOD' => 'GET',

Diff for: test/mri/tests/cgi/test_cgi_util.rb

+18
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,14 @@ def test_cgi_escapeElement
269269
assert_equal("<BR>&lt;A HREF=&quot;url&quot;&gt;&lt;/A&gt;", escapeElement('<BR><A HREF="url"></A>', ["A", "IMG"]))
270270
assert_equal("<BR>&lt;A HREF=&quot;url&quot;&gt;&lt;/A&gt;", escape_element('<BR><A HREF="url"></A>', "A", "IMG"))
271271
assert_equal("<BR>&lt;A HREF=&quot;url&quot;&gt;&lt;/A&gt;", escape_element('<BR><A HREF="url"></A>', ["A", "IMG"]))
272+
273+
assert_equal("&lt;A &lt;A HREF=&quot;url&quot;&gt;&lt;/A&gt;", escapeElement('<A <A HREF="url"></A>', "A", "IMG"))
274+
assert_equal("&lt;A &lt;A HREF=&quot;url&quot;&gt;&lt;/A&gt;", escapeElement('<A <A HREF="url"></A>', ["A", "IMG"]))
275+
assert_equal("&lt;A &lt;A HREF=&quot;url&quot;&gt;&lt;/A&gt;", escape_element('<A <A HREF="url"></A>', "A", "IMG"))
276+
assert_equal("&lt;A &lt;A HREF=&quot;url&quot;&gt;&lt;/A&gt;", escape_element('<A <A HREF="url"></A>', ["A", "IMG"]))
277+
278+
assert_equal("&lt;A &lt;A ", escapeElement('<A <A ', "A", "IMG"))
279+
assert_equal("&lt;A &lt;A ", escapeElement('<A <A ', ["A", "IMG"]))
272280
end
273281

274282

@@ -277,6 +285,16 @@ def test_cgi_unescapeElement
277285
assert_equal('&lt;BR&gt;<A HREF="url"></A>', unescapeElement(escapeHTML('<BR><A HREF="url"></A>'), ["A", "IMG"]))
278286
assert_equal('&lt;BR&gt;<A HREF="url"></A>', unescape_element(escapeHTML('<BR><A HREF="url"></A>'), "A", "IMG"))
279287
assert_equal('&lt;BR&gt;<A HREF="url"></A>', unescape_element(escapeHTML('<BR><A HREF="url"></A>'), ["A", "IMG"]))
288+
289+
assert_equal('<A <A HREF="url"></A>', unescapeElement(escapeHTML('<A <A HREF="url"></A>'), "A", "IMG"))
290+
assert_equal('<A <A HREF="url"></A>', unescapeElement(escapeHTML('<A <A HREF="url"></A>'), ["A", "IMG"]))
291+
assert_equal('<A <A HREF="url"></A>', unescape_element(escapeHTML('<A <A HREF="url"></A>'), "A", "IMG"))
292+
assert_equal('<A <A HREF="url"></A>', unescape_element(escapeHTML('<A <A HREF="url"></A>'), ["A", "IMG"]))
293+
294+
assert_equal('<A <A ', unescapeElement(escapeHTML('<A <A '), "A", "IMG"))
295+
assert_equal('<A <A ', unescapeElement(escapeHTML('<A <A '), ["A", "IMG"]))
296+
assert_equal('<A <A ', unescape_element(escapeHTML('<A <A '), "A", "IMG"))
297+
assert_equal('<A <A ', unescape_element(escapeHTML('<A <A '), ["A", "IMG"]))
280298
end
281299
end
282300

Diff for: test/mri/tests/uri/test_generic.rb

+18
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,17 @@ def test_parse
164164
# must be empty string to identify as path-abempty, not path-absolute
165165
assert_equal('', url.host)
166166
assert_equal('http:////example.com', url.to_s)
167+
168+
# sec-2957667
169+
url = URI.parse('http://user:[email protected]').merge('//example.net')
170+
assert_equal('http://example.net', url.to_s)
171+
assert_nil(url.userinfo)
172+
url = URI.join('http://user:[email protected]', '//example.net')
173+
assert_equal('http://example.net', url.to_s)
174+
assert_nil(url.userinfo)
175+
url = URI.parse('http://user:[email protected]') + '//example.net'
176+
assert_equal('http://example.net', url.to_s)
177+
assert_nil(url.userinfo)
167178
end
168179

169180
def test_parse_scheme_with_symbols
@@ -256,6 +267,13 @@ def test_merge
256267
assert_equal(u0, u1)
257268
end
258269

270+
def test_merge_authority
271+
u = URI.parse('http://user:[email protected]:8080')
272+
u0 = URI.parse('http://new.example.org/path')
273+
u1 = u.merge('//new.example.org/path')
274+
assert_equal(u0, u1)
275+
end
276+
259277
def test_route
260278
url = URI.parse('http://hoge/a.html').route_to('http://hoge/b.html')
261279
assert_equal('b.html', url.to_s)

0 commit comments

Comments
 (0)