diff --git a/Zend/zend_portability.h b/Zend/zend_portability.h index f4609428326c7..22bba1eaf4152 100644 --- a/Zend/zend_portability.h +++ b/Zend/zend_portability.h @@ -733,8 +733,11 @@ extern "C++" { #endif #if defined(ZEND_WIN32) && defined(_DEBUG) -# define ZEND_IGNORE_LEAKS_BEGIN() _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) & ~_CRTDBG_ALLOC_MEM_DF) -# define ZEND_IGNORE_LEAKS_END() _CrtSetDbgFlag(_CrtSetDbgFlag(_CRTDBG_REPORT_FLAG) | _CRTDBG_ALLOC_MEM_DF) +# define ZEND_IGNORE_LEAKS_BEGIN() \ + int zend_crtDbgFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG); \ + _CrtSetDbgFlag(zend_crtDbgFlag & ~_CRTDBG_ALLOC_MEM_DF) +# define ZEND_IGNORE_LEAKS_END() \ + _CrtSetDbgFlag(zend_crtDbgFlag) #else # define ZEND_IGNORE_LEAKS_BEGIN() # define ZEND_IGNORE_LEAKS_END() diff --git a/ext/dom/document.c b/ext/dom/document.c index ba5e7dab3d844..e4571ab2e6a5f 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -1917,7 +1917,9 @@ static void dom_document_schema_validate(INTERNAL_FUNCTION_PARAMETERS, int type) (xmlSchemaValidityErrorFunc) php_libxml_error_handler, (xmlSchemaValidityWarningFunc) php_libxml_error_handler, parser); + ZEND_IGNORE_LEAKS_BEGIN(); sptr = xmlSchemaParse(parser); + ZEND_IGNORE_LEAKS_END(); xmlSchemaFreeParserCtxt(parser); PHP_LIBXML_RESTORE_GLOBALS(new_parser_ctxt); if (!sptr) { @@ -2023,7 +2025,9 @@ static void dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAMETERS, int type (xmlRelaxNGValidityErrorFunc) php_libxml_error_handler, (xmlRelaxNGValidityWarningFunc) php_libxml_error_handler, parser); + ZEND_IGNORE_LEAKS_BEGIN(); sptr = xmlRelaxNGParse(parser); + ZEND_IGNORE_LEAKS_END(); xmlRelaxNGFreeParserCtxt(parser); PHP_LIBXML_RESTORE_GLOBALS(parse); if (!sptr) { diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c index a72aad5038de0..998f8d2ad2cf3 100644 --- a/ext/libxml/libxml.c +++ b/ext/libxml/libxml.c @@ -721,7 +721,10 @@ static xmlParserInputPtr _php_libxml_external_entity_loader(const char *URL, /* no custom user-land callback set up; delegate to original loader */ if (!ZEND_FCC_INITIALIZED(LIBXML(entity_loader_callback))) { - return _php_libxml_default_entity_loader(URL, ID, context); + ZEND_IGNORE_LEAKS_BEGIN(); + ret = _php_libxml_default_entity_loader(URL, ID, context); + ZEND_IGNORE_LEAKS_END(); + return ret; } if (ID != NULL) { diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c index de19695baa51f..e1e93797a74d5 100644 --- a/ext/xmlreader/php_xmlreader.c +++ b/ext/xmlreader/php_xmlreader.c @@ -334,7 +334,10 @@ static xmlRelaxNGPtr _xmlreader_get_relaxNG(char *source, size_t source_len, siz (xmlRelaxNGValidityWarningFunc) warn_func, parser); } + ZEND_IGNORE_LEAKS_BEGIN(); sptr = xmlRelaxNGParse(parser); + ZEND_IGNORE_LEAKS_END(); + xmlRelaxNGFreeParserCtxt(parser); PHP_LIBXML_RESTORE_GLOBALS(parse); @@ -1082,7 +1085,9 @@ PHP_METHOD(XMLReader, setSchema) intern = Z_XMLREADER_P(id); if (intern && intern->ptr) { PHP_LIBXML_SANITIZE_GLOBALS(schema); + ZEND_IGNORE_LEAKS_BEGIN(); retval = xmlTextReaderSchemaValidate(intern->ptr, source); + ZEND_IGNORE_LEAKS_END(); PHP_LIBXML_RESTORE_GLOBALS(schema); if (retval == 0) {