file: restore old behavior for file:////foo/bar URLs

curl 7.57.0 and up interpret this according to Appendix E.3.2 of RFC
8089 but then returns an error saying this is unimplemented. This is
actually a regression in behavior on both Windows and Unix.

Before curl 7.57.0 this URL was treated as a path of "//foo/bar" and
then passed to the relevant OS API. This means that the behavior of this
case is actually OS dependent.

The Unix path resolution rules say that the OS must handle swallowing
the extra "/" and so this path is the same as "/foo/bar"

The Windows path resolution rules say that this is a UNC path and
automatically handles the SMB access for the program. So curl on Windows
was already doing Appendix E.3.2 without any special code in curl.

Regression

Closes #2438
This commit is contained in:
Jon DeVree 2018-03-29 18:39:56 -04:00 committed by Daniel Stenberg
parent 2536e2450b
commit 695e96b3d5
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
2 changed files with 13 additions and 35 deletions

View file

@ -6,6 +6,13 @@ FILE
</info>
<reply>
<data>
foo
bar
bar
foo
moo
</data>
</reply>
# Client-side
@ -14,12 +21,15 @@ FILE
file
</server>
<name>
file:// with SMB path
file:// with unix path resolution behavior for the case of extra slashes
</name>
<command>
file:////bad-host%PWD/log/test1145.txt
file:////%PWD/log/test2072.txt
</command>
<file name="log/test1145.txt">
<precheck>
perl -e "print 'Test requires a unix system' if ( $^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'dos');"
</precheck>
<file name="log/test2072.txt">
foo
bar
bar
@ -30,9 +40,5 @@ moo
# Verify data after the test has been "shot"
<verify>
# CURLE_URL_MALFORMAT is error code 3
<errorcode>
3
</errorcode>
</verify>
</testcase>