mirror of
https://github.com/curl/curl.git
synced 2026-08-26 02:43:31 +03:00
urlapi: cleanups
- move host checks together - simplify the scheme parser loop and the end of host name parser - avoid itermediate buffer storing in multiple places - reduce scope for several variables - skip the Curl_dyn_tail() call for speed - detect IPv6 earlier and skip extra checks for such hosts - normalize directly in dynbuf instead of itermediate buffer - split out the IPv6 parser into its own funciton - call the IPv6 parser directly for ipv6 addresses - remove (unused) special treatment of % in host names - junkscan() once in the beginning instead of scattered - make junkscan return error code - remove unused query management from dedotdotify() - make Curl_parse_login_details use memchr - more use of memchr() instead of strchr() and less strlen() calls - make junkscan check and return the URL length An optimized build runs one of my benchmark URL parsing programs ~41% faster using this branch. (compared against the shipped 7.88.1 library in Debian) Closes #10935
This commit is contained in:
parent
233b4e4589
commit
4cfa5bcc9a
5 changed files with 280 additions and 365 deletions
24
lib/url.c
24
lib/url.c
|
|
@ -2568,29 +2568,13 @@ CURLcode Curl_parse_login_details(const char *login, const size_t len,
|
|||
size_t plen;
|
||||
size_t olen;
|
||||
|
||||
/* the input length check is because this is called directly from setopt
|
||||
and isn't going through the regular string length check */
|
||||
size_t llen = strlen(login);
|
||||
if(llen > CURL_MAX_INPUT_LENGTH)
|
||||
return CURLE_BAD_FUNCTION_ARGUMENT;
|
||||
|
||||
/* Attempt to find the password separator */
|
||||
if(passwdp) {
|
||||
psep = strchr(login, ':');
|
||||
|
||||
/* Within the constraint of the login string */
|
||||
if(psep >= login + len)
|
||||
psep = NULL;
|
||||
}
|
||||
if(passwdp)
|
||||
psep = memchr(login, ':', len);
|
||||
|
||||
/* Attempt to find the options separator */
|
||||
if(optionsp) {
|
||||
osep = strchr(login, ';');
|
||||
|
||||
/* Within the constraint of the login string */
|
||||
if(osep >= login + len)
|
||||
osep = NULL;
|
||||
}
|
||||
if(optionsp)
|
||||
osep = memchr(login, ';', len);
|
||||
|
||||
/* Calculate the portion lengths */
|
||||
ulen = (psep ?
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue