]> granicus.if.org Git - php/commitdiff
MFH: fix #36400 (Custom 5xx error does not return correct HTTP response error code)
authorAntony Dovgal <tony2001@php.net>
Wed, 15 Feb 2006 11:09:05 +0000 (11:09 +0000)
committerAntony Dovgal <tony2001@php.net>
Wed, 15 Feb 2006 11:09:05 +0000 (11:09 +0000)
NEWS
sapi/apache/mod_php5.c

diff --git a/NEWS b/NEWS
index d5bda2e74539c805ec3a40a9cfa52f8c37a2a6d4..a86745fc5cbe69e09aab5b5367ebeb98351d1bba 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -22,6 +22,8 @@ PHP                                                                        NEWS
 - Added ReflectionClass::newInstanceArgs($args). (Marcus)
 - Added imap_savebody() that allows message body to be written to a file.
   (Mike)
+- Fixed bug #36400 (Custom 5xx error does not return correct HTTP response 
+  error code). (Tony)
 - Fixed bug #36345 (PDO/MySQL problem loading BLOB over 1MB). (Ilia)
 - Fixed bug #36382 (PDO/PgSQL's getColumnMeta() crashes). (Derick)
 - Fixed bug #36359 (splFileObject::fwrite() doesn't write when no data length 
index a6b40d8e43f7f0c3e7b108a1051a4e6f975357c5..e55c74f75c437ff66dc63ff7bbd26ed796a05326 100644 (file)
@@ -67,6 +67,7 @@ static CONST_PREFIX char *php_apache_admin_flag_handler(cmd_parms *cmd, HashTabl
 /* ### these should be defined in mod_php5.h or somewhere else */
 #define USE_PATH 1
 #define IGNORE_URL 2
+#define MAX_STATUS_LENGTH sizeof("xxxx LONGEST POSSIBLE STATUS DESCRIPTION")
 
 module MODULE_VAR_EXPORT php5_module;
 
@@ -208,17 +209,35 @@ static int sapi_apache_header_handler(sapi_header_struct *sapi_header, sapi_head
 static int sapi_apache_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
 {
        request_rec *r = SG(server_context);
+       char *status_buf = NULL;
+       const char *sline = SG(sapi_headers).http_status_line;
+       int sline_len;
 
        if(r == NULL) { /* server_context is not here anymore */
                return SAPI_HEADER_SEND_FAILED;
        }
 
        r->status = SG(sapi_headers).http_response_code;
+
+       /* httpd requires that r->status_line is set to the first digit of
+        * the status-code: */
+       if (sline && ((sline_len = strlen(sline)) > 12) && strncmp(sline, "HTTP/1.", 7) == 0 && sline[8] == ' ' && sline[12] == ' ') {
+               if ((sline_len - 9) > MAX_STATUS_LENGTH) {
+                       status_buf = estrndup(sline + 9, MAX_STATUS_LENGTH);
+               } else {
+                       status_buf = estrndup(sline + 9, sline_len - 9);
+               }
+               r->status_line = status_buf;
+       }
+
        if(r->status==304) {
                send_error_response(r,0);
        } else {
                send_http_header(r);
-       }   
+       }
+       if (status_buf) {
+               efree(status_buf);
+       }
        return SAPI_HEADER_SENT_SUCCESSFULLY;
 }
 /* }}} */