summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Toso <victortoso@redhat.com>2022-02-15 10:40:22 +0100
committerVictor Toso <victortoso@redhat.com>2022-02-15 10:46:18 +0100
commitc2c4fabfc609276558165d9388c23e4ff58ec584 (patch)
treea263e5d6d81dc3b3a6706401c66996faa9c7759e
parentedc9d81aeff8bd44316af86c838e6fe378310636 (diff)
downloadlibosinfo-c2c4fabfc609276558165d9388c23e4ff58ec584.tar.gz
loader: Fix leak of xmlNodePtr *
The pointer is used as output parameter of osinfo_loader_nodeset() which sets it to NULL before using it. The caller should free its contents before reusing it. ==382836== 104 bytes in 8 blocks are definitely lost in loss record 2,097 of 2,333 ==382836== at 0x4849464: calloc (vg_replace_malloc.c:1328) ==382836== by 0x496E510: g_malloc0 (in /usr/lib64/libglib-2.0.so.0.7000.3) ==382836== by 0x4888DD7: osinfo_loader_nodeset (osinfo_loader.c:237) ==382836== by 0x488A98E: osinfo_loader_os (osinfo_loader.c:1661) ==382836== by 0x488A98E: osinfo_loader_root (osinfo_loader.c:1884) ==382836== by 0x488A98E: osinfo_loader_process_xml (osinfo_loader.c:1973) ==382836== by 0x488A98E: osinfo_loader_process_file_reg_xml (osinfo_loader.c:2182) ==382836== by 0x488D07A: osinfo_loader_process_list (osinfo_loader.c:2515) ==382836== by 0x488D27F: osinfo_loader_process_path (osinfo_loader.c:2587) ==382836== by 0x402A61: test_loaded (test-image.c:59) ==382836== by 0x4992BD5: ??? (in /usr/lib64/libglib-2.0.so.0.7000.3) ==382836== by 0x49928FA: ??? (in /usr/lib64/libglib-2.0.so.0.7000.3) ==382836== by 0x49930A9: g_test_run_suite (in /usr/lib64/libglib-2.0.so.0.7000.3) ==382836== by 0x49930D0: g_test_run (in /usr/lib64/libglib-2.0.so.0.7000.3) ==382836== by 0x402386: main (test-image.c:114) Signed-off-by: Victor Toso <victortoso@redhat.com>
-rw-r--r--osinfo/osinfo_loader.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/osinfo/osinfo_loader.c b/osinfo/osinfo_loader.c
index e244b3f..fa68334 100644
--- a/osinfo/osinfo_loader.c
+++ b/osinfo/osinfo_loader.c
@@ -1679,6 +1679,7 @@ static void osinfo_loader_os(OsinfoLoader *loader,
g_object_unref(firmware);
}
+ g_clear_pointer(&nodes, g_free);
nnodes = osinfo_loader_nodeset("./media", loader, ctxt, &nodes, err);
if (error_is_set(err))
goto cleanup;