ims_ipsec_pcscf: Fixes for some memory related issues
authorTsvetomir Dimitrov <tsv.dimitrov@gmail.com>
Fri, 12 Oct 2018 10:53:14 +0000 (10:53 +0000)
committerTsvetomir Dimitrov <tsv.dimitrov@gmail.com>
Fri, 12 Oct 2018 10:55:47 +0000 (10:55 +0000)
src/modules/ims_ipsec_pcscf/cmd.c
src/modules/ims_ipsec_pcscf/ipsec.c
src/modules/ims_ipsec_pcscf/spi_list.c
src/modules/ims_ipsec_pcscf/spi_list_tests.c

index 46056b9..e0eeea8 100644 (file)
@@ -170,6 +170,10 @@ static int fill_contact(struct pcontact_info* ci, struct sip_msg* m)
         ci->via_prot = proto;
         ci->aor = cb->contacts->uri;
     }
+    else {
+        LM_ERR("fill_contact(): Unknown first line type: %d\n", m->first_line.type);
+        return -1;
+    }
 
 
     char* srcip = NULL;
index 6b32e68..55eced7 100644 (file)
@@ -265,8 +265,6 @@ int add_policy(struct mnl_socket* mnl_socket, str src_addr_param, str dest_addr_
     char* src_addr = NULL;
     char* dest_addr = NULL;
 
-    //printf("Adding Policy\n");
-
     memset(l_msg_buf, 0, sizeof(l_msg_buf));
     memset(l_tmpls_buf, 0, sizeof(l_tmpls_buf));
 
@@ -421,9 +419,14 @@ int remove_policy(struct mnl_socket* mnl_socket, str src_addr_param, str dest_ad
     if(mnl_socket_sendto(mnl_socket, &req.n, req.n.nlmsg_len) < 0)
     {
         LM_ERR("Failed to send Netlink message, error: %s\n", strerror(errno));
+        pkg_free(src_addr);
+        pkg_free(dest_addr);
         return -1;
     }
 
+    pkg_free(src_addr);
+    pkg_free(dest_addr);
+
     return 0;
 }
 
index f57a45b..ca687fa 100644 (file)
@@ -32,6 +32,16 @@ spi_list_t create_list()
     return lst;
 }
 
+void destroy_list(spi_list_t lst)
+{
+    spi_node_t* l = lst.head;
+    while(l) {
+        spi_node_t* n = l->next;
+        free(l);
+        l = n;
+    }
+}
+
 int spi_add(spi_list_t* list, uint32_t id)
 {
     // create new node
@@ -118,6 +128,7 @@ int spi_remove(spi_list_t* list, uint32_t id)
             }
 
             free(t);
+            return 0;
         }
 
         prev = curr;
index 876c474..c8afcd3 100644 (file)
@@ -91,6 +91,8 @@ void case1() // One element list
     spi_add(&list, 1);
 
     check(&list, exp, sizeof(exp)/sizeof(int), __func__);
+
+    destroy_list(list);
 }
 
 void case2() // Two element list
@@ -103,6 +105,8 @@ void case2() // Two element list
     spi_add(&list, 2);
 
     check(&list, exp, sizeof(exp)/sizeof(int), __func__);
+
+    destroy_list(list);
 }
 
 void case3() // Three element list
@@ -116,6 +120,8 @@ void case3() // Three element list
     spi_add(&list, 3);
 
     check(&list, exp, sizeof(exp)/sizeof(int), __func__);
+
+    destroy_list(list);
 }
 
 void case4() // Delete head
@@ -131,6 +137,8 @@ void case4() // Delete head
     spi_remove(&list, 1);
 
     check(&list, exp, sizeof(exp)/sizeof(int), __func__);
+
+    destroy_list(list);
 }
 
 
@@ -147,6 +155,8 @@ void case5() // Delete tail
     spi_remove(&list, 3);
 
     check(&list, exp, sizeof(exp)/sizeof(int), __func__);
+
+    destroy_list(list);
 }
 
 void case6() // Delete between
@@ -162,6 +172,8 @@ void case6() // Delete between
     spi_remove(&list, 2);
 
     check(&list, exp, sizeof(exp)/sizeof(int), __func__);
+
+    destroy_list(list);
 }
 
 void case7() // Out of order add
@@ -175,6 +187,8 @@ void case7() // Out of order add
     spi_add(&list, 3);
 
     check(&list, exp, sizeof(exp)/sizeof(int), __func__);
+
+    destroy_list(list);
 }
 
 void case8() //Random operations
@@ -193,6 +207,8 @@ void case8() //Random operations
     spi_remove(&list, 3);
 
     check(&list, exp, sizeof(exp)/sizeof(int), __func__);
+
+    destroy_list(list);
 }
 
 void case9() // Empty list
@@ -210,6 +226,8 @@ void case9() // Empty list
     spi_remove(&list, 3);
 
     check(&list, exp, sizeof(exp)/sizeof(int), __func__);
+
+    destroy_list(list);
 }
 
 
@@ -226,6 +244,8 @@ void case10() //No duplicates
     spi_add(&list, 3);
 
     check(&list, exp, sizeof(exp)/sizeof(int), __func__);
+
+    destroy_list(list);
 }
 
 void case11() //No duplicates
@@ -241,6 +261,8 @@ void case11() //No duplicates
     spi_add(&list, 3);
 
     check(&list, exp, sizeof(exp)/sizeof(int), __func__);
+
+    destroy_list(list);
 }
 
 void case12() //No duplicates
@@ -255,6 +277,8 @@ void case12() //No duplicates
     spi_add(&list, 3);
 
     check(&list, exp, sizeof(exp)/sizeof(int), __func__);
+
+    destroy_list(list);
 }
 
 void case13() //No duplicates
@@ -269,6 +293,8 @@ void case13() //No duplicates
     spi_add(&list, 1);
 
     check(&list, exp, sizeof(exp)/sizeof(int), __func__);
+
+    destroy_list(list);
 }
 
 void case14()
@@ -288,6 +314,8 @@ void case14()
     }
 
     printf("%s: OK\n", __func__);
+
+    destroy_list(list);
 }