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:
Omar Ramadan 2019-05-18 16:48:00 -07:00 committed by Daniel Stenberg
parent 10db3ef21e
commit c454d7f3f4
No known key found for this signature in database
GPG Key ID: 5CC908FDB71E12C2
2 changed files with 8 additions and 6 deletions

View File

@ -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);

View File

@ -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;