httpd: free big buffer after use; improve grep-ability of 'headers' variable
authorvda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Thu, 18 Oct 2007 13:01:22 +0000 (13:01 +0000)
committervda <vda@69ca8d6d-28ef-0310-b511-8ec308f3f277>
Thu, 18 Oct 2007 13:01:22 +0000 (13:01 +0000)
git-svn-id: svn://busybox.net/trunk/busybox@20289 69ca8d6d-28ef-0310-b511-8ec308f3f277

networking/httpd.c

index af1f61d..e4922e5 100644 (file)
@@ -1759,8 +1759,8 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
        char http_major_version;
 #if ENABLE_FEATURE_HTTPD_PROXY
        char http_minor_version;
-       char *headers = headers;
-       char *headers_ptr = headers_ptr;
+       char *header_buf = header_buf; /* for gcc */
+       char *header_ptr = header_ptr;
        Htaccess_Proxy *proxy_entry;
 #endif
        struct sigaction sa;
@@ -1916,7 +1916,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
 #if ENABLE_FEATURE_HTTPD_PROXY
        proxy_entry = find_proxy_entry(urlcopy);
        if (proxy_entry)
-               headers = headers_ptr = xmalloc(IOBUF_SIZE);
+               header_buf = header_ptr = xmalloc(IOBUF_SIZE);
 #endif
 
        if (http_major_version >= '0') {
@@ -1932,16 +1932,16 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
 
 #if ENABLE_FEATURE_HTTPD_PROXY
                        /* We need 2 more bytes for yet another "\r\n" -
-                        * see fdprintf(proxy_fd...) further below */
-                       if (proxy_entry && headers_ptr - headers < IOBUF_SIZE - 2) {
+                        * see near fdprintf(proxy_fd...) further below */
+                       if (proxy_entry && (header_ptr - header_buf) < IOBUF_SIZE - 2) {
                                int len = strlen(iobuf);
-                               if (len > IOBUF_SIZE - (headers_ptr - headers) - 4)
-                                       len = IOBUF_SIZE - (headers_ptr - headers) - 4;
-                               memcpy(headers_ptr, iobuf, len);
-                               headers_ptr += len;
-                               headers_ptr[0] = '\r';
-                               headers_ptr[1] = '\n';
-                               headers_ptr += 2;
+                               if (len > IOBUF_SIZE - (header_ptr - header_buf) - 4)
+                                       len = IOBUF_SIZE - (header_ptr - header_buf) - 4;
+                               memcpy(header_ptr, iobuf, len);
+                               header_ptr += len;
+                               header_ptr[0] = '\r';
+                               header_ptr[1] = '\n';
+                               header_ptr += 2;
                        }
 #endif
 
@@ -2048,10 +2048,11 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
                                (g_query ? "?" : ""), /* "?" (maybe) */
                                (g_query ? g_query : ""), /* query string (maybe) */
                                http_major_version, http_minor_version);
-               headers_ptr[0] = '\r';
-               headers_ptr[1] = '\n';
-               headers_ptr += 2;
-               write(proxy_fd, headers, headers_ptr - headers);
+               header_ptr[0] = '\r';
+               header_ptr[1] = '\n';
+               header_ptr += 2;
+               write(proxy_fd, header_buf, header_ptr - header_buf);
+               free(header_buf); /* on the order of 8k, free it */
                /* cgi_io_loop_and_exit needs to have two disctinct fds */
                cgi_io_loop_and_exit(proxy_fd, dup(proxy_fd), length);
        }