Inline comments below.

> --- tsort.c   29 Jul 2015 10:42:37 -0000      1.26
> +++ tsort.c   28 Aug 2015 08:03:59 -0000
> @@ -798,6 +799,43 @@ find_longest_cycle(struct array *h, stru
>  
>  #define plural(n) ((n) > 1 ? "s" : "")
>  
> +static void
> +TAME(int flags, const char *wl[])
> +{
> +     if (tame(flags, wl) != 0)
> +             err(1, "untamed program");
> +}
> +
> +static void 
> +compute_whitelist(int argc, char *argv[], char *args[])
> +{
> +     int c;
> +     int i = 0;
> +
> +     while ((c = getopt(argc, argv, "h:flqrvw")) != -1) {
> +             switch(c) {
> +             case 'h':
> +                     args[i++] = optarg;
This assignment can write past the end of 'args' when the -h option is
given multiple times.

> +                     /*FALLTHRU*/
> +             case 'f':
> +             case 'l':
> +             case 'q':
> +             case 'r':
> +             case 'v':
> +             case 'w':
> +                     break;
> +             default:
> +                     usage();
> +             }
> +     }
> +     argc -= optind;
> +     argv += optind;
> +     if (argc == 1)
> +             args[i++] = argv[0];
> +     args[i] = NULL;
> +     optind = optreset = 1;
> +}
> +
>  int
>  main(int argc, char *argv[])
>  {
> @@ -806,6 +844,10 @@ main(int argc, char *argv[])
>                           warn_flag, hints_flag, verbose_flag;
>       unsigned int    order;
>  
> +     char *args[3];
How about something like this?

        char **args = calloc(argc, sizeof(char *));
        if (args == NULL)
                err(1, "calloc");

In most cases this will probably be a waste of space, but at least it
keeps the code simple. The other option would be to fiddle with
realloc() in compute_whitelist().

> +
> +     compute_whitelist(argc, argv, args);
> +     TAME(TAME_STDIO|TAME_RPATH, args);
>       order = 0;
>  
>       reverse_flag = quiet_flag = long_flag =

cheers,
natano

Reply via email to