9fdfac7
From: rvlad-patrascu <vladp@opensips.org>
9fdfac7
Date: Fri, 6 Oct 2017 19:47:12 +0300
9fdfac7
Subject: [PATCH] acc: fix possbile memory leak when calling do_accounting() on
9fdfac7
 CANCEL while "report_cancels" modparam not set
9fdfac7
9fdfac7
(cherry picked from commit aa32bf1b6909c8471eea8c2170a3a2a3f94be1cf)
9fdfac7
9fdfac7
Conflicts:
9fdfac7
	modules/acc/acc_logic.c
9fdfac7
9fdfac7
diff --git a/modules/acc/acc_logic.c b/modules/acc/acc_logic.c
9fdfac7
index 47daf4204..2072afb29 100644
9fdfac7
--- a/modules/acc/acc_logic.c
9fdfac7
+++ b/modules/acc/acc_logic.c
9fdfac7
@@ -1086,6 +1086,17 @@ int w_do_acc_3(struct sip_msg* msg, char* type_p, char* flags_p, char* table_p)
9fdfac7
 		return -1;
9fdfac7
 	}
9fdfac7
 
9fdfac7
+	if (!msg) {
9fdfac7
+		LM_ERR("no SIP message\n");
9fdfac7
+		return -1;
9fdfac7
+	}
9fdfac7
+
9fdfac7
+	if (skip_cancel(msg)) {
9fdfac7
+		LM_WARN("do_accounting() called on CANCEL but 'report_cancels' modparam"
9fdfac7
+				" not set - no accounting will be done for this transaction!\n");
9fdfac7
+		return 1;
9fdfac7
+	}
9fdfac7
+
9fdfac7
 	acc_param = (acc_type_param_t *)type_p;
9fdfac7
 	if (acc_param->t == DO_ACC_PARAM_TYPE_VALUE) {
9fdfac7
 		type = acc_param->u.ival;
9fdfac7
@@ -1177,8 +1188,7 @@ int w_do_acc_3(struct sip_msg* msg, char* type_p, char* flags_p, char* table_p)
9fdfac7
 	}
9fdfac7
 
9fdfac7
 
9fdfac7
-	if ( msg && !skip_cancel(msg) &&
9fdfac7
-	(is_acc_on(*flag_mask_p) || is_mc_acc_on(*flag_mask_p)) ) {
9fdfac7
+	if (is_acc_on(*flag_mask_p) || is_mc_acc_on(*flag_mask_p)) {
9fdfac7
 		/* do some parsing in advance */
9fdfac7
 		if (acc_preparse_req(msg)<0)
9fdfac7
 			return -1;