1 1.1 christos /* 2 1.1 christos * build: 3 1.1 christos * CC=clang CXX=clang++ CFLAGS="-fsanitize=address,fuzzer-no-link -g" \ 4 1.1 christos * CXXFLAGS="-fsanitize=address,fuzzer-no-link -g" ./configure && make 5 1.1 christos * run: 6 1.1 christos * LD_LIBRARY_PATH=../src/.libs/ .libs/fuzz1 -max_len=32 \ 7 1.1 christos * -use_value_profile=1 -only_ascii=1 8 1.1 christos */ 9 1.1 christos #include <readline/readline.h> 10 1.1 christos #include <locale.h> 11 1.1 christos #include <stdint.h> 12 1.1 christos #include <stdio.h> 13 1.1 christos #include <stdlib.h> 14 1.1 christos #include <string.h> 15 1.1 christos 16 1.1 christos int init = 0; 17 1.1 christos 18 1.1 christos int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { 19 1.1 christos if (!Size) 20 1.1 christos return 0; 21 1.1 christos 22 1.1 christos if (!init) { 23 1.1 christos setlocale(LC_CTYPE, ""); 24 1.1 christos stifle_history(7); 25 1.1 christos init = 1; 26 1.1 christos } 27 1.1 christos 28 1.1 christos clear_history(); 29 1.1 christos 30 1.1 christos size_t lasti = 0; 31 1.1 christos 32 1.1 christos for (size_t i = 0;; ++i) { 33 1.1 christos if (i == Size || Data[i] == '\n') { 34 1.1 christos if (i - lasti) { 35 1.1 christos char *s = (char *)malloc(i - lasti + 1); 36 1.1 christos memcpy(s, &Data[lasti], i - lasti); 37 1.1 christos s[i - lasti] = '\0'; 38 1.1 christos 39 1.1 christos char *expansion; 40 1.1 christos int result; 41 1.1 christos 42 1.1 christos #ifdef DEBUG 43 1.1 christos fprintf(stderr, "Calling history_expand: >%s<\n", s); 44 1.1 christos #endif 45 1.1 christos result = history_expand(s, &expansion); 46 1.1 christos 47 1.1 christos if (result < 0 || result == 2) { 48 1.1 christos /* Errors ignored */ 49 1.1 christos } else { 50 1.1 christos add_history(expansion); 51 1.1 christos } 52 1.1 christos free(expansion); 53 1.1 christos free(s); 54 1.1 christos } 55 1.1 christos lasti = i + 1; 56 1.1 christos } 57 1.1 christos 58 1.1 christos if (i == Size) 59 1.1 christos break; 60 1.1 christos } 61 1.1 christos 62 1.1 christos return 0; 63 1.1 christos } 64