AMI: Fix improper handling of lines that are exactly 1025 bytes long.
authorCorey Farrell <git@cfware.com>
Mon, 13 Apr 2015 11:52:01 +0000 (07:52 -0400)
committerCorey Farrell <git@cfware.com>
Tue, 14 Apr 2015 04:29:14 +0000 (23:29 -0500)
When AMI receives a line that is 1025 bytes long, it sends two error
messages.  Copy the last byte in the buffer to the first postiion,
set the length to 1.

ASTERISK-20524 #close
Reported by: David M. Lee

Change-Id: Ifda403e2713b59582c715229814fd64a0733c5ea

main/manager.c

index 4cfae75..f2a516f 100644 (file)
@@ -6231,9 +6231,11 @@ static int get_input(struct mansession *s, char *output)
                return 1;
        }
        if (s->session->inlen >= maxlen) {
-               /* no crlf found, and buffer full - sorry, too long for us */
+               /* no crlf found, and buffer full - sorry, too long for us
+                * keep the last character in case we are in the middle of a CRLF. */
                ast_log(LOG_WARNING, "Discarding message from %s. Line too long: %.25s...\n", ast_sockaddr_stringify_addr(&s->session->addr), src);
-               s->session->inlen = 0;
+               src[0] = src[s->session->inlen - 1];
+               s->session->inlen = 1;
                s->parsing = MESSAGE_LINE_TOO_LONG;
        }
        res = 0;