Project

General

Profile

Actions

Bug #10738

closed

Parsing invalid URI results in undefined method `split' for nil:NilClass (NoMethodError)

Added by duerst (Martin Dürst) over 6 years ago. Updated about 5 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.3.0dev (2015-01-12 trunk 49226) [x86_64-cygwin]
[ruby-core:67563]

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 methodsplit' 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) over 6 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) over 5 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) over 5 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) about 5 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) about 5 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.

Actions

Also available in: Atom PDF