mirror of
				https://gitlab.gnome.org/GNOME/libxml2.git
				synced 2025-10-30 10:45:36 +03:00 
			
		
		
		
	- Add more calls to xmlInitializeCatalog. - Call xmlResetLastError after fuzzing each input.
		
			
				
	
	
		
			53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * xpath.c: a libFuzzer target to test XPath and XPointer expressions.
 | |
|  *
 | |
|  * See Copyright for the status of this software.
 | |
|  */
 | |
| 
 | |
| #include <libxml/parser.h>
 | |
| #include <libxml/xpointer.h>
 | |
| #include "fuzz.h"
 | |
| 
 | |
| int
 | |
| LLVMFuzzerInitialize(int *argc ATTRIBUTE_UNUSED,
 | |
|                      char ***argv ATTRIBUTE_UNUSED) {
 | |
|     xmlInitParser();
 | |
|     xmlSetGenericErrorFunc(NULL, xmlFuzzErrorFunc);
 | |
| 
 | |
|     return 0;
 | |
| }
 | |
| 
 | |
| int
 | |
| LLVMFuzzerTestOneInput(const char *data, size_t size) {
 | |
|     xmlDocPtr doc;
 | |
|     const char *expr, *xml;
 | |
|     size_t exprSize, xmlSize;
 | |
| 
 | |
|     if (size > 10000)
 | |
|         return(0);
 | |
| 
 | |
|     xmlFuzzDataInit(data, size);
 | |
| 
 | |
|     expr = xmlFuzzReadString(&exprSize);
 | |
|     xml = xmlFuzzReadString(&xmlSize);
 | |
| 
 | |
|     /* Recovery mode allows more input to be fuzzed. */
 | |
|     doc = xmlReadMemory(xml, xmlSize, NULL, NULL, XML_PARSE_RECOVER);
 | |
|     if (doc != NULL) {
 | |
|         xmlXPathContextPtr xpctxt = xmlXPathNewContext(doc);
 | |
| 
 | |
|         /* Operation limit to avoid timeout */
 | |
|         xpctxt->opLimit = 500000;
 | |
| 
 | |
|         xmlXPathFreeObject(xmlXPtrEval(BAD_CAST expr, xpctxt));
 | |
|         xmlXPathFreeContext(xpctxt);
 | |
|     }
 | |
|     xmlFreeDoc(doc);
 | |
| 
 | |
|     xmlFuzzDataCleanup();
 | |
|     xmlResetLastError();
 | |
| 
 | |
|     return(0);
 | |
| }
 | |
| 
 |