From 0774d9f9aa663b42d9a40a15d017c817c12e3a5f Mon Sep 17 00:00:00 2001
From: Nathan Bruning <nathan@iperity.com>
Date: Fri, 11 Dec 2020 00:06:56 +0100
Subject: [PATCH] res_musiconhold: Don't crash when real-time doesn't return
 any entries

ASTERISK-29211 #close

Change-Id: Ifbf0a4f786ab2a52342f9d1a1db4c9907f069877
---
 res/res_musiconhold.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c
index db7dde71ad..8ac3b927cf 100644
--- a/res/res_musiconhold.c
+++ b/res/res_musiconhold.c
@@ -1613,18 +1613,21 @@ static struct ast_variable *load_realtime_musiconhold(const char *name)
 			char *category = NULL;
 			size_t entry_count = 0;
 
-			while ((category = ast_category_browse(entries, category))) {
-				const char *entry = ast_variable_retrieve(entries, category, "entry");
-
-				if (entry) {
-					struct ast_variable *dup = ast_variable_new("entry", entry, "");
-					if (dup) {
-						entry_count++;
-						ast_variable_list_append(&var, dup);
+			/* entries is NULL if there are no results */
+			if (entries) {
+				while ((category = ast_category_browse(entries, category))) {
+					const char *entry = ast_variable_retrieve(entries, category, "entry");
+
+					if (entry) {
+						struct ast_variable *dup = ast_variable_new("entry", entry, "");
+						if (dup) {
+							entry_count++;
+							ast_variable_list_append(&var, dup);
+						}
 					}
 				}
+				ast_config_destroy(entries);
 			}
-			ast_config_destroy(entries);
 
 			if (entry_count == 0) {
 				/* Behave as though this class doesn't exist */
-- 
GitLab