/* * build: * CC=clang CXX=clang++ CFLAGS="-fsanitize=address,fuzzer-no-link -g" \ * CXXFLAGS="-fsanitize=address,fuzzer-no-link -g" ./configure && make * run: * LD_LIBRARY_PATH=../src/.libs/ .libs/fuzz1 -max_len=32 \ * -use_value_profile=1 -only_ascii=1 */ #include <readline/readline.h> #include <locale.h> #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int init = 0; int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { if (!Size) return 0; if (!init) { setlocale(LC_CTYPE, ""); stifle_history(7); init = 1; } clear_history(); size_t lasti = 0; for (size_t i = 0;; ++i) { if (i == Size || Data[i] == '\n') { if (i - lasti) { char *s = (char *)malloc(i - lasti + 1); memcpy(s, &Data[lasti], i - lasti); s[i - lasti] = '\0'; char *expansion; int result; #ifdef DEBUG fprintf(stderr, "Calling history_expand: >%s<\n", s); #endif result = history_expand(s, &expansion); if (result < 0 || result == 2) { /* Errors ignored */ } else { add_history(expansion); } free(expansion); free(s); } lasti = i + 1; } if (i == Size) break; } return 0; } |