diff options
author | Sean Bright <sean@malleable.com> | 2011-01-19 18:45:44 +0000 |
---|---|---|
committer | Sean Bright <sean@malleable.com> | 2011-01-19 18:45:44 +0000 |
commit | bc9bb55fb2092b0e29dc31bf3411d0a464e859ef (patch) | |
tree | 508c713522dce356345f9d2adbf606e5fe6a8ea8 /res/res_agi.c | |
parent | bd26287e88475c59df9bd7a80c04c35e5af5a9ea (diff) |
Merged revisions 302549 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8
................
r302549 | seanbright | 2011-01-19 13:43:11 -0500 (Wed, 19 Jan 2011) | 17 lines
Merged revisions 302548 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.6.2
........
r302548 | seanbright | 2011-01-19 13:37:09 -0500 (Wed, 19 Jan 2011) | 10 lines
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/trunk@302550 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res/res_agi.c')
-rw-r--r-- | res/res_agi.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/res/res_agi.c b/res/res_agi.c index f7bc8d9cf..cd4760b41 100644 --- a/res/res_agi.c +++ b/res/res_agi.c @@ -3391,7 +3391,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; @@ -3402,7 +3402,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)); } |