Changeset 1486 for zzuf


Ignore:
Timestamp:
Dec 15, 2006, 5:10:56 PM (16 years ago)
Author:
Sam Hocevar
Message:
  • Rename percent to ratio.
Location:
zzuf/trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • zzuf/trunk/TODO

    r1478 r1486  
    11  * Parallelise operations.
    22  * Only very basic support for [f]open/[f]read, etc. see fscanf, fgets...
     3
     412:59 <rominet> est-ce qu'il marcherait sur un socket
     512:59 <sam> pas encore, mais c’est prévu
     612:59 <rominet> aussi il faudrait des options pour le déclencher qu'apres un
     7                marker
     812:59 <rominet> genre dans la réponse HTTP, mais apres \r\n\r\n
     9
  • zzuf/trunk/src/fuzz.c

    r1483 r1486  
    3333#include "fuzz.h"
    3434
    35 #define CHUNK_SIZE 1024
     35#define MAGIC1 0x33ea84f7
     36#define MAGIC2 0x783bc31f
     37/* We arbitrarily split files into 1024-byte chunks. Each chunk has an
     38 * associated seed that can be computed from the zzuf seed, the chunk
     39 * index and the fuzziness density. This allows us to predictably fuzz
     40 * any part of the file without reading the whole file. */
     41#define CHUNKSIZE 1024
    3642
    3743void zzuf_fuzz(int fd, uint8_t *buf, uint64_t len)
    3844{
    39     uint8_t bits[CHUNK_SIZE];
    40     uint64_t pos;
    41     unsigned int i;
     45    uint64_t start, stop;
     46    unsigned int i, todo;
    4247
    43     pos = files[fd].pos;
     48    start = files[fd].pos;
     49    stop = start + len;
    4450
    45     for(i = pos / CHUNK_SIZE;
    46         i < (pos + len + CHUNK_SIZE - 1) / CHUNK_SIZE;
    47         i++)
     51    for(i = start / CHUNKSIZE; i < (stop + CHUNKSIZE - 1) / CHUNKSIZE; i++)
    4852    {
    49         int todo;
     53        uint32_t chunkseed = i * MAGIC1;
    5054
    51         /* Add some random dithering to handle percent < 1.0/CHUNK_SIZE */
    52         zzuf_srand(_zzuf_seed ^ (i * 0x33ea84f7));
    53         todo = (int)((_zzuf_percent * CHUNK_SIZE + zzuf_rand(100)) / 100.0);
    54         zzuf_srand(_zzuf_seed ^ (i * 0x7f48ae33) ^ (todo * 0x783bc31f));
     55        /* Add some random dithering to handle ratio < 1.0/CHUNKSIZE */
     56        zzuf_srand(_zzuf_seed ^ chunkseed);
     57        todo = (int)((_zzuf_ratio * (CHUNKSIZE * 1000) + zzuf_rand(1000))
     58                     / 1000.0);
     59        zzuf_srand(_zzuf_seed ^ chunkseed ^ (todo * MAGIC2));
    5560
    56         memset(bits, 0, CHUNK_SIZE);
    5761        while(todo--)
    5862        {
    59             uint64_t idx = i * CHUNK_SIZE + zzuf_rand(CHUNK_SIZE);
     63            uint64_t idx = i * CHUNKSIZE + zzuf_rand(CHUNKSIZE);
    6064            uint8_t byte = (1 << zzuf_rand(8));
    6165
    62             if(idx < pos || idx >= pos + len)
     66            if(idx < start || idx >= stop)
    6367                continue;
    6468
    65             buf[idx - pos] ^= byte;
     69            buf[idx - start] ^= byte;
    6670        }
    6771    }
  • zzuf/trunk/src/libzzuf.c

    r1485 r1486  
    4242int   _zzuf_debug   = 0;
    4343int   _zzuf_seed    = 0;
    44 float _zzuf_percent = 0.04f;
     44float _zzuf_ratio   = 0.057f;
    4545regex_t * _zzuf_include = NULL;
    4646regex_t * _zzuf_exclude = NULL;
     
    6666        _zzuf_seed = atol(tmp);
    6767
    68     tmp = getenv("ZZUF_PERCENT");
     68    tmp = getenv("ZZUF_RATIO");
    6969    if(tmp && *tmp)
    70         _zzuf_percent = atof(tmp);
    71     if(_zzuf_percent < 0.0f)
    72         _zzuf_percent = 0.0f;
    73     else if(_zzuf_percent > 100.0f)
    74         _zzuf_percent = 100.0f;
     70        _zzuf_ratio = atof(tmp);
     71    if(_zzuf_ratio < 0.0f)
     72        _zzuf_ratio = 0.0f;
     73    else if(_zzuf_ratio > 5.0f)
     74        _zzuf_ratio = 5.0f;
    7575
    7676    tmp = getenv("ZZUF_INCLUDE");
  • zzuf/trunk/src/libzzuf.h

    r1473 r1486  
    3131extern int       _zzuf_debug;
    3232extern int       _zzuf_seed;
    33 extern float     _zzuf_percent;
     33extern float     _zzuf_ratio;
    3434extern regex_t * _zzuf_include;
    3535extern regex_t * _zzuf_exclude;
  • zzuf/trunk/src/preload.c

    r1482 r1486  
    270270    }
    271271
    272     /* Sanity check */
     272    /* Sanity check, can be OK though (for instance with a character device) */
    273273    if((uint64_t)lseek64_orig(fd, 0, SEEK_CUR) != files[fd].pos)
    274         fprintf(stderr, "ZZUF ERROR: OFFSET INCONSISTENCY\n");
     274        debug("warning: offset inconsistency");
    275275
    276276    return ret;
  • zzuf/trunk/src/zzuf.c

    r1475 r1486  
    5555                { "include", 1, NULL, 'i' },
    5656                { "exclude", 1, NULL, 'e' },
    57                 { "seed", 1, NULL, 's' },
    58                 { "percent", 1, NULL, 'p' },
    59                 { "debug", 1, NULL, 'd' },
    60                 { "help", 0, NULL, 'h' },
     57                { "seed",    1, NULL, 's' },
     58                { "ratio",   1, NULL, 'r' },
     59                { "debug",   1, NULL, 'd' },
     60                { "help",    0, NULL, 'h' },
    6161                { "version", 0, NULL, 'v' },
    6262            };
    6363
    64         int c = getopt_long(argc, argv, "i:e:s:p:dhv",
     64        int c = getopt_long(argc, argv, "i:e:s:r:dhv",
    6565                            long_options, &option_index);
    6666#   else
    6767#       define MOREINFO "Try `%s -h' for more information.\n"
    68         int c = getopt(argc, argv, "i:e:s:p:dhv");
     68        int c = getopt(argc, argv, "i:e:s:r:dhv");
    6969#   endif
    7070        if(c == -1)
     
    8282            setenv("ZZUF_SEED", optarg, 1);
    8383            break;
    84         case 'p': /* --percent */
    85             setenv("ZZUF_PERCENT", optarg, 1);
     84        case 'r': /* --ratio */
     85            setenv("ZZUF_RATIO", optarg, 1);
    8686            break;
    8787        case 'd': /* --debug */
     
    157157static void usage(void)
    158158{
    159     printf("Usage: zzuf [ -vdh ] [ -i regex ] [ -e regex ]\n");
    160     printf("                     [ -p percent ] [ -s seed ] PROGRAM ARGS...\n");
     159    printf("Usage: zzuf [ -vdh ] [ -i include ] [ -e exclude ]\n");
     160    printf("                     [ -r ratio ] [ -s seed ] PROGRAM ARGS...\n");
    161161#   ifdef HAVE_GETOPT_LONG
    162162    printf("  -h, --help          display this help and exit\n");
Note: See TracChangeset for help on using the changeset viewer.