sniper          Sat Apr 16 23:37:06 2005 EDT

  Modified files:              
    /php-src/sapi/isapi php5isapi.c 
  Log:
  - Fixed bug #31887 (Custom 5xx error does not return correct HTTP response 
message)
  
http://cvs.php.net/diff.php/php-src/sapi/isapi/php5isapi.c?r1=1.6&r2=1.7&ty=u
Index: php-src/sapi/isapi/php5isapi.c
diff -u php-src/sapi/isapi/php5isapi.c:1.6 php-src/sapi/isapi/php5isapi.c:1.7
--- php-src/sapi/isapi/php5isapi.c:1.6  Mon Dec 20 14:33:39 2004
+++ php-src/sapi/isapi/php5isapi.c      Sat Apr 16 23:37:05 2005
@@ -16,7 +16,7 @@
    |          Ben Mansell <[EMAIL PROTECTED]> (Zeus Support)                   
|
    +----------------------------------------------------------------------+
  */
-/* $Id: php5isapi.c,v 1.6 2004/12/20 19:33:39 rasmus Exp $ */
+/* $Id: php5isapi.c,v 1.7 2005/04/17 03:37:05 sniper Exp $ */
 
 #include "php.h"
 #include <httpext.h>
@@ -57,7 +57,7 @@
 #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 @@
        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 @@
                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 @@
        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 sapi_isapi_read_post(char *buffer, uint count_bytes TSRMLS_DC)
 {
        LPEXTENSION_CONTROL_BLOCK lpECB = (LPEXTENSION_CONTROL_BLOCK) 
SG(server_context);

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to