[PATCH] altair-lte: fix memory leak in PCO parsing code

Thieu Le thieule at chromium.org
Fri May 30 13:53:39 PDT 2014


This patch fixes memory leaks in PCO parsing code detected by LeakSanitizer.
---
 plugins/altair/mm-modem-helpers-altair-lte.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/plugins/altair/mm-modem-helpers-altair-lte.c b/plugins/altair/mm-modem-helpers-altair-lte.c
index b369e29..90b29e0 100644
--- a/plugins/altair/mm-modem-helpers-altair-lte.c
+++ b/plugins/altair/mm-modem-helpers-altair-lte.c
@@ -119,6 +119,7 @@ mm_altair_parse_cid (const gchar *response, GError **error)
     regex = g_regex_new ("\\%CGINFO:\\s*(\\d+)", G_REGEX_RAW, 0, NULL);
     g_assert (regex);
     if (!g_regex_match_full (regex, response, strlen (response), 0, 0, &match_info, error)) {
+        g_match_info_free (match_info);
         g_regex_unref (regex);
         return -1;
     }
@@ -155,8 +156,11 @@ altair_extract_vzw_pco_value (const gchar *pco_payload, GError **error)
                              0,
                              0,
                              &match_info,
-                             error))
+                             error)) {
+        g_match_info_free (match_info);
+        g_regex_unref (regex);
         return -1;
+    }
 
     if (!g_match_info_matches (match_info) ||
         !mm_get_uint_from_match_info (match_info, 1, &pco_value))
@@ -195,8 +199,11 @@ mm_altair_parse_vendor_pco_info (const gchar *pco_info,
                          G_REGEX_DOLLAR_ENDONLY | G_REGEX_RAW,
                          0, NULL);
     g_assert (regex);
-    if (!g_regex_match_full (regex, pco_info, strlen (pco_info), 0, 0, &match_info, error))
+    if (!g_regex_match_full (regex, pco_info, strlen (pco_info), 0, 0, &match_info, error)) {
+        g_match_info_free (match_info);
+        g_regex_unref (regex);
         return -1;
+    }
 
     num_matches = g_match_info_get_match_count (match_info);
     if (num_matches != 5) {
@@ -205,6 +212,8 @@ mm_altair_parse_vendor_pco_info (const gchar *pco_info,
                      MM_CORE_ERROR_FAILED,
                      "Failed to parse substrings, number of matches: %d",
                      num_matches);
+        g_match_info_free (match_info);
+        g_regex_unref (regex);
         return -1;
     }
 
@@ -237,9 +246,11 @@ mm_altair_parse_vendor_pco_info (const gchar *pco_info,
         }
 
         if (g_strcmp0 (pco_id, "FF00")) {
+            g_free (pco_id);
             g_match_info_next (match_info, error);
             continue;
         }
+        g_free (pco_id);
 
         pco_payload = mm_get_string_unquoted_from_match_info (match_info, 4);
         if (!pco_payload) {
@@ -252,6 +263,7 @@ mm_altair_parse_vendor_pco_info (const gchar *pco_info,
         }
 
         pco_value = altair_extract_vzw_pco_value (pco_payload, error);
+        g_free (pco_payload);
         break;
     }
 
-- 
1.8.3.2



More information about the ModemManager-devel mailing list