Re: cvs: php-src(PHP_5_3) /ext/standard http_fopen_wrapper.c
| From: | Jani Taskinen | Date: | Sun, 06 Apr 2008 22:31:33 +0000 |
| Subject: | Re: cvs: php-src(PHP_5_3) /ext/standard http_fopen_wrapper.c | ||
| References: | 1 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-49505@lists.php.net to get a copy of this message | ||
Another patch you're making post-5.2.6? Why? Just make another RC and delay the release. Or is there some fix that has to be out right now? Security related that is..?
Short: Merge to PHP_5_2 please.
--Jani
Ilia Alshanetsky kirjoitti:
iliaa Sun Apr 6 15:21:24 2008 UTCModified files: (Branch: PHP_5_3) /php-src/ext/standard http_fopen_wrapper.c Log:Fixed bug #44603 (Order issues with Content-Type/Length headers on POST) http://cvs.php.net/viewvc.cgi/php-src/ext/standard/http_fopen_wrapper.c?r1=1.99.2.12.2.9.2.5&r2=1.99.2.12.2.9.2.6&diff_format=u Index: php-src/ext/standard/http_fopen_wrapper.c diff -u php-src/ext/standard/http_fopen_wrapper.c:1.99.2.12.2.9.2.5 php-src/ext/standard/http_fopen_wrapper.c:1.99.2.12.2.9.2.6 --- php-src/ext/standard/http_fopen_wrapper.c:1.99.2.12.2.9.2.5 Mon Jan 7 15:13:17 2008 +++ php-src/ext/standard/http_fopen_wrapper.c Sun Apr 6 15:21:24 2008 @@ -19,7 +19,7 @@| Sara Golemon <pollita@php.net> | +----------------------------------------------------------------------+*/ -/* $Id: http_fopen_wrapper.c,v 1.99.2.12.2.9.2.5 2008/01/07 15:13:17 iliaa Exp $ */ +/* $Id: http_fopen_wrapper.c,v 1.99.2.12.2.9.2.6 2008/04/06 15:21:24 iliaa Exp $ */ #include "php.h" #include "php_globals.h" @@ -105,6 +105,7 @@ char *protocol_version = NULL; int protocol_version_len = 3; /* Default: "1.0" */ struct timeval timeout; + char *user_headers = NULL; tmp_line[0] = '\0'; @@ -351,10 +352,8 @@ efree(tmp); tmp = tmp_c; } - - /* Output trimmed headers with \r\n at the end */ - php_stream_write(stream, tmp, strlen(tmp)); - php_stream_write(stream, "\r\n", sizeof("\r\n") - 1); + + user_headers = estrdup(tmp); /* Make lowercase for easy comparison against 'standard' headers */ php_strtolower(tmp, strlen(tmp)); @@ -452,6 +451,27 @@ } } + if (user_headers) { + /* A bit weird, but some servers require that Content-Length be sent prior to Content-Type for POST + * see bug #44603 for details. Since Content-Type maybe part of user's headers we need to do this check first. + */ + if ( + header_init && + context && + !(have_header & HTTP_HEADER_CONTENT_LENGTH) && + php_stream_context_get_option(context, "http", "content", &tmpzval) == SUCCESS && + Z_TYPE_PP(tmpzval) == IS_STRING && Z_STRLEN_PP(tmpzval) > 0 + ) { + scratch_len = slprintf(scratch, scratch_len, "Content-Length: %d\r\n", Z_STRLEN_PP(tmpzval)); + php_stream_write(stream, scratch, scratch_len); + have_header |= HTTP_HEADER_CONTENT_LENGTH; + } + + php_stream_write(stream, user_headers, strlen(user_headers)); + php_stream_write(stream, "\r\n", sizeof("\r\n")-1); + efree(user_headers); + } + /* Request content, such as for POST requests */ if (header_init && context && php_stream_context_get_option(context, "http", "content", &tmpzval) == SUCCESS &&