From ef65ca7a16485b5fade10035ea5c1d8630b14bc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Love=20H=C3=B6rnquist=20=C3=85strand?= Date: Thu, 11 Dec 2008 05:00:29 +0000 Subject: [PATCH] free data on write error back on the tcp socket cid#123, make sure we dont write more data back then we got git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@24105 ec53bebd-3082-4978-b11e-865c3cabbd6b --- kdc/connect.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kdc/connect.c b/kdc/connect.c index bd04206d9..9fd709b1b 100644 --- a/kdc/connect.c +++ b/kdc/connect.c @@ -720,16 +720,20 @@ handle_http_tcp (krb5_context context, "Content-type: application/octet-stream\r\n" "Content-transfer-encoding: binary\r\n\r\n"; if (write(d->s, proto, strlen(proto)) < 0) { + free(data); kdc_log(context, config, 0, "HTTP write failed: %s: %s", d->addr_string, strerror(errno)); return -1; } if (write(d->s, msg, strlen(msg)) < 0) { + free(data); kdc_log(context, config, 0, "HTTP write failed: %s: %s", d->addr_string, strerror(errno)); return -1; } } + if (len > d->len) + len = d->len; memcpy(d->buf, data, len); d->len = len; free(data); @@ -779,6 +783,10 @@ handle_tcp(krb5_context context, strncmp((char *)d[idx].buf, "GET ", 4) == 0 && strncmp((char *)d[idx].buf + d[idx].len - 4, "\r\n\r\n", 4) == 0) { + + /* remove the trailing \r\n\r\n so the string is NUL terminated */ + d[idx].buf[d[idx].len - 4] = '\0'; + ret = handle_http_tcp (context, config, &d[idx]); if (ret < 0) clear_descr (d + idx);