From 1ac4c22d9e76d7e778ee4676d9916605f56d2fe2 Mon Sep 17 00:00:00 2001
From: George Yang <george.yang@iopsys.eu>
Date: Thu, 21 Mar 2024 09:30:27 +0000
Subject: [PATCH] Fix a crash issue when wan link is disconnected

---
 res/res_pjsip/pjsip_resolver.c        | 2 +-
 res/res_pjsip_outbound_registration.c | 3 ++-
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/res/res_pjsip/pjsip_resolver.c b/res/res_pjsip/pjsip_resolver.c
index eb370117e5..5ea8d0dc79 100644
--- a/res/res_pjsip/pjsip_resolver.c
+++ b/res/res_pjsip/pjsip_resolver.c
@@ -231,7 +231,7 @@ void ast_sip_resolve_track_cur_addr(pjsip_tx_data *tdata)
 {
 	struct host_track_entry *host = NULL;
 
-	if (!pj_strlen(&tdata->dest_info.name))
+	if (!tdata || !pj_strlen(&tdata->dest_info.name))
 		return;
 
 	AST_LIST_LOCK(&sip_resolve_track);
diff --git a/res/res_pjsip_outbound_registration.c b/res/res_pjsip_outbound_registration.c
index a4339f3df7..b7ef2b0e2b 100644
--- a/res/res_pjsip_outbound_registration.c
+++ b/res/res_pjsip_outbound_registration.c
@@ -1647,7 +1647,8 @@ static int handle_registration_response(void *data)
 		} else {
 			unsigned int retry_interval;
 			// If tried all addresses for 3 times, then start to use retry interval2, otherwise interval1
-			if (++response->client_state->failover_retries % (3 * response->old_request->dest_info.addr.count))
+			++response->client_state->failover_retries;
+			if (!response->old_request || response->client_state->failover_retries % (3 * response->old_request->dest_info.addr.count))
 				retry_interval = response->client_state->failover_retry_interval1;
 			else
 				retry_interval = response->client_state->failover_retry_interval2;
-- 
GitLab