summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthew Nicholson <mnicholson@digium.com>2011-07-11 13:55:28 +0000
committerMatthew Nicholson <mnicholson@digium.com>2011-07-11 13:55:28 +0000
commit7eda60dca1ed0b108ecc212d830ac202de7c3058 (patch)
treef6be03bc3fab486c42cb27db56df31029e10a75b
parent746f93de458748cfdbf0cdd3be3231fd2cb35bfa (diff)
Merged revisions 327512 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r327512 | mnicholson | 2011-07-11 08:53:59 -0500 (Mon, 11 Jul 2011) | 2 lines reset our buffer each iteration when doing variable substitution ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@327513 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--main/pbx.c3
-rw-r--r--tests/test_substitution.c1
2 files changed, 4 insertions, 0 deletions
diff --git a/main/pbx.c b/main/pbx.c
index 3cb9affeb..e625a873a 100644
--- a/main/pbx.c
+++ b/main/pbx.c
@@ -3732,6 +3732,9 @@ void ast_str_substitute_variables_full(struct ast_str **buf, ssize_t maxlen, str
ast_str_reset(*buf);
whereweare = tmp = templ;
while (!ast_strlen_zero(whereweare)) {
+ /* reset our buffer */
+ ast_str_reset(substr3);
+
/* Assume we're copying the whole remaining string */
pos = strlen(whereweare);
nextvar = NULL;
diff --git a/tests/test_substitution.c b/tests/test_substitution.c
index 98e1ed191..366b9371c 100644
--- a/tests/test_substitution.c
+++ b/tests/test_substitution.c
@@ -263,6 +263,7 @@ AST_TEST_DEFINE(test_substitution)
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"));
+ TEST(test_expected_result(test, c, "${foo},${this_does_not_exist},${THIS_DOES_NOT_EXIST(either)}", "123,,"));
#undef TEST
/* For testing dialplan functions */