1
0
mirror of https://github.com/moparisthebest/curl synced 2024-08-13 17:03:50 -04:00

range: reject char globs with missing end like '[L-]'

... which previously would lead to out of boundary reads.

Reported-by: Luật Nguyễn
This commit is contained in:
Daniel Stenberg 2016-10-04 17:25:09 +02:00
parent 269a889104
commit ee4f76606c

View File

@ -188,13 +188,15 @@ static CURLcode glob_range(URLGlob *glob, char **patternp,
/* character range detected */
char min_c;
char max_c;
char end_c;
int step=1;
pat->type = UPTCharRange;
rc = sscanf(pattern, "%c-%c", &min_c, &max_c);
rc = sscanf(pattern, "%c-%c%c", &min_c, &max_c, &end_c);
if((rc == 2) && (pattern[3] == ':')) {
if(rc == 3) {
if(end_c == ':') {
char *endp;
unsigned long lstep;
errno = 0;
@ -208,12 +210,14 @@ static CURLcode glob_range(URLGlob *glob, char **patternp,
step = -1;
}
}
else
pattern += 4;
else if(end_c != ']')
/* then this is wrong */
rc = 0;
}
*posp += (pattern - *patternp);
if((rc != 2) || (min_c >= max_c) || ((max_c - min_c) > ('z' - 'a')) ||
if((rc != 3) || (min_c >= max_c) || ((max_c - min_c) > ('z' - 'a')) ||
(step <= 0) )
/* the pattern is not well-formed */
return GLOBERROR("bad range", *posp, CURLE_URL_MALFORMAT);