diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-03-27 12:43:02 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-03-27 12:43:02 +0000 |
commit | c451c56b10be59e905667c93b167f05bb9e4f50b (patch) | |
tree | 0f6514eff79452a7e1f24404925c072d3af94a13 /lib/open-uri.rb | |
parent | 4d664a098d92c34a2720d04f1624103aa245254c (diff) | |
download | ruby-c451c56b10be59e905667c93b167f05bb9e4f50b.tar.gz |
* (lib/open-uri.rb): permit extra semicolon in content-type field.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6035 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/open-uri.rb')
-rw-r--r-- | lib/open-uri.rb | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/open-uri.rb b/lib/open-uri.rb index c6bfd7a509..84acdb9984 100644 --- a/lib/open-uri.rb +++ b/lib/open-uri.rb @@ -282,11 +282,12 @@ module OpenURI def content_type_parse # :nodoc: v = @meta['content-type'] - if v && %r{\A#{RE_LWS}?(#{RE_TOKEN})#{RE_LWS}?/(#{RE_TOKEN})#{RE_LWS}?(#{RE_PARAMETERS})\z}o =~ v + # The last (?:;#{RE_LWS}?)? matches extra ";" which is not permitted by RFC2045. + if v && %r{\A#{RE_LWS}?(#{RE_TOKEN})#{RE_LWS}?/(#{RE_TOKEN})#{RE_LWS}?(#{RE_PARAMETERS})(?:;#{RE_LWS}?)?\z}no =~ v type = $1.downcase subtype = $2.downcase parameters = [] - $3.scan(/;#{RE_LWS}?(#{RE_TOKEN})#{RE_LWS}?=#{RE_LWS}?(?:(#{RE_TOKEN})|(#{RE_QUOTED_STRING}))/o) {|att, val, qval| + $3.scan(/;#{RE_LWS}?(#{RE_TOKEN})#{RE_LWS}?=#{RE_LWS}?(?:(#{RE_TOKEN})|(#{RE_QUOTED_STRING}))/no) {|att, val, qval| val = qval.gsub(/[\r\n\t !#-\[\]-~\x80-\xff]+|(\\[\x00-\x7f])/) { $1 ? $1[1,1] : $& } if qval parameters << [att.downcase, val] } |