X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fmeta.c;h=5735da7e8d1b60f180d7174c97030f444c8442e7;hb=931e30f91a9241ab8aa705c911c92ba8943f80fd;hp=726dcca924ca5dcf692bfaa2acd2b9dc4df38bd2;hpb=cdb793f687262b9f56823ca9046523a609a758af;p=tinc diff --git a/src/meta.c b/src/meta.c index 726dcca9..5735da7e 100644 --- a/src/meta.c +++ b/src/meta.c @@ -42,10 +42,9 @@ bool send_meta(connection_t *c, const char *buffer, int length) { /* Add our data to buffer */ if(c->status.encryptout) { - char outbuf[length]; size_t outlen = length; - if(!cipher_encrypt(&c->outcipher, outbuf, length, buffer_prepare(&c->outbuf, length), &outlen, false) || outlen != length) { + if(!cipher_encrypt(&c->outcipher, buffer, length, buffer_prepare(&c->outbuf, length), &outlen, false) || outlen != length) { logger(LOG_ERR, "Error while encrypting metadata to %s (%s)", c->name, c->hostname); return false; @@ -73,7 +72,7 @@ void broadcast_meta(connection_t *from, const char *buffer, int length) { } bool receive_meta(connection_t *c) { - int inlen, reqlen; + int inlen; char inbuf[MAXBUFSIZE]; char *bufp = inbuf, *endp; @@ -86,6 +85,13 @@ bool receive_meta(connection_t *c) { - If not, keep stuff in buffer and exit. */ + buffer_compact(&c->inbuf, MAXBUFSIZE); + + if(sizeof inbuf <= c->inbuf.len) { + logger(LOG_ERR, "Input buffer full for %s (%s)\n", c, c->hostname); + return false; + } + inlen = recv(c->socket, inbuf, sizeof inbuf - c->inbuf.len, 0); if(inlen <= 0) {