From: Antony Dovgal Date: Wed, 15 Feb 2006 11:09:05 +0000 (+0000) Subject: MFH: fix #36400 (Custom 5xx error does not return correct HTTP response error code) X-Git-Tag: php-5.1.3RC1~106 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=80683424838b3276ca415fcdfc712158ab2a7e3d;p=php MFH: fix #36400 (Custom 5xx error does not return correct HTTP response error code) --- diff --git a/NEWS b/NEWS index d5bda2e745..a86745fc5c 100644 --- 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 diff --git a/sapi/apache/mod_php5.c b/sapi/apache/mod_php5.c index a6b40d8e43..e55c74f75c 100644 --- a/sapi/apache/mod_php5.c +++ b/sapi/apache/mod_php5.c @@ -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; } /* }}} */