Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

merge revision(s) 31578:

?\012
* lib/uri/generic.rb (#route_from_path): Fix a bug where
  URI('http://h/b/').route_to('http://h/b') wrongly returned './'
  (should be '../b'). [Bug #4476]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@31578 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Signed-off-by: URABE, Shyouhei <shyouhei@ruby-lang.org>

git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8_7@31666 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
  • Loading branch information...
commit ad71472cc836f0e4027502c4039d452e84536d71 1 parent 85ec21a
@shyouhei shyouhei authored
View
6 ChangeLog
@@ -1,3 +1,9 @@
+Sat May 21 04:55:15 2011 Akinori MUSHA <knu@iDaemons.org>
+
+ * lib/uri/generic.rb (#route_from_path): Fix a bug where
+ URI('http://h/b/').route_to('http://h/b') wrongly returned './'
+ (should be '../b'). [Bug #4476]
+
Sat May 21 04:54:20 2011 Akinori MUSHA <knu@iDaemons.org>
* lib/fileutils.rb (FileUtils#touch): Fix corrupted output.
View
26 lib/uri/generic.rb
@@ -799,30 +799,26 @@ def merge0(oth)
private :merge0
def route_from_path(src, dst)
- # RFC2396, Section 4.2
- return '' if src == dst
-
- src_path = split_path(src)
- dst_path = split_path(dst)
-
- # hmm... dst has abnormal absolute path,
- # like "/./", "/../", "/x/../", ...
- if dst_path.include?('..') ||
- dst_path.include?('.')
+ case dst
+ when src
+ # RFC2396, Section 4.2
+ return ''
+ when %r{(?:\A|/)\.\.?(?:/|\z)}
+ # dst has abnormal absolute path,
+ # like "/./", "/../", "/x/../", ...
return dst.dup
end
- src_path.pop
+ src_path = src.scan(%r{(?:\A|[^/]+)/})
+ dst_path = dst.scan(%r{(?:\A|[^/]+)/?})
# discard same parts
- while dst_path.first == src_path.first
- break if dst_path.empty?
-
+ while !dst_path.empty? && dst_path.first == src_path.first
src_path.shift
dst_path.shift
end
- tmp = dst_path.join('/')
+ tmp = dst_path.join
# calculate
if src_path.empty?
View
11 test/uri/test_generic.rb
@@ -231,8 +231,19 @@ def test_route
url = URI.parse('http://hoge/a/b/').route_to('http://MOGE/b/')
assert_equal('//MOGE/b/', url.to_s)
+ url = URI.parse('http://hoge/b').route_to('http://hoge/b/')
+ assert_equal('b/', url.to_s)
+ url = URI.parse('http://hoge/b/a').route_to('http://hoge/b/')
+ assert_equal('./', url.to_s)
+ url = URI.parse('http://hoge/b/').route_to('http://hoge/b')
+ assert_equal('../b', url.to_s)
+ url = URI.parse('http://hoge/b').route_to('http://hoge/b:c')
+ assert_equal('./b:c', url.to_s)
+
url = URI.parse('file:///a/b/').route_to('file:///a/b/')
assert_equal('', url.to_s)
+ url = URI.parse('file:///a/b/').route_to('file:///a/b')
+ assert_equal('../b', url.to_s)
url = URI.parse('mailto:foo@example.com').route_to('mailto:foo@example.com#bar')
assert_equal('#bar', url.to_s)
View
2  version.h
@@ -2,7 +2,7 @@
#define RUBY_RELEASE_DATE "2011-05-21"
#define RUBY_VERSION_CODE 187
#define RUBY_RELEASE_CODE 20110521
-#define RUBY_PATCHLEVEL 343
+#define RUBY_PATCHLEVEL 344
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 8
Please sign in to comment.
Something went wrong with that request. Please try again.