diff --git a/main/pbx.c b/main/pbx.c index 548e20268be7ee4bc1bb5cc645b0143b2257925e..b5f6ddd01771080bc654b93cdae963cfb1172426 100644 --- a/main/pbx.c +++ b/main/pbx.c @@ -1091,19 +1091,30 @@ static void new_find_extension(const char *str, struct scoreboard *score, struct static struct match_char *already_in_tree(struct match_char *current, char *pat) { struct match_char *t; + if (!current) return 0; - for (t=current; t; t=t->alt_char) { - if (strcmp(pat,t->x) == 0) /* uh, we may want to sort exploded [] contents to make matching easy */ + + for (t = current; t; t = t->alt_char) { + if (!strcmp(pat, t->x)) /* uh, we may want to sort exploded [] contents to make matching easy */ return t; } + return 0; } static struct match_char *add_pattern_node(struct ast_context *con, struct match_char *current, char *pattern, int is_pattern, int already, int specificity) { - struct match_char *m = ast_calloc(1,sizeof(struct match_char)); - m->x = ast_strdup(pattern); + struct match_char *m; + + if (!(m = ast_calloc(1, sizeof(*m)))) + return NULL; + + if (!(m->x = ast_strdup(pattern))) { + ast_free(m); + return NULL; + } + m->is_pattern = is_pattern; if (specificity == 1 && is_pattern && pattern[0] == 'N') m->specificity = 98; @@ -1133,6 +1144,7 @@ static struct match_char *add_pattern_node(struct ast_context *con, struct match } } } + return m; }