mirror of
https://github.com/curl/curl.git
synced 2024-12-03 06:20:31 +08:00
urlapi: increase supported scheme length to 40 bytes
The longest currently registered URI scheme at IANA is 36 bytes long. Closes #3905 Closes #3900
This commit is contained in:
parent
10db3ef21e
commit
c454d7f3f4
@ -7,7 +7,7 @@
|
|||||||
* | (__| |_| | _ <| |___
|
* | (__| |_| | _ <| |___
|
||||||
* \___|\___/|_| \_\_____|
|
* \___|\___/|_| \_\_____|
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
|
* Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
|
||||||
*
|
*
|
||||||
* This software is licensed as described in the file COPYING, which
|
* This software is licensed as described in the file COPYING, which
|
||||||
* you should have received as part of this distribution. The terms
|
* you should have received as part of this distribution. The terms
|
||||||
@ -22,9 +22,8 @@
|
|||||||
*
|
*
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
#include "curl_setup.h"
|
#include "curl_setup.h"
|
||||||
/* scheme is not URL encoded, the longest libcurl supported ones are 6
|
/* scheme is not URL encoded, the longest libcurl supported ones are... */
|
||||||
letters */
|
#define MAX_SCHEME_LEN 40
|
||||||
#define MAX_SCHEME_LEN 8
|
|
||||||
|
|
||||||
bool Curl_is_absolute_url(const char *url, char *scheme, size_t buflen);
|
bool Curl_is_absolute_url(const char *url, char *scheme, size_t buflen);
|
||||||
char *Curl_concat_url(const char *base, const char *relurl);
|
char *Curl_concat_url(const char *base, const char *relurl);
|
||||||
|
@ -652,7 +652,7 @@ static CURLUcode seturl(const char *url, CURLU *u, unsigned int flags)
|
|||||||
char *fragment = NULL;
|
char *fragment = NULL;
|
||||||
CURLUcode result;
|
CURLUcode result;
|
||||||
bool url_has_scheme = FALSE;
|
bool url_has_scheme = FALSE;
|
||||||
char schemebuf[MAX_SCHEME_LEN];
|
char schemebuf[MAX_SCHEME_LEN + 1];
|
||||||
char *schemep = NULL;
|
char *schemep = NULL;
|
||||||
size_t schemelen = 0;
|
size_t schemelen = 0;
|
||||||
size_t urllen;
|
size_t urllen;
|
||||||
@ -1217,6 +1217,9 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
|
|||||||
|
|
||||||
switch(what) {
|
switch(what) {
|
||||||
case CURLUPART_SCHEME:
|
case CURLUPART_SCHEME:
|
||||||
|
if(strlen(part) > MAX_SCHEME_LEN)
|
||||||
|
/* too long */
|
||||||
|
return CURLUE_MALFORMED_INPUT;
|
||||||
if(!(flags & CURLU_NON_SUPPORT_SCHEME) &&
|
if(!(flags & CURLU_NON_SUPPORT_SCHEME) &&
|
||||||
/* verify that it is a fine scheme */
|
/* verify that it is a fine scheme */
|
||||||
!Curl_builtin_scheme(part))
|
!Curl_builtin_scheme(part))
|
||||||
@ -1279,7 +1282,7 @@ CURLUcode curl_url_set(CURLU *u, CURLUPart what,
|
|||||||
char *redired_url;
|
char *redired_url;
|
||||||
CURLU *handle2;
|
CURLU *handle2;
|
||||||
|
|
||||||
if(Curl_is_absolute_url(part, NULL, MAX_SCHEME_LEN)) {
|
if(Curl_is_absolute_url(part, NULL, MAX_SCHEME_LEN + 1)) {
|
||||||
handle2 = curl_url();
|
handle2 = curl_url();
|
||||||
if(!handle2)
|
if(!handle2)
|
||||||
return CURLUE_OUT_OF_MEMORY;
|
return CURLUE_OUT_OF_MEMORY;
|
||||||
|
Loading…
Reference in New Issue
Block a user