]> granicus.if.org Git - php/commitdiff
MFH: - Fixed bug #31887 (ISAPI: Custom 5xx error does not return correct HTTP respons...
authorfoobar <sniper@php.net>
Sun, 17 Apr 2005 03:39:14 +0000 (03:39 +0000)
committerfoobar <sniper@php.net>
Sun, 17 Apr 2005 03:39:14 +0000 (03:39 +0000)
NEWS
sapi/isapi/php5isapi.c

diff --git a/NEWS b/NEWS
index 692e7d3deeffbf02d55071334a9604925b38537f..1309783e9fc9d37a99c4de2dc84aae9f840399e5 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -25,6 +25,8 @@ PHP                                                                        NEWS
 - Fixed bug #31583 (php_std_date() uses short day names in non-y2k_compliance 
   mode). (mike at php dot net)
 - Fixed bug #32282 (Segfault in mysqli_fetch_array on 64-bit) (Georg).
+- Fixed bug #31887 (ISAPI: Custom 5xx error does not return correct HTTP 
+  response message). (Jani)
 - Fixed bug #31502 (Wrong deserialization from session when using WDDX
   serializer). (Dmitry) 
 - Fixed bug #31363 (broken non-blocking flock()). ian at snork dot net
index abaa6580cd5b44a2d7b49d5399df735f11eca996..7d26459d400729b3d89c1a2ab900cfc8e90d1dc9 100644 (file)
@@ -57,7 +57,7 @@ exception trapping when running under a debugger
 #endif
 */
 
-#define MAX_STATUS_LENGTH sizeof("xxxx LONGEST STATUS DESCRIPTION")
+#define MAX_STATUS_LENGTH sizeof("xxxx LONGEST POSSIBLE STATUS DESCRIPTION")
 #define ISAPI_SERVER_VAR_BUF_SIZE 1024
 #define ISAPI_POST_DATA_BUF 1024
 
@@ -245,8 +245,8 @@ static int sapi_isapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
        char *combined_headers, *combined_headers_ptr;
        LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);
        HSE_SEND_HEADER_EX_INFO header_info;
-       char status_buf[MAX_STATUS_LENGTH];
        sapi_header_struct default_content_type;
+       char *status_buf = NULL;
 
        /* Obtain headers length */
        if (SG(sapi_headers).send_default_content_type) {
@@ -277,10 +277,21 @@ static int sapi_isapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
                case 401:
                        header_info.pszStatus = "401 Authorization Required";
                        break;
-               default:
-                       snprintf(status_buf, MAX_STATUS_LENGTH, "%d Undescribed", SG(sapi_headers).http_response_code);
+               default: {
+                       const char *sline = SG(sapi_headers).http_status_line;
+                       
+                       status_buf = emalloc(MAX_STATUS_LENGTH + 1);
+                       
+                       /* httpd requires that r->status_line is set to the first digit of
+                        * the status-code: */
+                       if (sline && strlen(sline) > 12 && strncmp(sline, "HTTP/1.", 7) == 0 && sline[8] == ' ') {
+                               status_buf = estrndup(sline + 9, MAX_STATUS_LENGTH);
+                       } else {
+                               snprintf(status_buf, MAX_STATUS_LENGTH, "%d Undescribed", SG(sapi_headers).http_response_code);
+                       }
                        header_info.pszStatus = status_buf;
                        break;
+               }
        }
        header_info.cchStatus = strlen(header_info.pszStatus);
        header_info.pszHeader = combined_headers;
@@ -291,6 +302,9 @@ static int sapi_isapi_send_headers(sapi_headers_struct *sapi_headers TSRMLS_DC)
        lpECB->ServerSupportFunction(lpECB->ConnID, HSE_REQ_SEND_RESPONSE_HEADER_EX, &header_info, NULL, NULL);
 
        efree(combined_headers);
+       if (status_buf) {
+               efree(status_buf);
+       }
        return SAPI_HEADER_SENT_SUCCESSFULLY;
 }
 
@@ -306,7 +320,6 @@ static int php_isapi_startup(sapi_module_struct *sapi_module)
 }
 
 
-
 static int sapi_isapi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
 {
        LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) SG(server_context);