diff --git a/NEWS b/NEWS index fcddfd00061..e5a6e3767fc 100644 --- a/NEWS +++ b/NEWS @@ -10,6 +10,9 @@ PHP NEWS - Curl: . Fixed bug GH-14307 (Test curl_basic_024 fails with curl 8.8.0). (nielsdos) +- DOM: + . Fixed bug GH-14343 (Memory leak in xml and dom). (nielsdos) + - Opcache: . Fixed bug GH-14267 (opcache.jit=off does not allow enabling JIT at runtime). (ilutov) diff --git a/ext/dom/document.c b/ext/dom/document.c index 831f01b87b2..1b0bfda7f6e 100644 --- a/ext/dom/document.c +++ b/ext/dom/document.c @@ -813,8 +813,13 @@ PHP_METHOD(DOMDocument, importNode) if (nsptr == NULL || nsptr->prefix == NULL) { int errorcode; nsptr = dom_get_ns(root, (char *) nodep->ns->href, &errorcode, (char *) nodep->ns->prefix); + + /* If there is no root, the namespace cannot be attached to it, so we have to attach it to the old list. */ + if (nsptr != NULL && root == NULL) { + dom_set_old_ns(nodep->doc, nsptr); + } } - xmlSetNs(retnodep, nsptr); + retnodep->ns = nsptr; } } diff --git a/ext/dom/tests/gh14343.phpt b/ext/dom/tests/gh14343.phpt new file mode 100644 index 00000000000..7cece29f4cd --- /dev/null +++ b/ext/dom/tests/gh14343.phpt @@ -0,0 +1,15 @@ +--TEST-- +GH-14343 (Memory leak in xml and dom) +--EXTENSIONS-- +dom +--FILE-- +loadXML(''); +$attr= $fromdom->firstChild->attributes->item(0); +$att = $aDOM->importNode($attr); +echo $aDOM->saveXML($att); +?> +--EXPECT-- + ai:attr="namespaced" diff --git a/ext/soap/php_http.c b/ext/soap/php_http.c index f60f8b21caa..03db4ac4370 100644 --- a/ext/soap/php_http.c +++ b/ext/soap/php_http.c @@ -1256,14 +1256,16 @@ try_again: zval retval; zval params[1]; + /* Warning: the zlib function names are chosen in an unfortunate manner. + * Check zlib.c to see how a function corresponds with a particular format. */ if ((strcmp(content_encoding,"gzip") == 0 || strcmp(content_encoding,"x-gzip") == 0) && - zend_hash_str_exists(EG(function_table), "gzuncompress", sizeof("gzuncompress")-1)) { - ZVAL_STRING(&func, "gzuncompress"); + zend_hash_str_exists(EG(function_table), "gzdecode", sizeof("gzdecode")-1)) { + ZVAL_STRING(&func, "gzdecode"); ZVAL_STR_COPY(¶ms[0], http_body); } else if (strcmp(content_encoding,"deflate") == 0 && - zend_hash_str_exists(EG(function_table), "gzinflate", sizeof("gzinflate")-1)) { - ZVAL_STRING(&func, "gzinflate"); + zend_hash_str_exists(EG(function_table), "gzuncompress", sizeof("gzuncompress")-1)) { + ZVAL_STRING(&func, "gzuncompress"); ZVAL_STR_COPY(¶ms[0], http_body); } else { efree(content_encoding); diff --git a/ext/soap/tests/bugs/bug47925.phpt b/ext/soap/tests/bugs/bug47925.phpt index ce14c7f4676..ab7881d4abe 100644 --- a/ext/soap/tests/bugs/bug47925.phpt +++ b/ext/soap/tests/bugs/bug47925.phpt @@ -32,8 +32,8 @@ function test($compressed_response, $compression_name) { http_server_kill($pid); } -test(gzcompress($plain_response), "gzip"); -test(gzdeflate($plain_response), "deflate"); +test(gzencode($plain_response), "gzip"); +test(gzcompress($plain_response), "deflate"); ?> --EXPECT-- int(7)