fuzz.cc 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include <cassert>
  2. #include <iostream>
  3. #include <vector>
  4. #include <string>
  5. #include <set>
  6. #include "dinit.h"
  7. #include "service.h"
  8. #include "baseproc-sys.h"
  9. #include "control.h"
  10. // Control protocol fuzzing.
  11. extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size)
  12. {
  13. if (Size == 0) return 0;
  14. service_set sset;
  15. service_record *s1 = new service_record(&sset, "test-service-1", service_type_t::INTERNAL, {});
  16. sset.add_service(s1);
  17. service_record *s2 = new service_record(&sset, "test-service-2", service_type_t::INTERNAL, {});
  18. sset.add_service(s2);
  19. service_record *s3 = new service_record(&sset, "test-service-3", service_type_t::INTERNAL, {});
  20. sset.add_service(s3);
  21. int fd = bp_sys::allocfd();
  22. auto *cc = new control_conn_t(event_loop, &sset, fd);
  23. std::vector<char> input_data(Data, Data + Size);
  24. bp_sys::supply_read_data(fd, std::move(input_data));
  25. event_loop.regd_bidi_watchers[fd]->read_ready(event_loop, fd);
  26. // Write will process immediately, so there's no need for this:
  27. //event_loop.regd_bidi_watchers[fd]->write_ready(event_loop, fd);
  28. delete cc;
  29. return 0;
  30. }