summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorreyk <reyk@openbsd.org>2008-08-08 19:13:24 +0000
committerreyk <reyk@openbsd.org>2008-08-08 19:13:24 +0000
commitb9c9f69b43bae9d5e8fc970eeb79283dd00053c1 (patch)
treee4f271127de5e42c3d4a32efc29f6cae6c270f0f
parentonly dump all protocol nodes with DEBUG > 1. (diff)
downloadwireguard-openbsd-b9c9f69b43bae9d5e8fc970eeb79283dd00053c1.tar.xz
wireguard-openbsd-b9c9f69b43bae9d5e8fc970eeb79283dd00053c1.zip
fix possible memleaks in chunked encoding handler
-rw-r--r--usr.sbin/relayd/relay.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/usr.sbin/relayd/relay.c b/usr.sbin/relayd/relay.c
index 9796f92011b..8f47023f508 100644
--- a/usr.sbin/relayd/relay.c
+++ b/usr.sbin/relayd/relay.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: relay.c,v 1.98 2008/08/08 18:56:05 reyk Exp $ */
+/* $OpenBSD: relay.c,v 1.99 2008/08/08 19:13:24 reyk Exp $ */
/*
* Copyright (c) 2006, 2007, 2008 Reyk Floeter <reyk@openbsd.org>
@@ -1191,8 +1191,10 @@ relay_read_httpchunks(struct bufferevent *bev, void *arg)
relay_close(con, "invalid chunk");
return;
}
- if (!strlen(line))
+ if (!strlen(line)) {
+ free(line);
goto next;
+ }
/* Read prepended chunk size in hex, ingore the trailer */
if (sscanf(line, "%lx", &lval) != 1) {
@@ -1202,8 +1204,10 @@ relay_read_httpchunks(struct bufferevent *bev, void *arg)
}
if (relay_bufferevent_print(cre->dst, line) == -1 ||
- relay_bufferevent_print(cre->dst, "\r\n") == -1)
+ relay_bufferevent_print(cre->dst, "\r\n") == -1) {
+ free(line);
goto fail;
+ }
free(line);
/* Last chunk is 0 bytes followed by an empty newline */