]> granicus.if.org Git - php/commitdiff
MFB: Fixed bug #46319 (PHP sets default Content-Type header for HTTP 304
authorIlia Alshanetsky <iliaa@php.net>
Fri, 17 Oct 2008 01:32:59 +0000 (01:32 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Fri, 17 Oct 2008 01:32:59 +0000 (01:32 +0000)
response code, in cgi sapi)

NEWS
sapi/cgi/cgi_main.c

diff --git a/NEWS b/NEWS
index a5ebb869b89dbff66426ffac9ad91c64eeeccb91..d15dab513770e8456f6c8fcf0ebfa202115fe8de 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,8 @@
 PHP                                                                        NEWS
 |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
 ?? Oct 2008, PHP 5.2.7RC2
+- Fixed bug #46319 (PHP sets default Content-Type header for HTTP 304
+  response code, in cgi sapi). (Ilia)
 - Fixed bug #46292 (PDO::setFetchMode() shouldn't requires the 2nd arg when 
   using FETCH_CLASSTYPE). (Felipe)
 - Fixed bug #46274, #46249 (pdo_pgsql always fill in NULL for empty BLOB and 
index 857993acb72e901e4b0029652abffb66cee20707..a68d6404567a860391b91c929588b92df676fa49 100644 (file)
@@ -370,6 +370,7 @@ static int sapi_cgi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
        sapi_header_struct *h;
        zend_llist_position pos;
        zend_bool ignore_status = 0;
+       int response_status = SG(sapi_headers).http_response_code;
 
        if (SG(request_info).no_headers == 1) {
                return  SAPI_HEADER_SENT_SUCCESSFULLY;
@@ -381,8 +382,11 @@ static int sapi_cgi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
                zend_bool has_status = 0;
 
                if (CGIG(rfc2616_headers) && SG(sapi_headers).http_status_line) {
-                       len = slprintf(buf, SAPI_CGI_MAX_HEADER_LENGTH,
-                                                  "%s\r\n", SG(sapi_headers).http_status_line);
+                       char *s;
+                       len = slprintf(buf, SAPI_CGI_MAX_HEADER_LENGTH, "%s\r\n", SG(sapi_headers).http_status_line);
+                       if ((s = strchr(SG(sapi_headers).http_status_line, ' '))) {
+                               response_status = atoi((s + 1));
+                       }
 
                        if (len > SAPI_CGI_MAX_HEADER_LENGTH) {
                                len = SAPI_CGI_MAX_HEADER_LENGTH;
@@ -396,6 +400,7 @@ static int sapi_cgi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
                            (s - SG(sapi_headers).http_status_line) >= 5 &&
                            strncasecmp(SG(sapi_headers).http_status_line, "HTTP/", 5) == 0) {
                                len = slprintf(buf, sizeof(buf), "Status:%s\r\n", s);
+                               response_status = atoi((s + 1));
                        } else {
                                h = (sapi_header_struct*)zend_llist_get_first_ex(&sapi_headers->headers, &pos);
                                while (h) {
@@ -440,6 +445,9 @@ static int sapi_cgi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
                                        PHPWRITE_H(h->header, h->header_len);
                                        PHPWRITE_H("\r\n", 2);
                                }
+                       } else if (response_status == 304 && h->header_len > sizeof("Content-Type:")-1 && 
+                                       strncasecmp(h->header, "Content-Type:", sizeof("Content-Type:")-1) == 0) {
+                               continue;
                        } else {
                                PHPWRITE_H(h->header, h->header_len);
                                PHPWRITE_H("\r\n", 2);