fat                                      Tue, 05 Jul 2011 01:43:50 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=312923

Log:
Fixed memory leak

Changed paths:
    U   php/php-src/branches/PHP_5_3/NEWS
    U   php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_conf.c
    U   php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_conf.c
    U   php/php-src/trunk/sapi/fpm/fpm/fpm_conf.c

Modified: php/php-src/branches/PHP_5_3/NEWS
===================================================================
--- php/php-src/branches/PHP_5_3/NEWS   2011-07-05 01:24:10 UTC (rev 312922)
+++ php/php-src/branches/PHP_5_3/NEWS   2011-07-05 01:43:50 UTC (rev 312923)
@@ -31,6 +31,7 @@
   . Implemented FR #54172 (Overriding the pid file location of php-fpm). (fat)
   . Fixed missing Expires and Cache-Control headers for ping and status pages.
     (fat)
+  . Fixed memory leak. (fat) Reported and fixed by Giovanni Giacobbi.

 - SPL extension:
   . Fixed bug #54971 (Wrong result when using iterator_to_array with use_keys

Modified: php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_conf.c
===================================================================
--- php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_conf.c        2011-07-05 
01:24:10 UTC (rev 312922)
+++ php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_conf.c        2011-07-05 
01:43:50 UTC (rev 312923)
@@ -123,6 +123,9 @@
 }
 /* }}} */

+/*
+ * Expands the '$pool' token in a dynamically allocated string
+ */
 static int fpm_conf_expand_pool_name(char **value) {
        char *token;

@@ -130,15 +133,23 @@
                return 0;
        }

-       while ((token = strstr(*value, "$pool"))) {
+       while (*value && (token = strstr(*value, "$pool"))) {
                char *buf;
-               char *p1 = *value;
                char *p2 = token + strlen("$pool");
+
+               /* If we are not in a pool, we cannot expand this name now */
                if (!current_wp || !current_wp->config  || 
!current_wp->config->name) {
                        return -1;
                }
+
+               /* "aaa$poolbbb" becomes "aaa\0oolbbb" */
                token[0] = '\0';
-               spprintf(&buf, 0, "%s%s%s", p1, current_wp->config->name, p2);
+
+               /* Build a brand new string with the expanded token */
+               spprintf(&buf, 0, "%s%s%s", *value, current_wp->config->name, 
p2);
+
+               /* Free the previous value and save the new one */
+               free(*value);
                *value = strdup(buf);
                efree(buf);
        }

Modified: php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_conf.c
===================================================================
--- php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_conf.c        2011-07-05 
01:24:10 UTC (rev 312922)
+++ php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_conf.c        2011-07-05 
01:43:50 UTC (rev 312923)
@@ -123,6 +123,9 @@
 }
 /* }}} */

+/*
+ * Expands the '$pool' token in a dynamically allocated string
+ */
 static int fpm_conf_expand_pool_name(char **value) {
        char *token;

@@ -130,15 +133,23 @@
                return 0;
        }

-       while ((token = strstr(*value, "$pool"))) {
+       while (*value && (token = strstr(*value, "$pool"))) {
                char *buf;
-               char *p1 = *value;
                char *p2 = token + strlen("$pool");
+
+               /* If we are not in a pool, we cannot expand this name now */
                if (!current_wp || !current_wp->config  || 
!current_wp->config->name) {
                        return -1;
                }
+
+               /* "aaa$poolbbb" becomes "aaa\0oolbbb" */
                token[0] = '\0';
-               spprintf(&buf, 0, "%s%s%s", p1, current_wp->config->name, p2);
+
+               /* Build a brand new string with the expanded token */
+               spprintf(&buf, 0, "%s%s%s", *value, current_wp->config->name, 
p2);
+
+               /* Free the previous value and save the new one */
+               free(*value);
                *value = strdup(buf);
                efree(buf);
        }

Modified: php/php-src/trunk/sapi/fpm/fpm/fpm_conf.c
===================================================================
--- php/php-src/trunk/sapi/fpm/fpm/fpm_conf.c   2011-07-05 01:24:10 UTC (rev 
312922)
+++ php/php-src/trunk/sapi/fpm/fpm/fpm_conf.c   2011-07-05 01:43:50 UTC (rev 
312923)
@@ -123,6 +123,9 @@
 }
 /* }}} */

+/*
+ * Expands the '$pool' token in a dynamically allocated string
+ */
 static int fpm_conf_expand_pool_name(char **value) {
        char *token;

@@ -130,15 +133,23 @@
                return 0;
        }

-       while ((token = strstr(*value, "$pool"))) {
+       while (*value && (token = strstr(*value, "$pool"))) {
                char *buf;
-               char *p1 = *value;
                char *p2 = token + strlen("$pool");
+
+               /* If we are not in a pool, we cannot expand this name now */
                if (!current_wp || !current_wp->config  || 
!current_wp->config->name) {
                        return -1;
                }
+
+               /* "aaa$poolbbb" becomes "aaa\0oolbbb" */
                token[0] = '\0';
-               spprintf(&buf, 0, "%s%s%s", p1, current_wp->config->name, p2);
+
+               /* Build a brand new string with the expanded token */
+               spprintf(&buf, 0, "%s%s%s", *value, current_wp->config->name, 
p2);
+
+               /* Free the previous value and save the new one */
+               free(*value);
                *value = strdup(buf);
                efree(buf);
        }

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to