diff options
author | akira <akira@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-07-13 10:50:26 +0000 |
---|---|---|
committer | akira <akira@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-07-13 10:50:26 +0000 |
commit | f461a6b8e532826e52fcbae8dcfdaecd55f3fc48 (patch) | |
tree | 0026f6339e6acd573e2681466865108d45a7a52a /lib/uri/generic.rb | |
parent | db850b21fd6550f102fb5e7a322774788be96757 (diff) | |
download | ruby-f461a6b8e532826e52fcbae8dcfdaecd55f3fc48.tar.gz |
* lib/uri/generic.rb (URI::Generic#merge_path):
"URI('http://www.example.com/foo/..') + './'" should return
"URI('http://www.example.com/')". [ruby-list:39838]
"URI('http://www.example.com/') + './foo/bar/..'" should return
"URI('http://www.example.com/foo/')". [ruby-list:39844]
* test/uri/test_generic.rb (TestGeneric#test_merge): added tests.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6620 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/uri/generic.rb')
-rw-r--r-- | lib/uri/generic.rb | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/lib/uri/generic.rb b/lib/uri/generic.rb index 3d6cc8525b..0dedcf494a 100644 --- a/lib/uri/generic.rb +++ b/lib/uri/generic.rb @@ -630,16 +630,20 @@ module URI base_path = split_path(base) rel_path = split_path(rel) + # RFC2396, Section 5.2, 6), a) + base_path << '' if base_path.last == '..' + while i = base_path.index('..') + base_path.slice!(i - 1, 2) + end if base_path.empty? - base_path = [''] # XXX + base_path = [''] # keep '/' for root directory + else + base_path.pop end - # RFC2396, Section 5.2, 6), a) - base_path.pop unless base_path.size == 1 - # RFC2396, Section 5.2, 6), c) - # RFC2396, Section 5.2, 6), d) - rel_path.push('') if rel_path.last == '.' + # RFC2396, Section 5.2, 6), d) + rel_path.push('') if rel_path.last == '.' || rel_path.last == '..' rel_path.delete('.') # RFC2396, Section 5.2, 6), e) |