]> granicus.if.org Git - apache/commitdiff
*** Patch for EBCDIC-host and HTTP/0.9 responses only ***
authorMartin Kraemer <martin@apache.org>
Tue, 29 Jun 2004 14:00:07 +0000 (14:00 +0000)
committerMartin Kraemer <martin@apache.org>
Tue, 29 Jun 2004 14:00:07 +0000 (14:00 +0000)
In dealing with a HTTP/0.9 response to a proxy request, we have pre-read
data that is not an HTTP header. At this point of processing, we don't
know yet whether the data is going to be interpreted an binary or not.
(In fact, we may never find out because HTTP/0.9 lacks the Content-Type
headers; only by configuring mod_charset_lite can we control the conversion).
But mod_charset_lite will get control only later, so it cannot decide on
the conversion of the current buffer full of data.
=> This is an extreme and rare situation normally.
So, for catching the most obvious problem (talking not to a HTTP server
but to some other protocol), the best guess here is to treat the buffer
as "text/*" (to make error messages readable).

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@104081 13f79535-47bb-0310-9956-ffa450edef68

modules/proxy/proxy_http.c

index 471a7b8dc3cfa2d7398c401891f859ad47a43758..e54f272499b60306b8e791260556be5608ae2479 100644 (file)
@@ -1190,6 +1190,16 @@ apr_status_t ap_proxy_http_process_response(apr_pool_t * p, request_rec *r,
         /* Is it an HTTP/0.9 response? If so, send the extra data */
         if (backasswards) {
             apr_ssize_t cntr = len;
+            /*@@@FIXME:
+             * At this point in response processing of a 0.9 response,
+             * we don't know yet whether data is binary or not.
+             * mod_charset_lite will get control later on, so it cannot
+             * decide on the conversion of this buffer full of data.
+             * However, chances are that we are not really talking to an
+             * HTTP/0.9 server, but to some different protocol, therefore
+             * the best guess IMHO is to always treat the buffer as "text/*":
+             */
+            ap_xlate_proto_to_ascii(buffer, len);
             e = apr_bucket_heap_create(buffer, cntr, NULL, c->bucket_alloc);
             APR_BRIGADE_INSERT_TAIL(bb, e);
         }