]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Reset our ast_str before passing it on to dialplan function backends.
authorMatthew Nicholson <mnicholson@digium.com>
Fri, 8 Jul 2011 19:52:51 +0000 (19:52 +0000)
committerMatthew Nicholson <mnicholson@digium.com>
Fri, 8 Jul 2011 19:52:51 +0000 (19:52 +0000)
It is possible for a dialplan backend to not modify the given buffer or ast_str
and still return success. This causes any previous value stored in the buffer
to be used as if the new function call provided it. Some functions also append
to the given buffer assuming it is empty.

The test_substitution unit test has also been modified to detect this problem.

(closes issue ASTERISK-17878)

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@327106 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/pbx.c
tests/test_substitution.c

index df1270ad3e0e2bf0a3580b606eea84f4c03f9c64..8c6da1f7cca6850782518f57f1de0e132490becb 100644 (file)
@@ -3551,9 +3551,9 @@ int ast_func_read2(struct ast_channel *chan, const char *function, struct ast_st
                if (acfptr->mod) {
                        u = __ast_module_user_add(acfptr->mod, chan);
                }
+               ast_str_reset(*str);
                if (acfptr->read2) {
                        /* ast_str enabled */
-                       ast_str_reset(*str);
                        res = acfptr->read2(chan, copy, args, str, maxlen);
                } else {
                        /* Legacy function pointer, allocate buffer for result */
index aa7d14f914e046cc47ea5cb1474e3c7005f7fa70..98e1ed1911611c9c1820de22170316ec7a589397 100644 (file)
@@ -261,6 +261,8 @@ AST_TEST_DEFINE(test_substitution)
        TEST(test_expected_result(test, c, "A${${baz}o:-2:-1}A", "A2A"));
        pbx_builtin_setvar_helper(c, "list1", "ab&cd&ef");
        TEST(test_expected_result(test, c, "${LISTFILTER(list1,&,cd)}", "ab&ef"));
+       TEST(test_expected_result(test, c, "${SHELL(echo -n 123)},${SHELL(echo -n 456)}", "123,456"));
+       TEST(test_expected_result(test, c, "${foo},${CDR(answer)},${SHELL(echo -n 456)}", "123,,456"));
 #undef TEST
 
        /* For testing dialplan functions */