From e9c835ad06bdded6a720ad59054a7b058ace4d9c Mon Sep 17 00:00:00 2001 From: Daniel Stenberg Date: Wed, 29 Oct 2003 09:53:21 +0000 Subject: David Hull made the file: URL parser also accept the somewhat sloppy file syntax: file:/path. I added test case 203 to verify this. --- lib/url.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'lib') diff --git a/lib/url.c b/lib/url.c index ac2b6be96..5da898c59 100644 --- a/lib/url.c +++ b/lib/url.c @@ -2002,9 +2002,19 @@ static CURLcode CreateConnection(struct SessionHandle *data, * proxy -- and we don't know if we will need to use SSL until we parse the * url ... ************************************************************/ - if((2 == sscanf(data->change.url, "%64[^:]://%[^\n]", + if((2 == sscanf(data->change.url, "%64[^:]:%[^\n]", conn->protostr, conn->path)) && strequal(conn->protostr, "file")) { + if(conn->path[0] == '/' && conn->path[1] == '/') { + /* Allow omitted hostname (e.g. file:/). This is not strictly + * speaking a valid file: URL by RFC 1738, but treating file:/ as + * file://localhost/ is similar to how other schemes treat missing + * hostnames. See RFC 1808. */ + + /* This cannot be done with strcpy() in a portable manner, since the + memory areas overlap! */ + memmove(conn->path, conn->path + 2, strlen(conn->path + 2)+1); + } /* * we deal with file:/// differently since it supports no * hostname other than "localhost" and "127.0.0.1", which is unique among -- cgit v1.2.3