You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by jf...@apache.org on 2007/08/01 14:20:35 UTC

svn commit: r561778 - /httpd/httpd/trunk/modules/proxy/mod_proxy_http.c

Author: jfclere
Date: Wed Aug  1 05:20:34 2007
New Revision: 561778

URL: http://svn.apache.org/viewvc?view=rev&rev=561778
Log:
create the brigate outside ap_proxygetline and reuse it.
correct the overflow handling. (returning APR_ENOSPC was
changing the behaviour).

Modified:
    httpd/httpd/trunk/modules/proxy/mod_proxy_http.c

Modified: httpd/httpd/trunk/modules/proxy/mod_proxy_http.c
URL: http://svn.apache.org/viewvc/httpd/httpd/trunk/modules/proxy/mod_proxy_http.c?view=diff&rev=561778&r1=561777&r2=561778
==============================================================================
--- httpd/httpd/trunk/modules/proxy/mod_proxy_http.c (original)
+++ httpd/httpd/trunk/modules/proxy/mod_proxy_http.c Wed Aug  1 05:20:34 2007
@@ -1184,20 +1184,20 @@
 }
 
 static
-apr_status_t ap_proxygetline(char *s, int n, request_rec *r,
+apr_status_t ap_proxygetline(apr_bucket_brigade *bb, char *s, int n, request_rec *r,
                              int fold, int *writen)
 {
     char *tmp_s = s;
     apr_status_t rv;
     apr_size_t len;
-    apr_bucket_brigade *tmp_bb;
 
-    tmp_bb = apr_brigade_create(r->pool, r->connection->bucket_alloc);
-    rv = ap_rgetline(&tmp_s, n, &len, r, fold, tmp_bb);
-    apr_brigade_destroy(tmp_bb);
+    rv = ap_rgetline(&tmp_s, n, &len, r, fold, bb);
+    apr_brigade_cleanup(bb);
 
     if (rv == APR_SUCCESS) {
         *writen = (int) len;
+    } else if (rv == APR_ENOSPC) {
+        *writen = n;
     } else {
         *writen = -1;
     }
@@ -1217,7 +1217,7 @@
     char keepchar;
     request_rec *rp;
     apr_bucket *e;
-    apr_bucket_brigade *bb;
+    apr_bucket_brigade *bb, *tmp_bb;
     int len, backasswards;
     int interim_response; /* non-zero whilst interim 1xx responses
                            * are being read. */
@@ -1236,15 +1236,16 @@
      * response.
      */
     rp->proxyreq = PROXYREQ_RESPONSE;
+    tmp_bb = apr_brigade_create(p, c->bucket_alloc);
     do {
         apr_status_t rc;
 
         apr_brigade_cleanup(bb);
 
-        rc = ap_proxygetline(buffer, sizeof(buffer), rp, 0, &len);
+        rc = ap_proxygetline(tmp_bb, buffer, sizeof(buffer), rp, 0, &len);
         if (len == 0) {
             /* handle one potential stray CRLF */
-            rc = ap_proxygetline(buffer, sizeof(buffer), rp, 0, &len);
+            rc = ap_proxygetline(tmp_bb, buffer, sizeof(buffer), rp, 0, &len);
         }
         if (len <= 0) {
             ap_log_rerror(APLOG_MARK, APLOG_ERR, rc, r,