diff --git a/funcs/func_env.c b/funcs/func_env.c
index 1d3e95c0ef1bafe6eb63ee93a176499285db2328..0daa7f48d12f882639adfc2c619ce666d4870172 100644
--- a/funcs/func_env.c
+++ b/funcs/func_env.c
@@ -561,7 +561,7 @@ static int file_read(struct ast_channel *chan, const char *cmd, char *data, stru
 
 			/* Don't go past the length requested */
 			if (off_i + toappend > offset + length) {
-				toappend = length - off_i;
+				toappend = offset + length - off_i;
 			}
 
 			ast_str_append_substr(buf, len, fbuf, toappend);