From 097d78cab146e0197972ba06c076d4af682c27c0 Mon Sep 17 00:00:00 2001
From: Dong Anyuan <donganyuan@cn.fujitsu.com>
Date: Thu, 20 Jun 2019 10:51:06 +0900
Subject: [PATCH] Fix Coverity Scan CID 300393 (Variable copy going out of
 scope leaks the storage it points to.)

---
 .../MAC/flexran_agent_mac_internal.c          | 68 +++++++++++++++++++
 1 file changed, 68 insertions(+)

diff --git a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c
index 2a7d1fe186..890067aab9 100644
--- a/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c
+++ b/openair2/ENB_APP/CONTROL_MODULES/MAC/flexran_agent_mac_internal.c
@@ -555,6 +555,74 @@ Protocol__FlexDlCsi * copy_csi_report(Protocol__FlexDlCsi * original) {
   return copy;
 
  error:
+  if (copy != NULL) {
+      if ((copy->p11csi != NULL) && (copy->p11csi->wb_cqi != NULL)) {
+          free(copy->p11csi->wb_cqi);
+          copy->p11csi->wb_cqi = NULL;
+      }
+      if (copy->p21csi != NULL) {
+          if (copy->p21csi->wb_cqi != NULL) {
+              free(copy->p21csi->wb_cqi);
+              copy->p21csi->wb_cqi = NULL;
+          }
+          if (copy->p21csi->sb_cqi != NULL) {
+              free(copy->p21csi->sb_cqi);
+              copy->p21csi->sb_cqi = NULL;
+          }
+      }
+      if (copy->a12csi != NULL) {
+          if (copy->a12csi->wb_cqi != NULL) {
+              free(copy->a12csi->wb_cqi);
+              copy->a12csi->wb_cqi = NULL;
+          }
+          if (copy->a12csi->sb_pmi != NULL) {
+              free(copy->a12csi->sb_pmi);
+              copy->a12csi->sb_pmi = NULL;
+          }
+      }
+      if (copy->a22csi != NULL) {
+          if (copy->a22csi->wb_cqi != NULL) {
+              free(copy->a22csi->wb_cqi);
+              copy->a22csi->wb_cqi = NULL;
+          }
+          if (copy->a22csi->sb_cqi != NULL) {
+              free(copy->a22csi->sb_cqi);
+              copy->a22csi->sb_cqi = NULL;
+          }
+          if (copy->a22csi->sb_list != NULL) {
+              free(copy->a22csi->sb_list);
+              copy->a22csi->sb_list = NULL;
+          }
+      }
+      if ((copy->a20csi != NULL) && (copy->a20csi->sb_list != NULL)) {
+          free(copy->a20csi->sb_list);
+          copy->a20csi->sb_list = NULL;
+      }
+      if ((copy->a30csi != NULL) && (copy->a30csi->sb_cqi != NULL)) {
+          free(copy->a30csi->sb_cqi);
+          copy->a30csi->sb_cqi = NULL;
+      }
+      if (copy->a31csi != NULL) {
+          if (copy->a31csi->wb_cqi != NULL) {
+              free(copy->a31csi->wb_cqi);
+              copy->a31csi->wb_cqi = NULL;
+          }
+          if (copy->a31csi->sb_cqi != NULL) {
+              for (i = 0; i < copy->a31csi->n_sb_cqi; i++) {
+                  if (copy->a31csi->sb_cqi[i] != NULL) {
+                      if (copy->a31csi->sb_cqi[i]->sb_cqi != NULL) {
+                          free(copy->a31csi->sb_cqi[i]->sb_cqi);
+                      }
+                      free(copy->a31csi->sb_cqi[i]);
+                  }
+              }
+              free(copy->a31csi->sb_cqi);
+              copy->a31csi->sb_cqi = NULL;
+          }
+      }
+      free(copy);
+      copy = NULL;
+  }
   return NULL;
 }
 
-- 
GitLab