]> git.meshlink.io Git - meshlink/blobdiff - src/meta.c
Compact input buffer before trying to read instead of after.
[meshlink] / src / meta.c
index 1fbd22c29c26e90ccc11a85337598d6413c5f4f3..cf6b9d446d82067ee3739afdbecd25bce1247313 100644 (file)
@@ -72,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;
 
@@ -85,6 +85,13 @@ bool receive_meta(connection_t *c) {
           - If not, keep stuff in buffer and exit.
         */
 
+       buffer_compact(&c->inbuf);
+
+       if(sizeof inbuf <= c->inbuf.len) {
+               logger(LOG_ERR, "Input buffer full for %s (%s)\n");
+               return false;
+       }
+
        inlen = recv(c->socket, inbuf, sizeof inbuf - c->inbuf.len, 0);
 
        if(inlen <= 0) {
@@ -151,7 +158,5 @@ bool receive_meta(connection_t *c) {
                }
        } while(inlen);
 
-       buffer_compact(&c->inbuf);
-
        return true;
 }