You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

json_object_fuzzer.cc 1.5 kB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #include <fuzzer/FuzzedDataProvider.h>
  2. #include "json.h"
  3. #include "json_visit.h"
  4. // Function to test json_c_visit
  5. static int emit_object(json_object *jso, int flags, json_object *parent_jso, const char *jso_key,
  6. size_t *jso_index, void *userarg) {
  7. return JSON_C_VISIT_RETURN_CONTINUE;
  8. }
  9. extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  10. FuzzedDataProvider fdp(data, size);
  11. json_object *jso = json_tokener_parse(fdp.ConsumeRandomLengthString(20).c_str());
  12. json_object_get_boolean(jso);
  13. json_object_get_double(jso);
  14. json_object_get_int(jso);
  15. json_object_get_int64(jso);
  16. json_object_get_uint64(jso);
  17. json_object_get_string(jso);
  18. json_object_get_string_len(jso);
  19. json_object_get_object(jso);
  20. json_object_get_array(jso);
  21. json_object_get_type(jso);
  22. json_c_visit(jso, 0, emit_object, NULL);
  23. json_object_set_int(jso, fdp.ConsumeIntegral<int>());
  24. json_object_set_int64(jso, fdp.ConsumeIntegral<int64_t>());
  25. json_object_set_uint64(jso, fdp.ConsumeIntegral<uint64_t>());
  26. json_object_set_double(jso, fdp.ConsumeFloatingPoint<double>());
  27. json_object_set_string(jso, fdp.ConsumeRandomLengthString(10).c_str());
  28. json_object_set_boolean(jso, fdp.ConsumeBool());
  29. std::string str = fdp.ConsumeRandomLengthString(10);
  30. json_object_set_string_len(jso, str.c_str(), str.size());
  31. json_object *dst = NULL;
  32. json_object_deep_copy(jso, &dst, json_c_shallow_copy_default);
  33. json_object_put(dst);
  34. json_object_put(jso);
  35. return 0;
  36. }