RyanJsonFuzzer.c 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #include "RyanJsonFuzzer.h"
  2. RyanJsonBool_e isEnableRandomMemFail = RyanJsonTrue;
  3. int LLVMFuzzerTestOneInput(const char *data, uint32_t size)
  4. {
  5. // for (int i = 0; i < size; i++) { printf("%c", size, data[i]); }
  6. // printf("\r\n");
  7. RyanJsonInitHooks(NULL, RyanJsonFuzzerFree, RyanJsonFuzzerRealloc);
  8. RyanJsonInitHooks(RyanJsonFuzzerMalloc, NULL, RyanJsonFuzzerRealloc);
  9. RyanJsonInitHooks(RyanJsonFuzzerMalloc, RyanJsonFuzzerFree, NULL);
  10. RyanJsonInitHooks(NULL, NULL, NULL);
  11. RyanJsonInitHooks(RyanJsonFuzzerMalloc, RyanJsonFuzzerFree, 0 != size % 2 ? NULL : RyanJsonFuzzerRealloc);
  12. RyanJsonAssert(NULL == RyanJsonParseOptions(NULL, 100, RyanJsonFalse, NULL));
  13. RyanJsonAssert(NULL == RyanJsonParseOptions(data, 0, RyanJsonFalse, NULL));
  14. const char *parseEndPtr = NULL;
  15. RyanJson_t pJson = RyanJsonParseOptions(data, size, 0 != size % 3 ? RyanJsonTrue : RyanJsonFalse, &parseEndPtr);
  16. if (NULL != pJson)
  17. {
  18. assert(NULL != parseEndPtr && parseEndPtr - data <= size);
  19. {
  20. isEnableRandomMemFail = RyanJsonFalse;
  21. RyanJson_t pJson2 = RyanJsonDuplicate(pJson);
  22. isEnableRandomMemFail = RyanJsonTrue;
  23. RyanJsonCheckCode(RyanJsonFuzzerTestDelete(pJson2, size), {
  24. RyanJsonDelete(pJson2);
  25. goto exit__;
  26. });
  27. RyanJsonDelete(pJson2);
  28. }
  29. {
  30. isEnableRandomMemFail = RyanJsonFalse;
  31. RyanJson_t pJson2 = RyanJsonDuplicate(pJson);
  32. isEnableRandomMemFail = RyanJsonTrue;
  33. RyanJsonCheckCode(RyanJsonFuzzerTestDetach(pJson2, size), {
  34. RyanJsonDelete(pJson2);
  35. goto exit__;
  36. });
  37. RyanJsonDelete(pJson2);
  38. }
  39. RyanJsonFuzzerTestMinify(data, size);
  40. RyanJsonFuzzerTestParse(pJson, data, size);
  41. RyanJsonFuzzerTestGet(pJson, size);
  42. RyanJsonFuzzerTestDuplicate(pJson);
  43. RyanJsonCheckCode(RyanJsonFuzzerTestModify(pJson, size), { goto exit__; });
  44. RyanJsonCheckCode(RyanJsonFuzzerTestCreate(pJson, size), { goto exit__; });
  45. RyanJsonCheckCode(RyanJsonFuzzerTestReplace(pJson, size), { goto exit__; });
  46. RyanJsonDelete(pJson);
  47. }
  48. return 0;
  49. exit__:
  50. RyanJsonDelete(pJson);
  51. return 0;
  52. }