tony2001 Wed Feb 15 11:07:33 2006 UTC
Modified files:
/php-src/sapi/apache mod_php5.c
Log:
fix #36400 (Custom 5xx error does not return correct HTTP response error code)
http://cvs.php.net/viewcvs.cgi/php-src/sapi/apache/mod_php5.c?r1=1.26&r2=1.27&diff_format=u
Index: php-src/sapi/apache/mod_php5.c
diff -u php-src/sapi/apache/mod_php5.c:1.26 php-src/sapi/apache/mod_php5.c:1.27
--- php-src/sapi/apache/mod_php5.c:1.26 Fri Jan 6 17:54:35 2006
+++ php-src/sapi/apache/mod_php5.c Wed Feb 15 11:07:33 2006
@@ -17,7 +17,7 @@
| PHP 4.0 patches by Zeev Suraski <[EMAIL PROTECTED]> |
+----------------------------------------------------------------------+
*/
-/* $Id: mod_php5.c,v 1.26 2006/01/06 17:54:35 rasmus Exp $ */
+/* $Id: mod_php5.c,v 1.27 2006/02/15 11:07:33 tony2001 Exp $ */
#include "php_apache_http.h"
#include "http_conf_globals.h"
@@ -63,6 +63,7 @@
/* ### 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;
@@ -204,17 +205,35 @@
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;
}
/* }}} */
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php