mirror of
				https://gitlab.gnome.org/GNOME/libxml2.git
				synced 2025-10-26 00:37:43 +03:00 
			
		
		
		
	Fix memory leak in xmlParseElementMixedContentDecl
Free parsed content if malloc fails to avoid a memory leak. Found with libFuzzer.
This commit is contained in:
		
							
								
								
									
										10
									
								
								parser.c
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								parser.c
									
									
									
									
									
								
							| @@ -6082,14 +6082,20 @@ xmlParseElementMixedContentDecl(xmlParserCtxtPtr ctxt, int inputchk) { | |||||||
| 	    NEXT; | 	    NEXT; | ||||||
| 	    if (elem == NULL) { | 	    if (elem == NULL) { | ||||||
| 	        ret = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_OR); | 	        ret = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_OR); | ||||||
| 		if (ret == NULL) return(NULL); | 		if (ret == NULL) { | ||||||
|  | 		    xmlFreeDocElementContent(ctxt->myDoc, cur); | ||||||
|  |                     return(NULL); | ||||||
|  |                 } | ||||||
| 		ret->c1 = cur; | 		ret->c1 = cur; | ||||||
| 		if (cur != NULL) | 		if (cur != NULL) | ||||||
| 		    cur->parent = ret; | 		    cur->parent = ret; | ||||||
| 		cur = ret; | 		cur = ret; | ||||||
| 	    } else { | 	    } else { | ||||||
| 	        n = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_OR); | 	        n = xmlNewDocElementContent(ctxt->myDoc, NULL, XML_ELEMENT_CONTENT_OR); | ||||||
| 		if (n == NULL) return(NULL); | 		if (n == NULL) { | ||||||
|  | 		    xmlFreeDocElementContent(ctxt->myDoc, ret); | ||||||
|  |                     return(NULL); | ||||||
|  |                 } | ||||||
| 		n->c1 = xmlNewDocElementContent(ctxt->myDoc, elem, XML_ELEMENT_CONTENT_ELEMENT); | 		n->c1 = xmlNewDocElementContent(ctxt->myDoc, elem, XML_ELEMENT_CONTENT_ELEMENT); | ||||||
| 		if (n->c1 != NULL) | 		if (n->c1 != NULL) | ||||||
| 		    n->c1->parent = n; | 		    n->c1->parent = n; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user