Bug #10738
closedParsing invalid URI results in undefined method `split' for nil:NilClass (NoMethodError)
Description
I tried to parse an invalid URI with the URI library. I expected an error such as URI::InvalidComponentError or URI::InvalidComponentError, but I got "undefined method `split' for nil:NilClass (NoMethodError)".
The simplest way to check this is as follows:
ruby -ruri -e 'URI "mailto:/example.com/"'
which produces
/usr/local/lib/ruby/2.3.0/uri/mailto.rb:138:in initialize': undefined method
split' for nil:NilClass (NoMethodError)
from /usr/local/lib/ruby/2.3.0/uri/rfc3986_parser.rb:75:in new' from /usr/local/lib/ruby/2.3.0/uri/rfc3986_parser.rb:75:in
parse'
from /usr/local/lib/ruby/2.3.0/uri/common.rb:226:in parse' from /usr/local/lib/ruby/2.3.0/uri/common.rb:713:in
URI'
from -e:1:in `'
I have some ideas for how to fix this, e.g. add
raise InvalidComponentError if @opaque.nil?
before the offending line (/lib/uri/mailto.rb:138), and will go forward and add such a fix unless I hear some advice to the contrary.
Updated by duerst (Martin Dürst) almost 10 years ago
- Status changed from Open to Closed
- % Done changed from 0 to 100
Applied in changeset r49254.
- lib/uri/mailto.rb: raising URI::InvalidComponentError instead
of failing with undefined method `split' for nil:NilClass for
mailto: URIs without opaque part. [Bug #10738] - test/uri/testuri.rb: Test for above
Updated by rafaelfranca (Rafael França) almost 9 years ago
- Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN to 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: REQUIRED
This issue is also present in Ruby 2.2. Is it possible to backport?
Updated by rafaelfranca (Rafael França) almost 9 years ago
Here is the reproduction steps:
$ rbenv shell 2.2.4
$ ruby -ruri -e 'URI "mailto:/example.com/"'
/Users/rafaelfranca/.rbenv/versions/2.2.4/lib/ruby/2.2.0/uri/mailto.rb:138:in `initialize': undefined method `split' for nil:NilClass (NoMethodError)
from /Users/rafaelfranca/.rbenv/versions/2.2.4/lib/ruby/2.2.0/uri/rfc3986_parser.rb:75:in `new'
from /Users/rafaelfranca/.rbenv/versions/2.2.4/lib/ruby/2.2.0/uri/rfc3986_parser.rb:75:in `parse'
from /Users/rafaelfranca/.rbenv/versions/2.2.4/lib/ruby/2.2.0/uri/common.rb:226:in `parse'
from /Users/rafaelfranca/.rbenv/versions/2.2.4/lib/ruby/2.2.0/uri/common.rb:713:in `URI'
from -e:1:in `<main>'
Updated by nagachika (Tomoyuki Chikanaga) over 8 years ago
- Backport changed from 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: REQUIRED to 2.0.0: UNKNOWN, 2.1: DONTNEED, 2.2: REQUIRED
I've confirmed that with ruby 2.1.8 the reproduce snippet raises URI::InvalidComponentError (expected behavior).
% ruby -v -ruri -e 'URI "mailto:/example.com/" rescue p $!'
ruby 2.1.8p440 (2015-12-16 revision 53160) [x86_64-darwin15.0]
#<URI::InvalidComponentError: unrecognised opaque part for mailtoURL: >
Updated by nagachika (Tomoyuki Chikanaga) over 8 years ago
- Backport changed from 2.0.0: UNKNOWN, 2.1: DONTNEED, 2.2: REQUIRED to 2.0.0: UNKNOWN, 2.1: DONTNEED, 2.2: DONE
Backported into ruby_2_2
branch at r54341.