Author: mjordan Date: Thu Mar 19 14:19:32 2015 New Revision: 433173 URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=433173 Log: funcs/func_env: Fix regression caused in FILE read operation
When r432935 was merged, it did correctly fix a situation where a FILE read operation on the middle of a file buffer would not read the requested length in the parameters passed to the FILE function. Unfortunately, it would also allow the FILE function to append more bytes than what was available in the buffer if the length exceeded the end of the buffer length. This patch takes the minimum of the remaining bytes in the buffer along with the calculated length to append provided by the original patch, and uses that as the length to append in the return result. This patch also updates the unit tests with the scenarios that were originally pointed out in ASTERISK-21765 that the original implementation treated incorrectly. ASTERISK-21765 Modified: branches/11/funcs/func_env.c branches/11/tests/test_func_file.c Modified: branches/11/funcs/func_env.c URL: http://svnview.digium.com/svn/asterisk/branches/11/funcs/func_env.c?view=diff&rev=433173&r1=433172&r2=433173 ============================================================================== --- branches/11/funcs/func_env.c (original) +++ branches/11/funcs/func_env.c Thu Mar 19 14:19:32 2015 @@ -561,7 +561,7 @@ /* Don't go past the length requested */ if (off_i + toappend > offset + length) { - toappend = offset + length - off_i; + toappend = MIN(offset + length - off_i, flength - off_i); } ast_str_append_substr(buf, len, fbuf, toappend); Modified: branches/11/tests/test_func_file.c URL: http://svnview.digium.com/svn/asterisk/branches/11/tests/test_func_file.c?view=diff&rev=433173&r1=433172&r2=433173 ============================================================================== --- branches/11/tests/test_func_file.c (original) +++ branches/11/tests/test_func_file.c Thu Mar 19 14:19:32 2015 @@ -63,6 +63,12 @@ /* No length */ { "123456789", "-5", "56789" }, { "123456789", "4", "56789" }, + /* Passed file length */ + { "123456789", "8,10", "9" }, + { "123456789", "10,1", "" }, + /* Middle of file */ + { "123456789", "2,5", "34567" }, + { "123456789", "-7,5", "34567" }, /* Line mode, 4 ways of specifying the first character */ { "123\n456\n789\n", "0,1,l", "123\n" }, { "123\n456\n789\n", "-3,1,l", "123\n" }, -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits