Merged revisions 160943 via svnmerge from
authorMark Michelson <mmichelson@digium.com>
Thu, 4 Dec 2008 16:45:06 +0000 (16:45 +0000)
committerMark Michelson <mmichelson@digium.com>
Thu, 4 Dec 2008 16:45:06 +0000 (16:45 +0000)
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r160943 | mmichelson | 2008-12-04 10:44:18 -0600 (Thu, 04 Dec 2008) | 15 lines

Fix a callerid parsing issue. If someone formatted callerid like the
following: "name <number>" (including the quotation marks), then the parts
would be parsed as

name: "name
number: number

This is because the closing quotation mark was not discovered since the number
and everything after was parsed out of the string earlier. Now, there is a check
to see if the closing quote occurs after the number, so that we can know if we
should strip off the opening quote on the name.

Closes AST-158

........

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

main/callerid.c

index 6a086ad..603ac27 100644 (file)
@@ -1001,7 +1001,6 @@ int ast_is_shrinkable_phonenumber(const char *exten)
  * input                   location        name
  * " foo bar " <123>       123             ' foo bar ' (with spaces around)
  * " foo bar "             NULL            'foo bar' (without spaces around)
- * " foo bar  <123>"       123             '" foo bar'
  * The parsing of leading and trailing space/quotes should be more consistent.
  */
 int ast_callerid_parse(char *instr, char **name, char **location)
@@ -1015,6 +1014,15 @@ int ast_callerid_parse(char *instr, char **name, char **location)
                if ((ns = strchr(instr, '"')) && (ne = strchr(ns + 1, '"'))) {
                        *ns = *ne = '\0';       /* trim off the quotes */
                        *name = ns + 1;         /* and this is the name */
+               } else if (ns) {
+                       /* An opening quote was found but no closing quote was. The closing
+                        * quote may actually be after the end of the bracketed number
+                        */
+                       if (strchr(le + 1, '\"')) {
+                               *ns = '\0';
+                               *name = ns + 1;
+                               ast_trim_blanks(*name);
+                       }
                } else { /* no quotes, trim off leading and trailing spaces */
                        *name = ast_skip_blanks(instr);
                        ast_trim_blanks(*name);