summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjvoisin2026-04-24 11:50:40 +0200
committerjvoisin2026-04-24 11:50:40 +0200
commit36179282f5f52a7e54be34964b4afd4fd0194e4f (patch)
treef4965705ad99e339efb3e33cf5d5462519acd653
parent56447f425f0fa241e0005df0e620bda97eb06340 (diff)
Fix a memory leak in sp_log_disable/sp_log_disable_ret
php_raw_url_encode returned a new zend_string, but the old arg_value_dup is never released. Also arg_value_dup was reassigned, leaking the initial zend_string_init allocation.
-rw-r--r--src/sp_utils.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/sp_utils.c b/src/sp_utils.c
index d49d459..e6efcc6 100644
--- a/src/sp_utils.c
+++ b/src/sp_utils.c
@@ -315,11 +315,11 @@ void sp_log_disable(const char* restrict path, const char* restrict arg_name,
315 if (arg_name) { 315 if (arg_name) {
316 char* char_repr = NULL; 316 char* char_repr = NULL;
317 if (arg_value) { 317 if (arg_value) {
318 zend_string *arg_value_dup = zend_string_init(ZSTR_VAL(arg_value), ZSTR_LEN(arg_value), 0); 318 zend_string *arg_value_enc = php_raw_url_encode(ZSTR_VAL(arg_value), ZSTR_LEN(arg_value));
319 arg_value_dup = php_raw_url_encode(ZSTR_VAL(arg_value_dup), ZSTR_LEN(arg_value_dup)); 319 char_repr = zend_string_to_char(arg_value_enc);
320 char_repr = zend_string_to_char(arg_value_dup); 320 size_t max_len = MIN(ZSTR_LEN(arg_value_enc), (size_t)SPCFG(log_max_len));
321 size_t max_len = MIN(ZSTR_LEN(arg_value_dup), (size_t)SPCFG(log_max_len));
322 char_repr[max_len] = '\0'; 321 char_repr[max_len] = '\0';
322 zend_string_release(arg_value_enc);
323 } 323 }
324 if (alias) { 324 if (alias) {
325 sp_log_auto( 325 sp_log_auto(
@@ -359,11 +359,11 @@ void sp_log_disable_ret(const char* restrict path,
359 sp_log_request(dump, config_node->textual_representation); 359 sp_log_request(dump, config_node->textual_representation);
360 } 360 }
361 if (ret_value) { 361 if (ret_value) {
362 zend_string *ret_value_dup = zend_string_init(ZSTR_VAL(ret_value), ZSTR_LEN(ret_value), 0); 362 zend_string *ret_value_enc = php_raw_url_encode(ZSTR_VAL(ret_value), ZSTR_LEN(ret_value));
363 ret_value_dup = php_raw_url_encode(ZSTR_VAL(ret_value_dup), ZSTR_LEN(ret_value_dup)); 363 char_repr = zend_string_to_char(ret_value_enc);
364 char_repr = zend_string_to_char(ret_value_dup); 364 size_t max_len = MIN(ZSTR_LEN(ret_value_enc), (size_t)SPCFG(log_max_len));
365 size_t max_len = MIN(ZSTR_LEN(ret_value_dup), (size_t)SPCFG(log_max_len));
366 char_repr[max_len] = '\0'; 365 char_repr[max_len] = '\0';
366 zend_string_release(ret_value_enc);
367 } 367 }
368 if (alias) { 368 if (alias) {
369 sp_log_auto( 369 sp_log_auto(