- Timestamp:
- Jan 7, 2007, 7:34:50 PM (14 years ago)
- Location:
- zzuf/trunk/src
- Files:
-
- 2 deleted
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
zzuf/trunk/src/Makefile.am
r1613 r1614 1 1 2 2 bin_PROGRAMS = zzuf 3 zzuf_SOURCES = zzuf.c random.c random.h chars.c chars.hfd.c fd.h fuzz.c fuzz.h3 zzuf_SOURCES = zzuf.c random.c random.h fd.c fd.h fuzz.c fuzz.h 4 4 zzuf_CFLAGS = -DLIBDIR=\"$(libdir)/zzuf\" 5 5 … … 7 7 libzzuf_la_SOURCES = libzzuf.c libzzuf.h fuzz.c fuzz.h debug.c debug.h \ 8 8 load-fd.c load-signal.c load-stream.c load.h \ 9 fd.c fd.h chars.c chars.hrandom.c random.h9 fd.c fd.h random.c random.h 10 10 libzzuf_la_LDFLAGS = -avoid-version -no-undefined 11 11 libzzuf_la_LIBADD = @GETOPT_LIBS@ @DL_LIBS@ -
zzuf/trunk/src/fuzz.c
r1613 r1614 37 37 #define MAGIC2 0x783bc31f 38 38 39 static float _zz_ratio = 0.004f; 40 static int _zz_seed = 0; 41 42 void _zz_setseed(int seed) 43 { 44 _zz_seed = seed; 45 } 46 47 void _zz_setratio(float ratio) 48 { 49 _zz_ratio = ratio; 50 if(_zz_ratio < 0.0f) 51 _zz_ratio = 0.0f; 52 else if(_zz_ratio > 5.0f) 53 _zz_ratio = 5.0f; 39 /* Fuzzing variables */ 40 static int protect[256]; 41 static int refuse[256]; 42 static float ratio = 0.004f; 43 static int seed = 0; 44 45 static void readchars(int *, char const *); 46 47 void _zz_protect(char const *list) 48 { 49 readchars(protect, list); 50 } 51 52 void _zz_refuse(char const *list) 53 { 54 readchars(refuse, list); 55 } 56 57 void _zz_setseed(int s) 58 { 59 seed = s; 60 } 61 62 void _zz_setratio(float r) 63 { 64 if(r < 0.0f) 65 r = 0.0f; 66 else if(r > 5.0f) 67 r = 5.0f; 68 ratio = r; 54 69 } 55 70 … … 82 97 83 98 /* Add some random dithering to handle ratio < 1.0/CHUNKBYTES */ 84 _zz_srand( _zz_seed ^ chunkseed);85 todo = (int)(( _zz_ratio * (8 * CHUNKBYTES * 1000)86 87 _zz_srand( _zz_seed ^ chunkseed ^ (todo * MAGIC2));99 _zz_srand(seed ^ chunkseed); 100 todo = (int)((ratio * (8 * CHUNKBYTES * 1000) 101 + _zz_rand(1000)) / 1000.0); 102 _zz_srand(seed ^ chunkseed ^ (todo * MAGIC2)); 88 103 89 104 while(todo--) … … 108 123 uint8_t byte = aligned_buf[j]; 109 124 110 if( _zz_protect[byte])125 if(protect[byte]) 111 126 continue; 112 127 113 128 byte ^= fuzz->data[j % CHUNKBYTES]; 114 129 115 if( _zz_refuse[byte])130 if(refuse[byte]) 116 131 continue; 117 132 … … 121 136 } 122 137 138 static void readchars(int *table, char const *list) 139 { 140 static char const hex[] = "0123456789abcdef0123456789ABCDEF"; 141 char const *tmp; 142 int a, b; 143 144 memset(table, 0, 256 * sizeof(int)); 145 146 for(tmp = list, a = b = -1; *tmp; tmp++) 147 { 148 int new; 149 150 if(*tmp == '\\' && tmp[1] == '\0') 151 new = '\\'; 152 else if(*tmp == '\\') 153 { 154 tmp++; 155 if(*tmp == 'n') 156 new = '\n'; 157 else if(*tmp == 'r') 158 new = '\r'; 159 else if(*tmp == 't') 160 new = '\t'; 161 else if(tmp[0] >= '0' && tmp[0] <= '7' && tmp[1] >= '0' 162 && tmp[1] <= '7' && tmp[2] >= '0' && tmp[2] <= '7') 163 { 164 new = tmp[2] - '0'; 165 new |= (int)(tmp[1] - '0') << 3; 166 new |= (int)(tmp[0] - '0') << 6; 167 tmp += 2; 168 } 169 else if((*tmp == 'x' || *tmp == 'X') 170 && tmp[1] && strchr(hex, tmp[1]) 171 && tmp[2] && strchr(hex, tmp[2])) 172 { 173 new = ((strchr(hex, tmp[1]) - hex) & 0xf) << 4; 174 new |= (strchr(hex, tmp[2]) - hex) & 0xf; 175 tmp += 2; 176 } 177 else 178 new = (unsigned char)*tmp; /* XXX: OK for \\, but what else? */ 179 } 180 else 181 new = (unsigned char)*tmp; 182 183 if(a != -1 && b == '-' && a <= new) 184 { 185 while(a <= new) 186 table[a++] = 1; 187 a = b = -1; 188 } 189 else 190 { 191 if(a != -1) 192 table[a] = 1; 193 a = b; 194 b = new; 195 } 196 } 197 198 if(a != -1) 199 table[a] = 1; 200 if(b != -1) 201 table[b] = 1; 202 } 203 -
zzuf/trunk/src/fuzz.h
r1613 r1614 17 17 */ 18 18 19 extern void _zz_protect(char const *); 20 extern void _zz_refuse(char const *); 19 21 extern void _zz_setseed(int); 20 22 extern void _zz_setratio(float); 23 21 24 extern void _zz_fuzz(int, uint8_t *, uint64_t); 22 25 -
zzuf/trunk/src/libzzuf.c
r1613 r1614 38 38 #include "debug.h" 39 39 #include "load.h" 40 #include "chars.h"41 40 #include "fd.h" 42 41 #include "fuzz.h" … … 48 47 int _zz_signal = 0; 49 48 int _zz_network = 0; 50 51 /* Global tables */52 int _zz_protect[256];53 int _zz_refuse[256];54 49 55 50 /* Library initialisation shit */ … … 72 67 tmp = getenv("ZZUF_PROTECT"); 73 68 if(tmp && *tmp) 74 _zz_ readchars(_zz_protect,tmp);69 _zz_protect(tmp); 75 70 76 71 tmp = getenv("ZZUF_REFUSE"); 77 72 if(tmp && *tmp) 78 _zz_re adchars(_zz_refuse,tmp);73 _zz_refuse(tmp); 79 74 80 75 tmp = getenv("ZZUF_INCLUDE"); -
zzuf/trunk/src/libzzuf.h
r1613 r1614 42 42 extern int _zz_network; 43 43 44 /* Internal tables TODO: merge them and use bitmasks */45 extern int _zz_protect[256];46 extern int _zz_refuse[256];47 48 44 /* Library initialisation shit */ 49 45 extern void _zz_init(void) __attribute__((constructor)); -
zzuf/trunk/src/zzuf.c
r1613 r1614 40 40 #include "libzzuf.h" 41 41 #include "random.h" 42 #include "chars.h"43 42 #include "fd.h" 44 43 #include "fuzz.h" … … 55 54 static void usage(void); 56 55 #endif 57 58 /* Global tables */59 int _zz_protect[256];60 int _zz_refuse[256];61 56 62 57 static struct child_list … … 234 229 235 230 if(protect) 236 _zz_ readchars(_zz_protect,protect);231 _zz_protect(protect); 237 232 if(refuse) 238 _zz_re adchars(_zz_refuse, protect);233 _zz_refuse(refuse); 239 234 240 235 _zz_fd_init();
Note: See TracChangeset
for help on using the changeset viewer.