just use the stack to kill memleak and return if user didnt give us anything to match
authorMike Frysinger <vapier@gentoo.org>
Sun, 16 Apr 2006 21:41:00 +0000 (21:41 -0000)
committerMike Frysinger <vapier@gentoo.org>
Sun, 16 Apr 2006 21:41:00 +0000 (21:41 -0000)
miscutils/less.c

index eba916a80efbfdf83e2101f3418364ea25cf943d..9d42748dca2fbd34e08feecacf90a49049a01ee8 100644 (file)
@@ -659,7 +659,7 @@ static void regex_process(void)
        char current_line[256];
        int i;
        int j = 0;
-       regex_t *pattern;
+       regex_t pattern;
 
        /* Reset variables */
        match_lines[0] = -1;
@@ -667,9 +667,6 @@ static void regex_process(void)
        num_matches = 0;
        match_found = 0;
 
-       pattern = (regex_t *) malloc(sizeof(regex_t));
-       memset(pattern, 0, sizeof(regex_t));
-
        /* Get the uncompiled regular expression from the user */
        clear_line();
        putchar((match_backwards) ? '?' : '/');
@@ -681,14 +678,15 @@ static void regex_process(void)
                        uncomp_regex[i-1] = '\0';
                else
                        while((i = getchar()) != '\n' && i != EOF);
-       }
+       } else
+               return;
 
        /* Compile the regex and check for errors */
-       xregcomp(pattern, uncomp_regex, 0);
+       xregcomp(&pattern, uncomp_regex, 0);
 
        /* Run the regex on each line of the current file here */
        for (i = 0; i <= num_flines; i++) {
-               strcpy(current_line, process_regex_on_line(flines[i], pattern));
+               strcpy(current_line, process_regex_on_line(flines[i], &pattern));
                flines[i] = bb_xstrdup(current_line);
                if (match_found) {
                        match_lines[j] = i;