urlapi: make sure zoneid is also duplicated in curl_url_dup

Add several curl_url_dup() tests to the general lib1560 test.

Reported-by: Rutger Broekhoff
Bug: https://curl.se/mail/lib-2023-07/0047.html
Closes #11549
This commit is contained in:
Daniel Stenberg 2023-07-31 10:07:35 +02:00
parent a21f318992
commit 49e2443186
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2
2 changed files with 68 additions and 0 deletions

View file

@ -1385,6 +1385,7 @@ CURLU *curl_url_dup(const CURLU *in)
DUP(u, in, path);
DUP(u, in, query);
DUP(u, in, fragment);
DUP(u, in, zoneid);
u->portnum = in->portnum;
}
return u;

View file

@ -1672,10 +1672,77 @@ static int huge(void)
return error;
}
static int urldup(void)
{
const char *url[] = {
"http://"
"user:pwd@"
"[2a04:4e42:e00::347%25eth0]"
":80"
"/path"
"?query"
"#fraggie",
"https://example.com",
"https://user@example.com",
"https://user.pwd@example.com",
"https://user.pwd@example.com:1234",
"https://example.com:1234",
"example.com:1234",
"https://user.pwd@example.com:1234/path?query#frag",
NULL
};
CURLU *copy = NULL;
char *h_str = NULL, *copy_str = NULL;
CURLU *h = curl_url();
int i;
if(!h)
goto err;
for(i = 0; url[i]; i++) {
CURLUcode rc = curl_url_set(h, CURLUPART_URL, url[i],
CURLU_GUESS_SCHEME);
if(rc)
goto err;
copy = curl_url_dup(h);
rc = curl_url_get(h, CURLUPART_URL, &h_str, 0);
if(rc)
goto err;
rc = curl_url_get(copy, CURLUPART_URL, &copy_str, 0);
if(rc)
goto err;
if(strcmp(h_str, copy_str)) {
printf("Original: %s\nParsed: %s\nCopy: %s\n",
url[i], h_str, copy_str);
goto err;
}
curl_free(copy_str);
curl_free(h_str);
curl_url_cleanup(copy);
copy_str = NULL;
h_str = NULL;
copy = NULL;
}
curl_url_cleanup(h);
return 0;
err:
curl_free(copy_str);
curl_free(h_str);
curl_url_cleanup(copy);
curl_url_cleanup(h);
return 1;
}
int test(char *URL)
{
(void)URL; /* not used */
if(urldup())
return 11;
if(setget_parts())
return 10;