]> granicus.if.org Git - php/commitdiff
Fix #67594 - invisible colon should be stripped off header name
authorTjerk Meesters <datibbaw@php.net>
Sat, 12 Jul 2014 04:45:50 +0000 (12:45 +0800)
committerTjerk Meesters <datibbaw@php.net>
Sat, 12 Jul 2014 04:45:50 +0000 (12:45 +0800)
sapi/cli/php_cli_server.c

index 15b4f29bf3ee6e592cda16c0d30f8e1ece9b8d52..6cefa2de9f93e6d01c3c99337564c53ba155dc42 100644 (file)
@@ -1685,10 +1685,14 @@ static int php_cli_server_client_read_request_on_header_value(php_http_parser *p
                return 1;
        }
        {
-               char *header_name = zend_str_tolower_dup(client->current_header_name, client->current_header_name_len);
-               zend_hash_add(&client->request.headers, header_name, client->current_header_name_len + 1, &value, sizeof(char *), NULL);
-               zend_hash_add(&client->request.headers_original_case, client->current_header_name, client->current_header_name_len + 1, &value, sizeof(char *), NULL);
-               efree(header_name);
+               /* strip off the colon */
+               char *orig_header_name = estrndup(client->current_header_name, client->current_header_name_len);
+               char *lc_header_name = zend_str_tolower_dup(client->current_header_name, client->current_header_name_len);
+
+               zend_hash_add(&client->request.headers, lc_header_name, client->current_header_name_len + 1, &value, sizeof(char *), NULL);
+               zend_hash_add(&client->request.headers_original_case, orig_header_name, client->current_header_name_len + 1, &value, sizeof(char *), NULL);
+               efree(lc_header_name);
+               efree(orig_header_name);
        }
 
        if (client->current_header_name_allocated) {