From 203e34fb757e0d689170f5b938047c6b855aed95 Mon Sep 17 00:00:00 2001 From: Matthew Waters <matthew@centricular.com> Date: Fri, 18 Mar 2022 20:43:24 +1100 Subject: [PATCH] discoverer: chain up to parent finalize methods in all our types Fixes a memory leak: Direct leak of 32 byte(s) in 1 object(s) allocated from: #0 0x5ac5cd in malloc /src/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:129:3 #1 0x1007007 in g_malloc /work/glib-2.72.0/_builddir/../glib/gmem.c:125:13 #2 0xf82e82 in g_data_set_internal /work/glib-2.72.0/_builddir/../glib/gdataset.c:464:8 #3 0xf833f7 in g_datalist_id_set_data_full /work/glib-2.72.0/_builddir/../glib/gdataset.c:670:3 #4 0xef81be in g_object_notify_queue_freeze /work/glib-2.72.0/_builddir/../gobject/gobject.c:295:7 #5 0xef79c6 in g_object_unref /work/glib-2.72.0/_builddir/../gobject/gobject.c:3632:16 #6 0x5e58bf in LLVMFuzzerTestOneInput /src/gstreamer/ci/fuzzing/gst-discoverer.c:132:5 #7 0x4dd1a2 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:611:15 #8 0x4dc98a in fuzzer::Fuzzer::RunOne(unsigned char const*, unsigned long, bool, fuzzer::InputInfo*, bool, bool*) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:514:3 #9 0x4de6c4 in fuzzer::Fuzzer::ReadAndExecuteSeedCorpora(std::__Fuzzer::vector<fuzzer::SizedFile, std::__Fuzzer::allocator<fuzzer::SizedFile> >&) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:809:5 #10 0x4dea29 in fuzzer::Fuzzer::Loop(std::__Fuzzer::vector<fuzzer::SizedFile, std::__Fuzzer::allocator<fuzzer::SizedFile> >&) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerLoop.cpp:857:3 #11 0x4ce4a0 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerDriver.cpp:912:6 #12 0x4f6f52 in main /src/llvm-project/compiler-rt/lib/fuzzer/FuzzerMain.cpp:20:10 #13 0x7f1c709980b2 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x240b2) Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1984> --- .../gst-libs/gst/pbutils/gstdiscoverer-types.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstdiscoverer-types.c b/subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstdiscoverer-types.c index 418d69f85a..ac3e05bc50 100644 --- a/subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstdiscoverer-types.c +++ b/subprojects/gst-plugins-base/gst-libs/gst/pbutils/gstdiscoverer-types.c @@ -74,6 +74,8 @@ gst_discoverer_stream_info_finalize (GObject * object) if (info->misc) gst_structure_free (info->misc); + + G_OBJECT_CLASS (gst_discoverer_stream_info_parent_class)->finalize (object); } static void @@ -180,7 +182,8 @@ gst_discoverer_container_info_finalize (GObject * object) if (info->tags) gst_tag_list_unref (info->tags); - gst_discoverer_stream_info_finalize ((GObject *) info); + G_OBJECT_CLASS (gst_discoverer_container_info_parent_class)->finalize + (object); } static void @@ -388,6 +391,8 @@ gst_discoverer_info_finalize (GObject * object) g_free (info->cachefile); g_ptr_array_unref (info->missing_elements_details); + + G_OBJECT_CLASS (gst_discoverer_info_parent_class)->finalize (object); } static GstDiscovererInfo *