diff options
Diffstat (limited to 'ext/xml/compat.c')
-rw-r--r-- | ext/xml/compat.c | 30 |
1 files changed, 3 insertions, 27 deletions
diff --git a/ext/xml/compat.c b/ext/xml/compat.c index 85515df6aa..aab4a4f8be 100644 --- a/ext/xml/compat.c +++ b/ext/xml/compat.c @@ -291,42 +291,18 @@ XML_ParserCreateNS(const XML_Char *encoding, const XML_Char sep) return XML_ParserCreate_MM(encoding, NULL, tmp); } -static void *(*_expat_cpt_malloc_fcn)(size_t sz); - -static char *_expat_cpt_intn_strdup(const char *str) -{ - size_t len; - char *retval; - - len = strlen(str); - if ((retval = _expat_cpt_malloc_fcn(len + 1)) == NULL) { - return NULL; - } - memcpy(retval, str, len + 1); - - return retval; -} - XML_Parser XML_ParserCreate_MM(const XML_Char *encoding, const XML_Memory_Handling_Suite *memsuite, const XML_Char *sep) { XML_Parser parser; - static XML_Memory_Handling_Suite mtemp_i = { malloc, realloc, free }; - - if (memsuite == NULL) { - memsuite = &mtemp_i; - } - - _expat_cpt_malloc_fcn = memsuite->malloc_fcn; /* FIXME: not reentrant ! */ - - xmlMemSetup(memsuite->free_fcn, memsuite->malloc_fcn, memsuite->realloc_fcn, _expat_cpt_intn_strdup); /* WHOCANFIXME: not reentrant ! */ - parser = (XML_Parser) memsuite->malloc_fcn(sizeof(struct _XML_Parser)); + parser = (XML_Parser) emalloc(sizeof(struct _XML_Parser)); memset(parser, 0, sizeof(struct _XML_Parser)); parser->use_namespace = 0; parser->mem_hdlrs = *memsuite; parser->parser = xmlCreatePushParserCtxt((xmlSAXHandlerPtr) &php_xml_compat_handlers, (void *) parser, NULL, 0, NULL); if (parser->parser == NULL) { + efree(parser); return NULL; } if (encoding != NULL) { @@ -572,7 +548,7 @@ XML_ParserFree(XML_Parser parser) xmlHashFree(parser->_reverse_ns_map, _free_ns_name); } xmlFreeParserCtxt(parser->parser); - parser->mem_hdlrs.free_fcn(parser); + efree(parser); } #endif /* LIBXML_EXPAT_COMPAT */ |