Ignore:
Timestamp:
Dec 29, 2006, 7:13:42 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Check regex syntax in zzuf.
  • Fix minor, harmful memory leaks.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • zzuf/trunk/src/zzuf.c

    r1526 r1528  
    3030#include <stdlib.h>
    3131#include <unistd.h>
     32#include <regex.h>
    3233#include <string.h>
    3334#include <signal.h>
     
    4647#endif
    4748
    48 enum status
    49 {
    50     STATUS_FREE,
    51     STATUS_RUNNING,
    52     STATUS_SIGTERM,
    53     STATUS_SIGKILL,
    54     STATUS_EOF,
    55 };
    56 
    5749struct child_list
    5850{
    59     enum status status;
     51    enum status
     52    {
     53        STATUS_FREE,
     54        STATUS_RUNNING,
     55        STATUS_SIGTERM,
     56        STATUS_SIGKILL,
     57        STATUS_EOF,
     58    } status;
     59
    6060    pid_t pid;
    6161    int outfd, errfd;
    6262    int bytes, seed;
    6363    time_t date;
    64 }
    65 *child_list;
     64} *child_list;
    6665int parallel = 1, child_count = 0;
    6766
     
    8281int main(int argc, char *argv[])
    8382{
     83    regex_t optre;
    8484    char **newargv;
    8585    char *parser;
     
    121121        {
    122122        case 'I': /* --include */
     123            if(regcomp(&optre, optarg, 0) != 0)
     124            {
     125                printf("%s: invalid regex -- `%s'\n", argv[0], optarg);
     126                return EXIT_FAILURE;
     127            }
     128            regfree(&optre);
    123129            setenv("ZZUF_INCLUDE", optarg, 1);
    124130            break;
    125131        case 'E': /* --exclude */
     132            if(regcomp(&optre, optarg, 0) != 0)
     133            {
     134                printf("%s: invalid regex -- `%s'\n", argv[0], optarg);
     135                return EXIT_FAILURE;
     136            }
     137            regfree(&optre);
    126138            setenv("ZZUF_EXCLUDE", optarg, 1);
    127139            break;
     
    161173            printf("%s: invalid option -- %c\n", argv[0], c);
    162174            printf(MOREINFO, argv[0]);
    163             return 1;
     175            return EXIT_FAILURE;
    164176        }
    165177    }
     
    329341        }
    330342    }
     343
     344    /* Clean up */
     345    free(newargv);
     346    free(child_list);
    331347
    332348    return EXIT_SUCCESS;   
     
    406422    strcpy(tmp ? tmp + 1 : libpath, ".libs/libzzuf.so");
    407423    if(access(libpath, R_OK) == 0)
    408     {
    409424        setenv("LD_PRELOAD", libpath, 1);
    410         return;
    411     }
     425    else
     426        setenv("LD_PRELOAD", LIBDIR "/libzzuf.so", 1);
    412427    free(libpath);
    413 
    414     setenv("LD_PRELOAD", LIBDIR "/libzzuf.so", 1);
    415428}
    416429
Note: See TracChangeset for help on using the changeset viewer.