diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-10-18 13:01:22 +0000 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-10-18 13:01:22 +0000 |
commit | 34cd7afc49778eb8f0f5c72d38fdbda13c03a1dc (patch) | |
tree | 30f3235307c2eefa01f308f69eeb9761a3d4fd98 | |
parent | f74194e942b7a65117914ecc9ddb62d9b1cc9e82 (diff) | |
download | busybox-34cd7afc49778eb8f0f5c72d38fdbda13c03a1dc.tar.gz |
httpd: free big buffer after use; improve grep-ability of 'headers' variable
-rw-r--r-- | networking/httpd.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/networking/httpd.c b/networking/httpd.c index af1f61d2d..e4922e509 100644 --- a/networking/httpd.c +++ b/networking/httpd.c @@ -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); } |