Properly handle partial reads from fgets() when handling AGIs.

When fgets() failed with EAGAIN, we were continually decrementing the available
space left in our buffer, resulting in botched command handling.

(closes issue #16032)
Reported by: notahat
Patches:
      agi_buffer_patch2.diff uploaded by fnordian (license 110)


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.6.2@302548 65c4cc65-6c06-0410-ace0-fbb531ad65f3
1.6.2
Sean Bright 15 years ago
parent 24fbdc445b
commit aa527d8ab2

@ -2920,7 +2920,7 @@ static enum agi_result run_agi(struct ast_channel *chan, char *request, AGI *agi
retry = AGI_NANDFS_RETRY;
buf[0] = '\0';
while (buflen < (len - 1)) {
while (len > 1) {
res = fgets(buf + buflen, len, readf);
if (feof(readf))
break;
@ -2931,7 +2931,7 @@ static enum agi_result run_agi(struct ast_channel *chan, char *request, AGI *agi
buflen = strlen(buf);
if (buflen && buf[buflen - 1] == '\n')
break;
len -= buflen;
len = sizeof(buf) - buflen;
if (agidebug)
ast_verbose( "AGI Rx << temp buffer %s - errno %s\n", buf, strerror(errno));
}

Loading…
Cancel
Save