diff options
| author | Xin LI <delphij@FreeBSD.org> | 2025-09-19 02:43:17 +0000 |
|---|---|---|
| committer | Xin LI <delphij@FreeBSD.org> | 2025-09-19 02:43:17 +0000 |
| commit | 627b778d9e6b603a44a010d22d823ca7c392b363 (patch) | |
| tree | 19f4a58bd43c351aa6ddd97650feccd520e9dbc2 /contrib/expat/fuzz/xml_parsebuffer_fuzzer.c | |
| parent | 4d6d5f5a21abc4abd715c63c0d99c82aaa3955c0 (diff) | |
| parent | 14feafd16d123e0c91b8b90998307d12b1347bb3 (diff) | |
Diffstat (limited to 'contrib/expat/fuzz/xml_parsebuffer_fuzzer.c')
| -rw-r--r-- | contrib/expat/fuzz/xml_parsebuffer_fuzzer.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/contrib/expat/fuzz/xml_parsebuffer_fuzzer.c b/contrib/expat/fuzz/xml_parsebuffer_fuzzer.c index cfc4af202851..38b9981b0b50 100644 --- a/contrib/expat/fuzz/xml_parsebuffer_fuzzer.c +++ b/contrib/expat/fuzz/xml_parsebuffer_fuzzer.c @@ -15,6 +15,7 @@ */ #include <assert.h> +#include <limits.h> // for INT_MAX #include <stdint.h> #include <string.h> @@ -66,16 +67,17 @@ ParseOneInput(XML_Parser p, const uint8_t *data, size_t size) { XML_SetUserData(p, p); XML_SetElementHandler(p, start, end); XML_SetCharacterDataHandler(p, may_stop_character_handler); - void *buf = XML_GetBuffer(p, size); + assert(size <= INT_MAX); + void *buf = XML_GetBuffer(p, (int)size); assert(buf); memcpy(buf, data, size); - XML_ParseBuffer(p, size, 0); - buf = XML_GetBuffer(p, size); + XML_ParseBuffer(p, (int)size, 0); + buf = XML_GetBuffer(p, (int)size); if (buf == NULL) { return; } memcpy(buf, data, size); - if (XML_ParseBuffer(p, size, 1) == XML_STATUS_ERROR) { + if (XML_ParseBuffer(p, (int)size, 1) == XML_STATUS_ERROR) { XML_ErrorString(XML_GetErrorCode(p)); } XML_GetCurrentLineNumber(p); @@ -101,15 +103,17 @@ LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { XML_Parser externalEntityParser = XML_ExternalEntityParserCreate(parentParser, "e1", NULL); - assert(externalEntityParser); - ParseOneInput(externalEntityParser, data, size); - XML_ParserFree(externalEntityParser); + if (externalEntityParser != NULL) { + ParseOneInput(externalEntityParser, data, size); + XML_ParserFree(externalEntityParser); + } XML_Parser externalDtdParser = XML_ExternalEntityParserCreate(parentParser, NULL, NULL); - assert(externalDtdParser); - ParseOneInput(externalDtdParser, data, size); - XML_ParserFree(externalDtdParser); + if (externalDtdParser != NULL) { + ParseOneInput(externalDtdParser, data, size); + XML_ParserFree(externalDtdParser); + } // finally frees this parser which served as parent XML_ParserFree(parentParser); |
