From: duerst@... Date: 2016-06-17T07:27:20+00:00 Subject: [ruby-core:76062] [Ruby trunk Bug#12498] Parsing a mailto URI with no recipient throws the error URI::InvalidComponentError: missing opaque part for mailto URL Issue #12498 has been updated by Martin D��rst. I agree this is a bug. The syntax at http://tools.ietf.org/html/rfc6068#section-2 clearly makes the 'to' part optional. ---------------------------------------- Bug #12498: Parsing a mailto URI with no recipient throws the error URI::InvalidComponentError: missing opaque part for mailto URL https://bugs.ruby-lang.org/issues/12498#change-59261 * Author: Chris Heisterkamp * Status: Open * Priority: Normal * Assignee: * ruby -v: ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15] * Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN ---------------------------------------- If you try to parse a mailto URI without a recipient you get an error. For example ruby -ruri -e 'URI.parse("mailto:?subject=hi")' will throw the error: /usr/lib/ruby/2.3.0/uri/mailto.rb:140:in `initialize': missing opaque part for mailto URL (URI::InvalidComponentError) from /usr/lib/ruby/2.3.0/uri/rfc3986_parser.rb:76:in `new' from /usr/lib/ruby/2.3.0/uri/rfc3986_parser.rb:76:in `parse' from /usr/lib/ruby/2.3.0/uri/common.rb:227:in `parse' from -e:1:in `
' This is similar to the issue https://bugs.ruby-lang.org/issues/12212 and is caused by the combination of https://bugs.ruby-lang.org/issues/10738 and https://bugs.ruby-lang.org/issues/2542 When the URI Lib was updated to use the RFC 3986 parser it does not always return the @opaque part of the URI. So the check added in https://bugs.ruby-lang.org/issues/10738 will always fail. The fix uses the @query part returned from the new parser if the @opaque part is not defined. Here are examples of the differences between the parts returned by the new and old parser scheme, userinfo, host, port, registry, path, opaque, query, fragment = URI::RFC2396_Parser.new.split('mailto:?to=sam@example.com&subject=hey!') => ["mailto", nil, nil, nil, nil, nil, "?to=sam@example.com&subject=hey!", nil, nil] opaque => "?to=sam@example.com&subject=hey!" scheme, userinfo, host, port, registry, path, opaque, query, fragment = URI::RFC3986_Parser.new.split('mailto:?to=sam@example.com&subject=hey!') => ["mailto", nil, nil, nil, nil, "", nil, "to=sam@example.com&subject=hey!", nil] opaque => nil query => "to=sam@example.com&subject=hey!" ---Files-------------------------------- fix_empty_mailto_recipient_parsing.patch (1.79 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: