@ 261102.1

260311.1 · b6a9e260cd1c76d795a1a85f2ccfd38f783dc79a

fix jq_fuzz_parse_stream: use iterative parser API for streaming mode (#3499)

reading declarations

Changes to tests/jq_fuzz_parse_stream.c. All files

tests/jq_fuzz_parse_stream.c

@@ -5,15 +5,27 @@ #include "jv.h"  int LLVMFuzzerTestOneInput(uint8_t *data, size_t size) {-  // Creat null-terminated string+  // Create null-terminated string   char *null_terminated = (char *)malloc(size + 1);   memcpy(null_terminated, (char *)data, size);   null_terminated[size] = '\0'; -  // Fuzzer entrypoint-  jv res = jv_parse_custom_flags(null_terminated, JV_PARSE_STREAMING);-  jv_free(res);-  +  // Use the iterative jv_parser API for streaming mode.+  // The single-shot jv_parse_custom_flags() returns "Unexpected extra JSON+  // values" for any compound JSON in streaming mode, because the streaming+  // parser produces multiple tokens but the single-shot API expects exactly+  // one value.+  jv_parser *parser = jv_parser_new(JV_PARSE_STREAMING);+  jv_parser_set_buf(parser, null_terminated, (int)size, 0);++  jv value;+  while (jv_is_valid(value = jv_parser_next(parser))) {+    jv_free(value);+  }+  jv_free(value);++  jv_parser_free(parser);+   // Free the null-terminated string   free(null_terminated);