fuzz_parse_msg.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "../config.h"
  2. #include "../parser/sdp/sdp.h"
  3. #include "../parser/parse_uri.c"
  4. #include "../parser/parse_hname2.h"
  5. #include "../parser/contact/parse_contact.h"
  6. #include "../parser/parse_from.h"
  7. #include "../parser/parse_to.h"
  8. #include "../parser/parse_rr.h"
  9. #include "../parser/parse_refer_to.h"
  10. #include "../parser/parse_ppi_pai.h"
  11. #include "../parser/parse_privacy.h"
  12. #include "../parser/parse_diversion.h"
  13. #include "../parser/parse_identityinfo.h"
  14. #include "../parser/parse_disposition.h"
  15. int LLVMFuzzerInitialize(int *argc, char ***argv) {
  16. ksr_hname_init_index();
  17. return 0;
  18. }
  19. int
  20. LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
  21. sip_msg_t orig_inv = { };
  22. orig_inv.buf = (char*)data;
  23. orig_inv.len = size;
  24. if(size >= 4*BUF_SIZE) {
  25. /* test with larger message than core accepts, but not indefinitely large */
  26. return 0;
  27. }
  28. if (parse_msg(orig_inv.buf, orig_inv.len, &orig_inv) < 0) {
  29. goto cleanup;
  30. }
  31. parse_headers(&orig_inv, HDR_EOH_F, 0);
  32. parse_sdp(&orig_inv);
  33. parse_from_header(&orig_inv);
  34. parse_from_uri(&orig_inv);
  35. parse_to_header(&orig_inv);
  36. parse_to_uri(&orig_inv);
  37. parse_contact_headers(&orig_inv);
  38. parse_refer_to_header(&orig_inv);
  39. parse_pai_header(&orig_inv);
  40. parse_diversion_header(&orig_inv);
  41. parse_privacy(&orig_inv);
  42. parse_content_disposition(&orig_inv);
  43. parse_identityinfo_header(&orig_inv);
  44. parse_record_route_headers(&orig_inv);
  45. parse_route_headers(&orig_inv);
  46. str uri;
  47. get_src_uri(&orig_inv, 0, &uri);
  48. str ssock;
  49. get_src_address_socket(&orig_inv, &ssock);
  50. cleanup:
  51. free_sip_msg(&orig_inv);
  52. return 0;
  53. }