Ignore:
Timestamp:
Jan 7, 2007, 7:18:50 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • If no argument is given, just fuzz standard input.
File:
1 edited

Legend:

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

    r1578 r1613  
    3838#include <sys/wait.h>
    3939
     40#include "libzzuf.h"
    4041#include "random.h"
    41 #include "libzzuf.h"
     42#include "chars.h"
     43#include "fd.h"
     44#include "fuzz.h"
    4245
    4346static void spawn_child(char **);
     
    5356#endif
    5457
     58/* Global tables */
     59int   _zz_protect[256];
     60int   _zz_refuse[256];
     61
    5562static struct child_list
    5663{
     
    9198{
    9299    char **newargv;
    93     char *parser, *include = NULL, *exclude = NULL;
     100    char *parser, *include, *exclude, *protect, *refuse;
    94101    int i, cmdline = 0;
     102
     103    include = exclude = protect = refuse = NULL;
    95104
    96105#if defined(HAVE_GETOPT_H)
     
    173182            break;
    174183        case 'P': /* --protect */
    175             setenv("ZZUF_PROTECT", optarg, 1);
     184            protect = optarg;
    176185            break;
    177186        case 'q': /* --quiet */
     
    180189        case 'r': /* --ratio */
    181190            setenv("ZZUF_RATIO", optarg, 1);
     191            _zz_setratio(atof(optarg));
    182192            break;
    183193        case 'R': /* --refuse */
    184             setenv("ZZUF_REFUSE", optarg, 1);
     194            refuse = optarg;
    185195            break;
    186196        case 's': /* --seed */
    187197            parser = strchr(optarg, ':');
    188             seed = atoi(optarg);
     198            _zz_setseed(seed = atol(optarg));
    189199            endseed = parser ? atoi(parser + 1) : seed + 1;
    190200            break;
     
    212222#endif
    213223
     224    /* If asked to read from the standard input */
    214225    if(optind >= argc)
    215226    {
    216         printf("%s: missing argument\n", argv[0]);
    217         printf(MOREINFO, argv[0]);
    218         return EXIT_FAILURE;
     227        if(endseed != seed + 1)
     228        {
     229            printf("%s: seed ranges are incompatible with stdin fuzzing\n",
     230                   argv[0]);
     231            printf(MOREINFO, argv[0]);
     232            return EXIT_FAILURE;
     233        }
     234
     235        if(protect)
     236            _zz_readchars(_zz_protect, protect);
     237        if(refuse)
     238            _zz_readchars(_zz_refuse, protect);
     239
     240        _zz_fd_init();
     241        _zz_register(0);
     242
     243        for(;;)
     244        {
     245            uint8_t buf[12];
     246            int ret = fread(buf, 1, 12, stdin);
     247            if(ret <= 0)
     248                break;
     249
     250            _zz_fuzz(0, buf, ret);
     251            _zz_addpos(0, ret);
     252
     253            fwrite(buf, 1, ret, stdout);
     254        }
     255
     256        _zz_unregister(0);
     257        _zz_fd_fini();
     258
     259        return EXIT_SUCCESS;
    219260    }
    220261
     
    238279    if(exclude)
    239280        setenv("ZZUF_EXCLUDE", exclude, 1);
     281    if(protect)
     282        setenv("ZZUF_PROTECT", protect, 1);
     283    if(refuse)
     284        setenv("ZZUF_REFUSE", refuse, 1);
    240285
    241286    /* Allocate memory for children handling */
Note: See TracChangeset for help on using the changeset viewer.