Commit 46690d5e authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

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

to support numbers larger than 9
parent beaea8cb
Loading
Loading
Loading
Loading
+33 −39
Original line number Diff line number Diff line
@@ -426,8 +426,6 @@ char *glob_next_url(URLGlob *glob)
char *glob_match_url(char *filename, URLGlob *glob)
{
  char *target;
  URLPattern pat;
  int i;
  int allocsize;
  int stringlen=0;
  char numbuf[18];
@@ -443,25 +441,21 @@ char *glob_match_url(char *filename, URLGlob *glob)
  if(NULL == target)
    return NULL; /* major failure */

  while (*filename != '\0') {
    if (*filename == '#') {
      if (!isdigit((int)*++filename) ||
	  *filename == '0') {		/* only '#1' ... '#9' allowed */
	/* printf("illegal matching expression\n");
           exit(CURLE_URL_MALFORMAT);*/
        continue;
      }
      i = *filename - '1';
      if (i + 1 > glob->size / 2) {
	/*printf("match against nonexisting pattern\n");
          exit(CURLE_URL_MALFORMAT);*/
        continue;
      }
      pat = glob->pattern[i];
  while (*filename) {
    if (*filename == '#' && isdigit((int)filename[1])) {
      /* only '#1' ... '#9' allowed */
      int i;
      unsigned long num = strtoul(&filename[1], &filename, 10);

      i = num-1;

      if (num && (i <= glob->size / 2)) {
        URLPattern pat = glob->pattern[i];
        switch (pat.type) {
        case UPTSet:
          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;
        case UPTCharRange:
          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);
          return NULL;
        }
      ++filename;
      }
    }
    else {
      appendthis=filename++;