fat                                      Mon, 18 Jul 2011 21:03:44 +0000

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

Log:
fix a segfault when passing an empty value to a ini parameter from the web 
server (php_(admin_)?value)

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

Modified: php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_main.c
===================================================================
--- php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_main.c        2011-07-18 
21:00:59 UTC (rev 313404)
+++ php/php-src/branches/PHP_5_3/sapi/fpm/fpm/fpm_main.c        2011-07-18 
21:03:44 UTC (rev 313405)
@@ -1430,22 +1430,28 @@
 static void fastcgi_ini_parser(zval *arg1, zval *arg2, zval *arg3, int 
callback_type, void *arg TSRMLS_DC) /* {{{ */
 {
        int *mode = (int *)arg;
-       char *key = Z_STRVAL_P(arg1);
-       char *value = Z_STRVAL_P(arg2);
+       char *key;
+       char *value = NULL;
        struct key_value_s kv;

-       if (!mode) return;
+       if (!mode || !arg1) return;

        if (callback_type != ZEND_INI_PARSER_ENTRY) {
                fprintf(stderr, "Passing INI directive through FastCGI: only 
classic entries are allowed\n");
                return;
        }

+       key = Z_STRVAL_P(arg1);
+
        if (!key || strlen(key) < 1) {
                fprintf(stderr, "Passing INI directive through FastCGI: empty 
key\n");
                return;
        }

+       if (arg2) {
+               value = Z_STRVAL_P(arg2);
+       }
+
        if (!value) {
                fprintf(stderr, "Passing INI directive through FastCGI: empty 
value for key '%s'\n", key);
                return;

Modified: php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_main.c
===================================================================
--- php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_main.c        2011-07-18 
21:00:59 UTC (rev 313404)
+++ php/php-src/branches/PHP_5_4/sapi/fpm/fpm/fpm_main.c        2011-07-18 
21:03:44 UTC (rev 313405)
@@ -1327,22 +1327,28 @@
 static void fastcgi_ini_parser(zval *arg1, zval *arg2, zval *arg3, int 
callback_type, void *arg TSRMLS_DC) /* {{{ */
 {
        int *mode = (int *)arg;
-       char *key = Z_STRVAL_P(arg1);
-       char *value = Z_STRVAL_P(arg2);
+       char *key;
+       char *value = NULL;
        struct key_value_s kv;

-       if (!mode) return;
+       if (!mode || !arg1) return;

        if (callback_type != ZEND_INI_PARSER_ENTRY) {
                zlog(ZLOG_ERROR, "Passing INI directive through FastCGI: only 
classic entries are allowed");
                return;
        }

+       key = Z_STRVAL_P(arg1);
+
        if (!key || strlen(key) < 1) {
                zlog(ZLOG_ERROR, "Passing INI directive through FastCGI: empty 
key");
                return;
        }

+       if (arg2) {
+               value = Z_STRVAL_P(arg2);
+       }
+
        if (!value) {
                zlog(ZLOG_ERROR, "Passing INI directive through FastCGI: empty 
value for key '%s'", key);
                return;

Modified: php/php-src/trunk/sapi/fpm/fpm/fpm_main.c
===================================================================
--- php/php-src/trunk/sapi/fpm/fpm/fpm_main.c   2011-07-18 21:00:59 UTC (rev 
313404)
+++ php/php-src/trunk/sapi/fpm/fpm/fpm_main.c   2011-07-18 21:03:44 UTC (rev 
313405)
@@ -1327,22 +1327,28 @@
 static void fastcgi_ini_parser(zval *arg1, zval *arg2, zval *arg3, int 
callback_type, void *arg TSRMLS_DC) /* {{{ */
 {
        int *mode = (int *)arg;
-       char *key = Z_STRVAL_P(arg1);
-       char *value = Z_STRVAL_P(arg2);
+       char *key;
+       char *value = NULL;
        struct key_value_s kv;

-       if (!mode) return;
+       if (!mode || !arg1) return;

        if (callback_type != ZEND_INI_PARSER_ENTRY) {
                zlog(ZLOG_ERROR, "Passing INI directive through FastCGI: only 
classic entries are allowed");
                return;
        }

+       key = Z_STRVAL_P(arg1);
+
        if (!key || strlen(key) < 1) {
                zlog(ZLOG_ERROR, "Passing INI directive through FastCGI: empty 
key");
                return;
        }

+       if (arg2) {
+               value = Z_STRVAL_P(arg2);
+       }
+
        if (!value) {
                zlog(ZLOG_ERROR, "Passing INI directive through FastCGI: empty 
value for key '%s'", key);
                return;

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

Reply via email to