Hi,

Recently we performed failure testing on libxml, that is we simulated malloc
failures to see how libxml behaved in that scenario. As a result of the
testing we found a number of memory leaks and some crashes. Something like
the following in function xmlNewBlanksWrapperInputStream

 

Snippet of the code

input = xmlNewInputStream(ctxt);

    if (input == NULL) {

       return(NULL);

    }

    length = xmlStrlen(entity->name) + 5;

    buffer = xmlMallocAtomic(length);

    if (buffer == NULL) {

       xmlErrMemory(ctxt, NULL);

    return(NULL);

}

Here I believe if the malloc fails for buffer, there will be a memleak for
input..

 

Or another example in function xmlParseEntityDecl-

if ((ctxt->myDoc == NULL) ||

            (xmlStrEqual(ctxt->myDoc->version, SAX_COMPAT_MODE))) {

            if (ctxt->myDoc == NULL) {

               ctxt->myDoc = xmlNewDoc(SAX_COMPAT_MODE);

            }

            if (ctxt->myDoc->intSubset == NULL)

               ctxt->myDoc->intSubset = xmlNewDtd(ctxt->myDoc, 

 

If malloc fails inside xmlNewDoc, there will be a crash on the subsequent
line. 

          There are other similar problems, so I was wondering if there is
an assumption that malloc failure will not occur since it is a rare
occurrence. Or does corrective action need to be taken wherever it occurs in
the failure path. 

 

Thanks in advance!!

 

Regards

Ashwin

 

 

 

_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml

Reply via email to