url: Fix parsing for when 'file' is the default protocol

Follow-up to 3463408.

Prior to 3463408 file:// hostnames were silently stripped.

Prior to this commit it did not work when a schemeless url was used with
file as the default protocol.

Ref: https://curl.haxx.se/mail/lib-2016-11/0081.html
Closes https://github.com/curl/curl/pull/1124

Also fix for drive letters:

- Support --proto-default file c:/foo/bar.txt

- Support file://c:/foo/bar.txt

- Fail when a file:// drive letter is detected and not MSDOS/Windows.

Bug: https://github.com/curl/curl/issues/1187
Reported-by: Anatol Belski
Assisted-by: Anatol Belski
This commit is contained in:
Jay Satiro 2016-11-13 15:27:57 -05:00
parent 807698db02
commit 1d4202ade6
5 changed files with 151 additions and 10 deletions

View file

@ -120,7 +120,7 @@ test1112 test1113 test1114 test1115 test1116 test1117 test1118 test1119 \
test1120 test1121 test1122 test1123 test1124 test1125 test1126 test1127 \
test1128 test1129 test1130 test1131 test1132 test1133 test1134 test1135 \
test1136 test1137 test1138 test1139 test1140 test1141 test1142 test1143 \
test1144 \
test1144 test1145 test1146 \
test1200 test1201 test1202 test1203 test1204 test1205 test1206 test1207 \
test1208 test1209 test1210 test1211 test1212 test1213 test1214 test1215 \
test1216 test1217 test1218 test1219 \

40
tests/data/test1145 Normal file
View file

@ -0,0 +1,40 @@
<testcase>
<info>
<keywords>
FILE
</keywords>
</info>
<reply>
</reply>
# Client-side
<client>
<server>
file
</server>
<name>
file:// bad host
</name>
# This command should not succeed since we only accept
# file:/// file://localhost/ file://127.0.0.1/
<command>
file://bad-host%PWD/log/test1145.txt
</command>
<file name="log/test1145.txt">
foo
bar
bar
foo
moo
</file>
</client>
# Verify data after the test has been "shot"
<verify>
# CURLE_URL_MALFORMAT is error code 3
<errorcode>
3
</errorcode>
</verify>
</testcase>

45
tests/data/test1146 Normal file
View file

@ -0,0 +1,45 @@
<testcase>
<info>
<keywords>
FILE
--proto-default
</keywords>
</info>
<reply>
<data>
foo
bar
bar
foo
moo
</data>
</reply>
# Client-side
<client>
<server>
file
</server>
<name>
--proto-default file
</name>
<command>
--proto-default file %PWD/log/test1146.txt
</command>
<file name="log/test1146.txt">
foo
bar
bar
foo
moo
</file>
</client>
# Verify data after the test has been "shot"
<verify>
<errorcode>
0
</errorcode>
</verify>
</testcase>

View file

@ -27,7 +27,7 @@ http
lib1534
</tool>
<name>
Test CURLINFO_RESPONSE_CODE
CURLINFO_FILETIME init and reset
</name>
<command>
http://%HOSTIP:%HTTPPORT/1534