[git commit] httpd: fix proxy headers passing - full_write() instead of write()
Denys Vlasenko
vda.linux at googlemail.com
Sun Apr 14 18:46:57 UTC 2019
commit: https://git.busybox.net/busybox/commit/?id=02d650e15919e48fe031308c77c041159c0e3631
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master
function old new delta
handle_incoming_and_exit 2763 2752 -11
Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
networking/httpd.c | 27 ++++++++++++++++-----------
1 file changed, 16 insertions(+), 11 deletions(-)
diff --git a/networking/httpd.c b/networking/httpd.c
index f713f6929..c486197b8 100644
--- a/networking/httpd.c
+++ b/networking/httpd.c
@@ -2271,15 +2271,20 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
bb_error_msg("header: '%s'", iobuf);
#if ENABLE_FEATURE_HTTPD_PROXY
- /* We need 2 more bytes for yet another "\r\n" -
- * see near fdprintf(proxy_fd...) further below */
- if (proxy_entry && (header_ptr - header_buf) < IOBUF_SIZE - 4) {
- int len = strnlen(iobuf, 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;
+ if (proxy_entry) {
+ /* Why 4, not 2?
+ * We need 2 more bytes for yet another "\r\n" -
+ * see near fdprintf(proxy_fd...) further below.
+ */
+ int maxlen = (IOBUF_SIZE-4) - (int)(header_ptr - header_buf);
+ if (maxlen > 0) {
+ int len = strnlen(iobuf, maxlen);
+ memcpy(header_ptr, iobuf, len);
+ header_ptr += len;
+ header_ptr[0] = '\r';
+ header_ptr[1] = '\n';
+ header_ptr += 2;
+ }
}
#endif
@@ -2401,7 +2406,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
}
#if ENABLE_FEATURE_HTTPD_PROXY
- if (proxy_entry != NULL) {
+ if (proxy_entry) {
int proxy_fd;
len_and_sockaddr *lsa;
@@ -2423,7 +2428,7 @@ static void handle_incoming_and_exit(const len_and_sockaddr *fromAddr)
header_ptr[0] = '\r';
header_ptr[1] = '\n';
header_ptr += 2;
- write(proxy_fd, header_buf, header_ptr - header_buf);
+ full_write(proxy_fd, header_buf, header_ptr - header_buf);
free(header_buf); /* on the order of 8k, free it */
cgi_io_loop_and_exit(proxy_fd, proxy_fd, length);
}
More information about the busybox-cvs
mailing list