]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
CallerID: Fix parsing regression
authorKinsey Moore <kmoore@digium.com>
Fri, 10 Oct 2014 12:58:52 +0000 (12:58 +0000)
committerKinsey Moore <kmoore@digium.com>
Fri, 10 Oct 2014 12:58:52 +0000 (12:58 +0000)
This fixes a regression in callerid parsing introduced when another bug
was fixed. This bug occurred when the name was composed entirely of
DTMF keys and quoted without a number section (<>).

ASTERISK-24406 #close
Reported by: Etienne Lessard
Tested by: Etienne Lessard
Patches:
    callerid_fix.diff uploaded by Kinsey Moore
Review: https://reviewboard.asterisk.org/r/4067/
........

Merged revisions 425152 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........

Merged revisions 425153 from http://svn.asterisk.org/svn/asterisk/branches/11

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

main/callerid.c
tests/test_callerid.c

index 7c227b1f5dc7839d687a9875e130d28923134492..50df82461f4c8a8af14c7d5bc12562d3b6903bf6 100644 (file)
@@ -1006,12 +1006,20 @@ int ast_is_shrinkable_phonenumber(const char *exten)
        return ast_is_valid_string(exten, "0123456789*#+()-.");
 }
 
-int ast_callerid_parse(char *instr, char **name, char **location)
+int ast_callerid_parse(char *input_str, char **name, char **location)
 {
-       char *ls, *le, *name_start;
+       char *ls;
+       char *le;
+       char *name_start;
+       char *instr;
+       int quotes_stripped = 0;
 
        /* Handle surrounding quotes */
-       instr = ast_strip_quoted(instr, "\"", "\"");
+       input_str = ast_strip(input_str);
+       instr = ast_strip_quoted(input_str, "\"", "\"");
+       if (instr != input_str) {
+               quotes_stripped = 1;
+       }
 
        /* Try "name" <location> format or name <location> format or with a missing > */
        if ((ls = strrchr(instr, '<'))) {
@@ -1027,7 +1035,7 @@ int ast_callerid_parse(char *instr, char **name, char **location)
 
                ast_copy_string(tmp, instr, sizeof(tmp));
                ast_shrink_phone_number(tmp);
-               if (ast_isphonenumber(tmp)) {   /* Assume it's just a location */
+               if (!quotes_stripped && ast_isphonenumber(tmp)) {       /* Assume it's just a location */
                        name_start = NULL;
                        strcpy(instr, tmp); /* safe, because tmp will always be the same size or smaller than instr */
                        *location = instr;
index 43b760d89834ad5d3bdea8e5d3dd59b8d00fc852..d0788a4006fb621699cef97fa6968a3ed6ab1cde 100644 (file)
@@ -56,10 +56,14 @@ AST_TEST_DEFINE(parse_nominal)
                {"\"\" <number>", NULL, "number"},
                {"<number>", NULL, "number"},
                {"name", "name", NULL},
+               {" name", "name", NULL},
                {"\"name\"", "name", NULL},
+               {"\"*10\"", "*10", NULL},
+               {" \"*10\"", "*10", NULL},
                {"\"name\" <>", "name", NULL},
                {"name <>", "name", NULL},
                {"1234", NULL, "1234"},
+               {" 1234", NULL, "1234"},
                {"\"na\\\"me\" <number>", "na\"me", "number"},
        };
        char *name;