diff options
author | Victor Toso <victortoso@redhat.com> | 2022-02-15 10:40:22 +0100 |
---|---|---|
committer | Victor Toso <victortoso@redhat.com> | 2022-02-15 10:46:18 +0100 |
commit | c2c4fabfc609276558165d9388c23e4ff58ec584 (patch) | |
tree | a263e5d6d81dc3b3a6706401c66996faa9c7759e | |
parent | edc9d81aeff8bd44316af86c838e6fe378310636 (diff) | |
download | libosinfo-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.c | 1 |
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; |