php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #81543 parse_url omits leading slash in windows paths
Submitted: 2021-10-19 19:41 UTC Modified: 2021-10-20 08:23 UTC
Votes:3
Avg. Score:4.0 ± 0.8
Reproduced:0 of 2 (0.0%)
From: ppchelko at wikimedia dot org Assigned:
Status: Open Package: *URL Functions
PHP Version: master-Git-2021-10-19 (Git) OS: Any
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: ppchelko at wikimedia dot org
New email:
PHP Version: OS:

 

 [2021-10-19 19:41 UTC] ppchelko at wikimedia dot org
Description:
------------
parse_url looses the leading '/' character in paths with single-letter Windows drive letters.

According to the RFC8089 Section 2[1]:

> The generic syntax in [RFC3986] includes "path" and "authority"
  components, for each of which only a subset is used in the definition
  of the file URI scheme.  The relevant subset of "path" is "path-
  absolute"

'path-absolute' in RFC3986 is defined as beginning with a '/' character.

There's also a requirement in RFC3986 section 3.3 [2], that

> If a URI contains an authority component, then the path component
  must either be empty or begin with a slash ("/") character.

For file:///c:/ URL the authority component is present but empty, which implies 'localhost'. Thus the 'path' component must begin with the '/' character.

Other popular languages like Java or JavaScript preserve the leading slash character as well.

[1] https://datatracker.ietf.org/doc/html/rfc8089#section-2
[2] https://datatracker.ietf.org/doc/html/rfc3986#section-3.3


Test script:
---------------
var_dump( parse_url( 'file:///c:/' ) );

Expected result:
----------------
array(2) {
  ["scheme"]=>
  string(4) "file"
  ["path"]=>
  string(4) "/c:/"
}

Actual result:
--------------
array(2) {
  ["scheme"]=>
  string(4) "file"
  ["path"]=>
  string(3) "c:/"
}

Patches

HcPcEgmp (last revision 2021-10-31 04:13 UTC by sample at email dot tst)
parse_url_windows_paths (last revision 2021-10-19 19:41 UTC by ppchelko at wikimedia dot org)

Pull Requests

Pull requests:

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2021-10-19 19:41 UTC] ppchelko at wikimedia dot org
The following patch has been added/updated:

Patch Name: parse_url_windows_paths
Revision:   1634672493
URL:        https://bugs.php.net/patch-display.php?bug=81543&patch=parse_url_windows_paths&revision=1634672493
 [2021-10-20 08:23 UTC] cmb@php.net
The commit[1] that would be effectively reverted by your patch,
deliberately removes the leading slash of the path.  While this is
wrong, and URIs like file://localhost/c:/ are treated differently,
I don't think we should fix this for any of the stable branches
(probably not even for PHP 8.1) for BC reasons.

Anyhow, I (generally) recommend to submit pull requests[2] instead
of attaching patches to the bug tracker for better visibility and
discussability.

[1] <https://github.com/php/php-src/commit/4505a611ba8cdcc08505a5ffa0e35bda385bd374>
[2] <https://github.com/php/php-src/pulls>
 [2021-10-20 14:37 UTC] ppchelko at wikimedia dot org
The following pull request has been associated:

Patch Name: Fix #81543: parse_url omits leading slash in windows paths
On GitHub:  https://github.com/php/php-src/pull/7598
Patch:      https://github.com/php/php-src/pull/7598.patch
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Thu Jan 02 12:01:29 2025 UTC