urlapi: make parse_file() return zero data on error

This fixes the torture failures in 1675

Also, make it allocate the scheme *after* the path has been verified, so
that it is avoided in the common error cases.

Fixes #21326
Closes #21324
This commit is contained in:
Daniel Stenberg 2026-04-15 09:47:00 +02:00
parent 36295347bc
commit c60d90cd65
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2

View file

@ -844,6 +844,9 @@ UNITTEST CURLUcode parse_file(const char *url, size_t urllen, CURLU *u,
{
const char *path;
size_t pathlen;
*pathp = NULL;
*pathlenp = 0;
if(urllen <= 6)
/* file:/ is not enough to actually be a complete file: URL */
return CURLUE_BAD_FILE_URL;
@ -852,10 +855,6 @@ UNITTEST CURLUcode parse_file(const char *url, size_t urllen, CURLU *u,
path = &url[5];
pathlen = urllen - 5;
u->scheme = curlx_strdup("file");
if(!u->scheme)
return CURLUE_OUT_OF_MEMORY;
/* Extra handling URLs with an authority component (i.e. that start with
* "file://")
*
@ -915,6 +914,10 @@ UNITTEST CURLUcode parse_file(const char *url, size_t urllen, CURLU *u,
pathlen--;
}
#endif
u->scheme = curlx_strdup("file");
if(!u->scheme)
return CURLUE_OUT_OF_MEMORY;
*pathp = path;
*pathlenp = pathlen;
return CURLUE_OK;