From 8b620c555bce19f7f1a4ad154ccfa02072e0392e Mon Sep 17 00:00:00 2001
From: Richard Mudgett <rmudgett@digium.com>
Date: Tue, 14 Jul 2015 14:36:42 -0500
Subject: [PATCH] res_parking: Fix crash if ATTENDEDTRANSFER set empty before
 Park.

setup_park_common_datastore() was assuming that a non-NULL string returned
for the ATTENDEDTRANSFER and BLINDTRANSFER channel variables are not empty
strings.  Things got crashy as a result.

* Made setup_park_common_datastore() treat the channel variable values the
same whether they are NULL or empty for ATTENDEDTRANSFER and
BLINDTRANSFER.

ASTERISK-25254 #close
Reported by: Richard Mudgett

Change-Id: I9a9c174b33f354f35f82cc6b7cea8303adbaf9c2
---
 res/parking/parking_applications.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/res/parking/parking_applications.c b/res/parking/parking_applications.c
index 5077474304..7ce8a3215e 100644
--- a/res/parking/parking_applications.c
+++ b/res/parking/parking_applications.c
@@ -349,8 +349,12 @@ static int setup_park_common_datastore(struct ast_channel *parkee, const char *p
 	attended_transfer = pbx_builtin_getvar_helper(parkee, "ATTENDEDTRANSFER");
 	blind_transfer = pbx_builtin_getvar_helper(parkee, "BLINDTRANSFER");
 
-	if (attended_transfer || blind_transfer) {
-		parker_dial_string = ast_strdupa(S_OR(attended_transfer, blind_transfer));
+	if (!ast_strlen_zero(attended_transfer)) {
+		parker_dial_string = ast_strdupa(attended_transfer);
+	} else if (!ast_strlen_zero(blind_transfer)) {
+		parker_dial_string = ast_strdupa(blind_transfer);
+		/* Ensure that attended_transfer is NULL and not an empty string. */
+		attended_transfer = NULL;
 	}
 
 	ast_channel_unlock(parkee);
-- 
GitLab