closes issue #11233 -- where some fine points in the algorithm to build the tree...
authorSteve Murphy <murf@digium.com>
Tue, 13 Nov 2007 21:19:11 +0000 (21:19 +0000)
committerSteve Murphy <murf@digium.com>
Tue, 13 Nov 2007 21:19:11 +0000 (21:19 +0000)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@89256 65c4cc65-6c06-0410-ace0-fbb531ad65f3

main/pbx.c

index 6a59ff4..71331b1 100644 (file)
@@ -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;