[Libosinfo] [PATCH 05/14] productfilter: Fix GDate leak

Christophe Fergeau cfergeau at redhat.com
Wed Jun 8 10:01:09 UTC 2016


osinfo_productfilter_matches_default() was not freeing the GDate
instances returned by osinfo_product_get_{release,eol}_date().

This fixes:

==14496== 16 bytes in 2 blocks are definitely lost in loss record 141 of 382
==14496==    at 0x4C2BBAD: malloc (vg_replace_malloc.c:299)
==14496==    by 0x684FE58: g_malloc (gmem.c:94)
==14496==    by 0x6830114: g_date_new_dmy (gdate.c:289)
==14496==    by 0x5337012: date_from_string (osinfo_product.c:345)
==14496==    by 0x533706D: osinfo_product_get_release_date (osinfo_product.c:354)
==14496==    by 0x5337F6F: osinfo_productfilter_matches_default (osinfo_productfilter.c:279)
==14496==    by 0x532CC8D: osinfo_filter_matches (osinfo_filter.c:288)
==14496==    by 0x532D51B: osinfo_list_add_filtered (osinfo_list.c:272)
==14496==    by 0x532DD52: osinfo_list_new_filtered (osinfo_list.c:443)
==14496==    by 0x401B35: test_supportdate (test-product.c:140)
==14496==    by 0x5117535: tcase_run_tfun_nofork.isra.9 (check_run.c:390)
==14496==    by 0x51178EB: srunner_iterate_tcase_tfuns (check_run.c:231)
==14496==    by 0x51178EB: srunner_run_tcase (check_run.c:373)
==14496==    by 0x51178EB: srunner_iterate_suites (check_run.c:195)
==14496==    by 0x51178EB: srunner_run (check_run.c:782)
==14496==    by 0x40166E: main (test-product.c:219)
==14496==-
==14496== 16 bytes in 2 blocks are definitely lost in loss record 142 of 382
==14496==    at 0x4C2BBAD: malloc (vg_replace_malloc.c:299)
==14496==    by 0x684FE58: g_malloc (gmem.c:94)
==14496==    by 0x6830114: g_date_new_dmy (gdate.c:289)
==14496==    by 0x5337012: date_from_string (osinfo_product.c:345)
==14496==    by 0x53370C8: osinfo_product_get_eol_date (osinfo_product.c:364)
==14496==    by 0x5337F92: osinfo_productfilter_matches_default (osinfo_productfilter.c:280)
==14496==    by 0x532CC8D: osinfo_filter_matches (osinfo_filter.c:288)
==14496==    by 0x532D51B: osinfo_list_add_filtered (osinfo_list.c:272)
==14496==    by 0x532DD52: osinfo_list_new_filtered (osinfo_list.c:443)
==14496==    by 0x401B35: test_supportdate (test-product.c:140)
==14496==    by 0x5117535: tcase_run_tfun_nofork.isra.9 (check_run.c:390)
==14496==    by 0x51178EB: srunner_iterate_tcase_tfuns (check_run.c:231)
==14496==    by 0x51178EB: srunner_run_tcase (check_run.c:373)
==14496==    by 0x51178EB: srunner_iterate_suites (check_run.c:195)
==14496==    by 0x51178EB: srunner_run (check_run.c:782)
==14496==    by 0x40166E: main (test-product.c:219)
---
 osinfo/osinfo_productfilter.c | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/osinfo/osinfo_productfilter.c b/osinfo/osinfo_productfilter.c
index 9dbffa2..70f4a91 100644
--- a/osinfo/osinfo_productfilter.c
+++ b/osinfo/osinfo_productfilter.c
@@ -276,16 +276,26 @@ static gboolean osinfo_productfilter_matches_default(OsinfoFilter *filter, Osinf
 
     if (productfilter->priv->supportDate) {
         GDate *when = productfilter->priv->supportDate;
-        GDate *release = osinfo_product_get_release_date(OSINFO_PRODUCT(entity));
-        GDate *eol = osinfo_product_get_eol_date(OSINFO_PRODUCT(entity));
+        GDate *release;
+        GDate *eol;
 
-        if (release &&
-            (g_date_compare(release, when) > 0))
-            return FALSE;
+        release = osinfo_product_get_release_date(OSINFO_PRODUCT(entity));
+        if (release != NULL) {
+            gboolean newer;
+            newer = (g_date_compare(release, when) > 0);
+            g_date_free(release);
+            if (newer)
+                return FALSE;
+        }
 
-        if (eol &&
-            (g_date_compare(eol, when) < 0))
-            return FALSE;
+        eol = osinfo_product_get_eol_date(OSINFO_PRODUCT(entity));
+        if (eol != NULL) {
+            gboolean older;
+            older = (g_date_compare(eol, when) < 0);
+            g_date_free(eol);
+            if (older)
+                return FALSE;
+        }
     }
 
     return args.matched;
-- 
2.7.4




More information about the Libosinfo mailing list