Bug #6420

undefined local variable or method `parser' for URI::Generic:Class

Added by cap10morgan (Wes Morgan) over 8 years ago. Updated about 8 years ago.

Target version:
ruby -v:
ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.3.0]


When using the URI::Generic.build2 class method, if a URL component needs to be escaped (space -> %20, for example), it will attempt to call parser.escape on it. This generates an exception of "undefined local variable or method `parser' for URI::Generic:Class" because there is no parser class method. I expected it to return a URI instance with the components properly escaped.

I'm going to submit a pull request on the GitHub mirror that adds this class method and restores the expected behavior.

Code to reproduce:

(({URI::Generic.build2(path: "/foo bar/baz"}))

The space in "foo bar" needs to be escaped in that example, triggering the bug.



add_uri_generic_parser_class_method.patch (731 Bytes) add_uri_generic_parser_class_method.patch zzak (Zachary Scott), 05/10/2012 12:23 AM

Updated by cap10morgan (Wes Morgan) over 8 years ago


Obviously that code line above should read:

(({URI::Generic.build2(path: "/foo bar/baz")}))


Updated by ayumin (Ayumu AIZAWA) over 8 years ago

  • Status changed from Open to Assigned
  • Assignee set to akira (akira yamada)

Updated by naruse (Yui NARUSE) about 8 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r35692.
Wes, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

  • lib/uri/generic.rb ( duplicate args before adding
    new items. (don't change arguments)

  • lib/uri/generic.rb ( use URI::Generic::COMPONENT
    if this method is called from URI::Generic.

  • lib/uri/generic.rb (URI::Generic.build2): escape only if the item is
    a String.

  • lib/uri/generic.rb (URI::Generic.build2): use DEFAULT_PARSER because
    it doesn't have parser method. [Bug #6420]

Also available in: Atom PDF