From f66f21895f965ed6389daa1cc90f466f7fc1b155 Mon Sep 17 00:00:00 2001
From: Sean Bright <sean.bright@gmail.com>
Date: Thu, 11 Apr 2019 12:03:07 -0400
Subject: [PATCH] res_ael: Fix pattern matching against literal '+'

When generating the regular expression that matches against existing
extensions, we need to escape literal characters that can also be
regular expression metacharacters. This was already being done for '*'
but we need to do the same for '+'.

In passing, remove some unreachable code - strcmp() is already run
immediately when entering extension_matches().

ASTERISK-14939 #close
Reported by: klaus3000

Change-Id: I8d2cccb3479168fba1b0a6704c52198b396468f1
---
 res/ael/pval.c | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/res/ael/pval.c b/res/ael/pval.c
index bbfeb2d763..bcac63a3e3 100644
--- a/res/ael/pval.c
+++ b/res/ael/pval.c
@@ -760,10 +760,10 @@ static int extension_matches(pval *here, const char *exten, const char *pattern)
 				*r++ = '.';
 				*r++ = '*';
 				break;
-			case '*':
+			case '*': /* regex metacharacter */
+			case '+': /* regex metacharacter */
 				*r++ = '\\';
-				*r++ = '*';
-				break;
+				/* fall through */
 			default:
 				*r++ = *p;
 				break;
@@ -793,14 +793,9 @@ static int extension_matches(pval *here, const char *exten, const char *pattern)
 			   exten, pattern); */
 			return 1;
 		}
-
-
-	} else {
-		if ( strcmp(exten,pattern) == 0 ) {
-			return 1;
-		} else
-			return 0;
 	}
+
+	return 0;
 }
 
 
-- 
GitLab