On Tue, 2 Apr 2002, Doug MacEachern wrote:

>      apr_bucket_immortal_create(HTTP_ON_HTTPS_PORT, \
> -                               sizeof(HTTP_ON_HTTPS_PORT) - 1, \
> +                               sizeof(HTTP_ON_HTTPS_PORT), \

Mmmm... no.  I don't know how that makes it work its way through, but it's
not right.  That null character should never be allowed in.

The correct solution is this:

Index: ssl_engine_io.c
===================================================================
RCS file: /home/cvs/httpd-2.0/modules/ssl/ssl_engine_io.c,v
retrieving revision 1.71
diff -u -d -r1.71 ssl_engine_io.c
--- ssl_engine_io.c     2 Apr 2002 17:30:08 -0000       1.71
+++ ssl_engine_io.c     3 Apr 2002 07:33:40 -0000
@@ -736,7 +736,7 @@
 }

 #define HTTP_ON_HTTPS_PORT \
-    "GET /mod_ssl:error:HTTP-request HTTP/1.0\r\n\r\n"
+    "GET /mod_ssl:error:HTTP-request HTTP/1.0"

 #define HTTP_ON_HTTPS_PORT_BUCKET(alloc) \
     apr_bucket_immortal_create(HTTP_ON_HTTPS_PORT, \


Because we're expected to be returning a single line at this point.  If
you leave the CRLF's on, you get weird things like this in
http_protocol.c:

apr_pstrmemdup (a=0x8240960, s=0x8241238 "HTTP/1.0\r\n", n=10)
    at apr_strings.c:110
110         memcpy(res, s, n);
(gdb)
111         res[n] = '\0';
(gdb)
112         return res;
(gdb)
0x40030bd2      107             return NULL;
(gdb)
read_request_line (r=0x8240998) at protocol.c:703
703         if (len == 8
(gdb)
709         else if (2 == sscanf(r->protocol, "HTTP/%u.%u", &major,
&minor)
(gdb)
711             r->proto_num = HTTP_VERSION(major, minor);
(gdb)
715         return 1;
(gdb)

So it manages to survive through that, but then the next line, which is
\r\n *after* the \r\n was supposed to be stripped off, is an invalid
header.

--Cliff

--------------------------------------------------------------
   Cliff Woolley
   [EMAIL PROTECTED]
   Charlottesville, VA


Reply via email to