1 /* fuzz - print many unicode chars to the terminal.
3 * This program will print every 4-byte combination to the
4 * terminal (though, of course, this could take a *long* time...)
6 * Copyright (C) 2017 Ethan McTague
7 * Email <ethan@tague.me> for more information.
8 * Licensed under the BSD license - see LICENSE.
13 void fuzz(const char* before
, int num
);
14 void help(const char* progName
);
16 void badArgs(const char* progName
);
17 void readArgs(int argc
, char* argv
[], int* showHelp
, int* showVersion
, int* runFuzz
);
19 int main (int argc
, char* argv
[]) {
23 readArgs(argc
, argv
, &showHelp
, &showVersion
, &runFuzz
);
25 if (showHelp
) help(argv
[0]);
26 else if (showVersion
) version();
27 else if (runFuzz
) fuzz("", 4);
28 else badArgs(argv
[0]);
32 void fuzz(const char* before
, int num
) {
33 for (int ch
= 0; ch
< 0x7FFFFFF; ch
++) {
34 int size
= num
+ strlen(before
) + 1;
36 snprintf(buffer
, size
, "%s%c", before
, ch
);
37 if (num
> 0) fuzz(buffer
, num
- 1);
38 else printf("%s", buffer
);
42 void help(const char* progName
) {
43 puts("fuzzer: print many unicode chars to the terminal.");
44 puts("Pipe output to another program to test its input handling.");
46 printf("Usage: %s [options]\n", progName
);
48 puts(" --help Print this help screen.");
49 puts(" --version Print version information.");
50 puts(" --fuzz Run the Fuzzer.");
52 puts("Copyright (C) 2017 Ethan McTague");
53 puts("Email <ethan@tague.me> for more information.");
58 puts("By Ethan McTague");
61 void badArgs(const char* progName
) {
62 printf("Bad arguments. Run '%s --help' to learn how to use fuzzer.\n", progName
);
65 void readArgs(int argc
, char* argv
[], int* showHelp
, int* showVersion
, int* runFuzz
) {
66 for (int i
= 1; i
< argc
; i
++) {
67 if (!strcmp(argv
[i
], "--help")) {
70 } else if (!strcmp(argv
[i
], "--version")) {
73 } else if (!strcmp(argv
[i
], "--fuzz")) {