modified the #[num] code to be more robust, to return NULL on errors and

to support numbers larger than 9
This commit is contained in:
Daniel Stenberg 2003-08-14 11:53:09 +00:00
Родитель beaea8cb25
Коммит 46690d5e1c
1 изменённых файлов: 33 добавлений и 39 удалений

Просмотреть файл

@ -426,8 +426,6 @@ char *glob_next_url(URLGlob *glob)
char *glob_match_url(char *filename, URLGlob *glob) char *glob_match_url(char *filename, URLGlob *glob)
{ {
char *target; char *target;
URLPattern pat;
int i;
int allocsize; int allocsize;
int stringlen=0; int stringlen=0;
char numbuf[18]; char numbuf[18];
@ -443,25 +441,21 @@ char *glob_match_url(char *filename, URLGlob *glob)
if(NULL == target) if(NULL == target)
return NULL; /* major failure */ return NULL; /* major failure */
while (*filename != '\0') { while (*filename) {
if (*filename == '#') { if (*filename == '#' && isdigit((int)filename[1])) {
if (!isdigit((int)*++filename) || /* only '#1' ... '#9' allowed */
*filename == '0') { /* only '#1' ... '#9' allowed */ int i;
/* printf("illegal matching expression\n"); unsigned long num = strtoul(&filename[1], &filename, 10);
exit(CURLE_URL_MALFORMAT);*/
continue; i = num-1;
}
i = *filename - '1'; if (num && (i <= glob->size / 2)) {
if (i + 1 > glob->size / 2) { URLPattern pat = glob->pattern[i];
/*printf("match against nonexisting pattern\n");
exit(CURLE_URL_MALFORMAT);*/
continue;
}
pat = glob->pattern[i];
switch (pat.type) { switch (pat.type) {
case UPTSet: case UPTSet:
appendthis = pat.content.Set.elements[pat.content.Set.ptr_s]; appendthis = pat.content.Set.elements[pat.content.Set.ptr_s];
appendlen = (int)strlen(pat.content.Set.elements[pat.content.Set.ptr_s]); appendlen =
(int)strlen(pat.content.Set.elements[pat.content.Set.ptr_s]);
break; break;
case UPTCharRange: case UPTCharRange:
numbuf[0]=pat.content.CharRange.ptr_c; numbuf[0]=pat.content.CharRange.ptr_c;
@ -480,7 +474,7 @@ char *glob_match_url(char *filename, URLGlob *glob)
printf("internal error: invalid pattern type (%d)\n", pat.type); printf("internal error: invalid pattern type (%d)\n", pat.type);
return NULL; return NULL;
} }
++filename; }
} }
else { else {
appendthis=filename++; appendthis=filename++;