diff --git a/res/res_agi.c b/res/res_agi.c
index f7bc8d9cf45a3c6dabb0ce2b6e06112418e1ec01..cd4760b411d573e6b92060f42b6b25d55af0eba5 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));
 			}