From bdaa1fe47fed3aed51acf5182a3fc69ed6b5fb65 Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Tue, 20 May 2008 15:03:13 +0000 Subject: [PATCH] make sure that converters are not equal to utf8 & ascii before destroying them, or we may end up with double free --- Zend/zend.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/Zend/zend.c b/Zend/zend.c index 54c889ba2e..3aee2296c0 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -1004,19 +1004,29 @@ static void unicode_globals_dtor(zend_unicode_globals *unicode_globals TSRMLS_DC if (unicode_globals->root_search) { usearch_close(unicode_globals->root_search); } - if (unicode_globals->fallback_encoding_conv) { + if (unicode_globals->fallback_encoding_conv && + unicode_globals->fallback_encoding_conv != unicode_globals->utf8_conv && + unicode_globals->fallback_encoding_conv != unicode_globals->ascii_conv) { ucnv_close(unicode_globals->fallback_encoding_conv); } - if (unicode_globals->runtime_encoding_conv) { + if (unicode_globals->runtime_encoding_conv && + unicode_globals->runtime_encoding_conv != unicode_globals->utf8_conv && + unicode_globals->runtime_encoding_conv != unicode_globals->ascii_conv) { ucnv_close(unicode_globals->runtime_encoding_conv); } - if (unicode_globals->output_encoding_conv) { + if (unicode_globals->output_encoding_conv && + unicode_globals->output_encoding_conv != unicode_globals->utf8_conv && + unicode_globals->output_encoding_conv != unicode_globals->ascii_conv) { ucnv_close(unicode_globals->output_encoding_conv); } - if (unicode_globals->script_encoding_conv) { + if (unicode_globals->script_encoding_conv && + unicode_globals->script_encoding_conv != unicode_globals->utf8_conv && + unicode_globals->script_encoding_conv != unicode_globals->ascii_conv) { ucnv_close(unicode_globals->script_encoding_conv); } - if (unicode_globals->http_input_encoding_conv) { + if (unicode_globals->http_input_encoding_conv && + unicode_globals->http_input_encoding_conv != unicode_globals->utf8_conv && + unicode_globals->http_input_encoding_conv != unicode_globals->ascii_conv) { ucnv_close(unicode_globals->http_input_encoding_conv); } if (unicode_globals->utf8_conv) { -- 2.50.1