stb_c_lexer_fuzzer.cpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #define STB_C_LEX_C_DECIMAL_INTS Y
  2. #define STB_C_LEX_C_HEX_INTS Y
  3. #define STB_C_LEX_C_OCTAL_INTS Y
  4. #define STB_C_LEX_C_DECIMAL_FLOATS Y
  5. #define STB_C_LEX_C99_HEX_FLOATS Y
  6. #define STB_C_LEX_C_IDENTIFIERS Y
  7. #define STB_C_LEX_C_DQ_STRINGS Y
  8. #define STB_C_LEX_C_SQ_STRINGS Y
  9. #define STB_C_LEX_C_CHARS Y
  10. #define STB_C_LEX_C_COMMENTS Y
  11. #define STB_C_LEX_CPP_COMMENTS Y
  12. #define STB_C_LEX_C_COMPARISONS Y
  13. #define STB_C_LEX_C_LOGICAL Y
  14. #define STB_C_LEX_C_SHIFTS Y
  15. #define STB_C_LEX_C_INCREMENTS Y
  16. #define STB_C_LEX_C_ARROW Y
  17. #define STB_C_LEX_EQUAL_ARROW Y
  18. #define STB_C_LEX_C_BITWISEEQ Y
  19. #define STB_C_LEX_C_ARITHEQ Y
  20. #define STB_C_LEX_PARSE_SUFFIXES Y
  21. #define STB_C_LEX_DECIMAL_SUFFIXES "uUlL"
  22. #define STB_C_LEX_HEX_SUFFIXES "lL"
  23. #define STB_C_LEX_OCTAL_SUFFIXES "lL"
  24. #define STB_C_LEX_FLOAT_SUFFIXES "uulL"
  25. #define STB_C_LEX_0_IS_EOF N
  26. #define STB_C_LEX_INTEGERS_AS_DOUBLES N
  27. #define STB_C_LEX_MULTILINE_DSTRINGS Y
  28. #define STB_C_LEX_MULTILINE_SSTRINGS Y
  29. #define STB_C_LEX_USE_STDLIB N
  30. #define STB_C_LEX_DOLLAR_IDENTIFIER Y
  31. #define STB_C_LEX_FLOAT_NO_DECIMAL Y
  32. #define STB_C_LEX_DEFINE_ALL_TOKEN_NAMES Y
  33. #define STB_C_LEX_DISCARD_PREPROCESSOR Y
  34. #define STB_C_LEXER_DEFINITIONS
  35. #define STB_C_LEXER_IMPLEMENTATION
  36. #define STB_C_LEXER_SELF_TEST
  37. #include "../stb_c_lexer.h"
  38. #include <stdint.h>
  39. #include <stdlib.h>
  40. #include <string.h>
  41. #include <stdio.h>
  42. extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
  43. {
  44. if(size<3){
  45. return 0;
  46. }
  47. char *input_stream = (char *)malloc(size);
  48. if (input_stream == NULL){
  49. return 0;
  50. }
  51. memcpy(input_stream, data, size);
  52. stb_lexer lex;
  53. char *input_end = input_stream+size-1;
  54. char *store = (char *)malloc(0x10000);
  55. int len = 0x10000;
  56. stb_c_lexer_init(&lex, input_stream, input_end, store, len);
  57. while (stb_c_lexer_get_token(&lex)) {
  58. if (lex.token == CLEX_parse_error) {
  59. break;
  60. }
  61. }
  62. free(input_stream);
  63. free(store);
  64. return 0;
  65. }