diff options
author | Steve Murphy <murf@digium.com> | 2007-11-13 21:19:11 +0000 |
---|---|---|
committer | Steve Murphy <murf@digium.com> | 2007-11-13 21:19:11 +0000 |
commit | f0a7e86177d40989c9f7f173de87489c54b6af50 (patch) | |
tree | 3fe862c259199717a1e45f13e81c28b390e0a241 | |
parent | 3846390d003e09121819ab6590023a7f3b536d1d (diff) |
closes issue #11233 -- where some fine points in the algorithm to build the tree needed to be corrected. Many thanks for the test case, jtodd
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@89256 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r-- | main/pbx.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/main/pbx.c b/main/pbx.c index 6a59ff46d..71331b14a 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -1107,13 +1107,16 @@ struct match_char *add_exten_to_pattern_tree(struct ast_context *con, struct ast specif = 1; } - if (already && (m2=already_in_tree(m1,buf))) { + if (already && (m2=already_in_tree(m1,buf)) && m2->next_char) { if (!(*(s1+1))) /* if this is the end of the pattern, but not the end of the tree, then mark this node with the exten... a shorter pattern might win if the longer one doesn't match */ - m1->exten = e1; + m2->exten = e1; m1 = m2->next_char; /* m1 points to the node to compare against */ } else { - m1 = add_pattern_node(con, m1, buf, pattern, already,specif); /* m1 is the node just added */ + if (m2) { + m1 = m2; + } else + m1 = add_pattern_node(con, m1, buf, pattern, already,specif); /* m1 is the node just added */ if (!(*(s1+1))) m1->exten = e1; already = 0; |