From: robipolli@... Date: 2017-10-20T14:19:02+00:00 Subject: [ruby-core:83423] [Ruby trunk Bug#14035] URI module file representation does not conform to the standard Issue #14035 has been reported by ioggstream (Roberto Polli). ---------------------------------------- Bug #14035: URI module file representation does not conform to the standard https://bugs.ruby-lang.org/issues/14035 * Author: ioggstream (Roberto Polli) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-linux] * Backport: 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- ### Reproduce execute URI("file:///etc/hosts").to_s ### I expect - URI("file:///etc/hosts").to_s == "file:///etc/hosts" - URI to represent file:// paths in canonical form (Eg. see "file:///etc/hosts" in https://tools.ietf.org/html/rfc3986#section-1.1) ### Instead - URI("file:///etc/hosts").to_s == "file:/etc/hosts" - URI("file:///etc/hosts").host == nil ### Fix for Ruby 2.4 Adopting the convention - file schema to have a blank/empty "" host suggested in rfc3986 will fix the issue. ``` If the URI scheme defines a default for host, then that default applies when the host subcomponent is undefined or when the registered name is empty (zero length). For example, the "file" URI scheme is defined so that no authority, an empty host, and "localhost" all mean the end-user's machine, whereas the "http" scheme considers a missing authority or empty host invalid. ``` This is a proposed implementation. ``` require 'uri/generic' module URI class FILE < Generic def initialize(*args) super(*args) @host = "" if @host.nil? end end @@schemes['FILE'] = FILE end ``` -- https://bugs.ruby-lang.org/ Unsubscribe: