summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Bright <sean@malleable.com>2011-01-19 18:45:44 +0000
committerSean Bright <sean@malleable.com>2011-01-19 18:45:44 +0000
commitbc9bb55fb2092b0e29dc31bf3411d0a464e859ef (patch)
tree508c713522dce356345f9d2adbf606e5fe6a8ea8
parentbd26287e88475c59df9bd7a80c04c35e5af5a9ea (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
-rw-r--r--res/res_agi.c4
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));
}