Hi, I'm trying to validate an XML document after parsing it. The DTD is external, and resides somewhere in the memory (see attached source code). But when I call xmlIOParseDTD(), I get a segfault. I tracked down the error to xmlParseElementDecl(), line 4973 NEXT; if ((ctxt->sax != NULL) && (!ctxt->disableSAX) && (ctxt->sax->elementDecl != NULL)) ctxt->sax->elementDecl(ctxt->userData, name, ret, content); the reason is that userData is NULL, and elementDecl is a pointer to xmlSAX2ElementDecl(), which expects a xmlParserCtxtPtr. Because xmlIOParseDTD creates and handle its own xmlParserCtxt, I'm suspicious about the line 9954 in parser.c "ctxt->userData = NULL;" and it might have to be something like "ctxt->userData = ctxt;". Regards, Tanguy
Attachment:
main.cpp
Description: Text Data