(closes issue #14076)
authorSteve Murphy <murf@digium.com>
Tue, 16 Dec 2008 20:04:46 +0000 (20:04 +0000)
committerSteve Murphy <murf@digium.com>
Tue, 16 Dec 2008 20:04:46 +0000 (20:04 +0000)
Reported by: toc
Tested by: murf

OK, Well this issue has had its share of flip-flopping.
I found the following:

1. the code in question, in ext_cmp1 in pbx.c, would not
allow two extensions that vary only by any dashes contained
within them, to be defined in the same context.

2. for input dialstrings, dashes are NOT ignored.
So, skipping them when sorting patterns seemed a bit silly.
Thus, you might declare ext 891 in a context, but
if you try dialing 8-9-1, it will NOT match 891.

So, I proposed to remove the code from ext_cmp1 to
skip the spaces and dashes. Just kept us from
declaring 891 and 8-9-1 in the same context,
forcing users to generate otherwise uselessly
obfuscated dialplan code to get the same effect.

Then, I tried out 1.4, and found that:

1. you can declare 891 and 8-9-1 in the
same context!

2. You can't define 891, and have 8-9-1 match
it! Nor can you define 8-9-1, and have 891
match it!

So, it appears that my proposal simply restores
the pbx to behaving as it did in 1.4.

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

main/pbx.c

index b695913..840455c 100644 (file)
@@ -2017,8 +2017,6 @@ static void destroy_pattern_tree(struct match_char *pattern_tree) /* pattern tre
  * Special characters used in patterns:
  *     '_'     underscore is the leading character of a pattern.
  *             In other position it is treated as a regular char.
- *     ' ' '-' space and '-' are separator and ignored. Why? so
- *             patterns like NXX-XXX-XXXX or NXX XXX XXXX will work.
  *     .       one or more of any character. Only allowed at the end of
  *             a pattern.
  *     !       zero or more of anything. Also impacts the result of CANMATCH
@@ -2041,8 +2039,7 @@ static void destroy_pattern_tree(struct match_char *pattern_tree) /* pattern tre
  *             considered specially.
  *
  * When we compare a pattern with a specific extension, all characters in the extension
- * itself are considered literally with the only exception of '-' which is considered
- * as a separator and thus ignored.
+ * itself are considered literally.
  * XXX do we want to consider space as a separator as well ?
  * XXX do we want to consider the separators in non-patterns as well ?
  */
@@ -2079,8 +2076,7 @@ static int ext_cmp1(const char **p)
        /* load, sign extend and advance pointer until we find
         * a valid character.
         */
-       while ( (c = *(*p)++) && (c == ' ' || c == '-') )
-               ;       /* ignore some characters */
+       c = *(*p)++;
 
        /* always return unless we have a set of chars */
        switch (toupper(c)) {