From e98835e43780e92cced22ad1ae8a66e7f4b7672e Mon Sep 17 00:00:00 2001
From: David Vossel <dvossel@digium.com>
Date: Wed, 9 Jun 2010 15:09:25 +0000
Subject: [PATCH] fixes crash in moh when cachertclasses flag is used

The result for moh_register was not verified to guarantee
the mohclass as added to the container.


(closes issue #16993)
Reported by: dmitri
Patches:
      res_musiconhold_rtclass2.patch uploaded by dmitri (license 1001)
      moh_crash2.diff uploaded by dvossel (license 671)
Tested by: dmitri




git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@269271 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 res/res_musiconhold.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c
index 4d2c9ec49a..3f28227570 100644
--- a/res/res_musiconhold.c
+++ b/res/res_musiconhold.c
@@ -1373,7 +1373,10 @@ static int local_ast_moh_start(struct ast_channel *chan, const char *mclass, con
 				 * has a pointer to a freed mohclass, so any operations involving the mohclass container would result in reading
 				 * invalid memory.
 				 */
-				moh_register(mohclass, 0, DONT_UNREF);
+				if (moh_register(mohclass, 0, DONT_UNREF) == -1) {
+					mohclass = mohclass_unref(mohclass, "unreffing mohclass failed to register");
+					return -1;
+				}
 			} else {
 				/* We don't register RT moh class, so let's init it manualy */
 
-- 
GitLab