]> granicus.if.org Git - php/commitdiff
Fixed memory leak
authorJérôme Loyet <fat@php.net>
Tue, 5 Jul 2011 01:43:50 +0000 (01:43 +0000)
committerJérôme Loyet <fat@php.net>
Tue, 5 Jul 2011 01:43:50 +0000 (01:43 +0000)
sapi/fpm/fpm/fpm_conf.c

index cc7baea31e7e485299cd2c05f7bc507182a6c20b..9e52c794496a9fa17fd012a535859d6c7ed3b6b7 100644 (file)
@@ -123,6 +123,9 @@ static int fpm_conf_is_dir(char *path) /* {{{ */
 }
 /* }}} */
 
+/*
+ * Expands the '$pool' token in a dynamically allocated string
+ */
 static int fpm_conf_expand_pool_name(char **value) {
        char *token;
 
@@ -130,15 +133,23 @@ static int fpm_conf_expand_pool_name(char **value) {
                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);
        }