From c661218c802490865d7c12382f878ef0f70619bf Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Thu, 18 Jul 2024 15:23:30 +0200 Subject: [PATCH] Avoid duplicating the filename string when profiling in XSL --- ext/xsl/php_xsl.h | 2 +- ext/xsl/xsltprocessor.c | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/ext/xsl/php_xsl.h b/ext/xsl/php_xsl.h index 379274a5916fd..36bd9cc728444 100644 --- a/ext/xsl/php_xsl.h +++ b/ext/xsl/php_xsl.h @@ -60,7 +60,7 @@ typedef struct xsl_object { zend_long securityPrefs; php_dom_xpath_callbacks xpath_callbacks; php_libxml_node_object *doc; - char *profiling; + zend_string *profiling; zend_object std; } xsl_object; diff --git a/ext/xsl/xsltprocessor.c b/ext/xsl/xsltprocessor.c index 3ad528aa53870..2305c1bf2b8fc 100644 --- a/ext/xsl/xsltprocessor.c +++ b/ext/xsl/xsltprocessor.c @@ -317,10 +317,10 @@ static xmlDocPtr php_xsl_apply_stylesheet(zval *id, xsl_object *intern, xsltStyl } if (intern->profiling) { - if (php_check_open_basedir(intern->profiling)) { + if (php_check_open_basedir(ZSTR_VAL(intern->profiling))) { f = NULL; } else { - f = VCWD_FOPEN(intern->profiling, "w"); + f = VCWD_FOPEN(ZSTR_VAL(intern->profiling), "w"); } } else { f = NULL; @@ -727,19 +727,18 @@ PHP_METHOD(XSLTProcessor, setProfiling) { zval *id = ZEND_THIS; xsl_object *intern; - char *filename = NULL; - size_t filename_len; + zend_string *filename = NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS(), "p!", &filename, &filename_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS(), "P!", &filename) == FAILURE) { RETURN_THROWS(); } intern = Z_XSL_P(id); if (intern->profiling) { - efree(intern->profiling); + zend_string_release(intern->profiling); } if (filename != NULL) { - intern->profiling = estrndup(filename, filename_len); + intern->profiling = zend_string_copy(filename); } else { intern->profiling = NULL; }