vcl/unx/gtk3/gtkinst.cxx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
New commits: commit b417954503efe6f61c42f9d5991148b80ffa3e44 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Fri Mar 21 23:53:30 2025 -0700 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Sat Mar 22 16:59:49 2025 +0100 gtk3: Fix memleak in get_{primary,secondary}_text Quoting from the g_object_get doc [1]: > In general, a copy is made of the property contents and the caller is > responsible for freeing the memory in the appropriate manner for the > type, for instance by calling g_free() or g_object_unref(). This fixes these 2 memory leaks reported by valgrind when triggering the "Save Document?" dialog in Writer: ==502039== 52 bytes in 1 blocks are definitely lost in loss record 10,157 of 19,684 ==502039== at 0x4844818: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==502039== by 0x1306B2C1: g_malloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.0) ==502039== by 0x13087E72: g_strdup (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.0) ==502039== by 0x12FE6D7A: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.8400.0) ==502039== by 0x12FC58BB: g_object_get_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.8400.0) ==502039== by 0x12FC5DB4: g_object_get (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.8400.0) ==502039== by 0x186EBFD6: (anonymous namespace)::get_secondary_text(_GtkMessageDialog*) (gtkinst.cxx:4788) ==502039== by 0x186F3B45: (anonymous namespace)::GtkInstanceBuilder::postprocess_widget(_GtkWidget*) (gtkinst.cxx:24309) ==502039== by 0x186ECCC0: (anonymous namespace)::GtkInstanceBuilder::postprocess(void*, void*) (gtkinst.cxx:24343) ==502039== by 0x1308714F: g_slist_foreach (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.0) ==502039== by 0x186EC43D: (anonymous namespace)::GtkInstanceBuilder::GtkInstanceBuilder(_GtkWidget*, std::basic_string_view<char16_t, std::char_traits<char16_t> >, rtl::OUString const&, SystemChildWindow*, bool) (gtkinst.cxx:24426) ==502039== by 0x186D3089: std::__detail::_MakeUniq<(anonymous namespace)::GtkInstanceBuilder>::__single_object std::make_unique<(anonymous namespace)::GtkInstanceBuilder, _GtkWidget*&, rtl::OUString const&, rtl::OUString const&, decltype(nullptr), bool>(_GtkWidget*&, rtl::OUString const&, rtl::OUString const&, decltype(nullptr)&&, bool&&) (unique_ptr.h:1077) ==502039== ==502039== 54 bytes in 1 blocks are definitely lost in loss record 10,163 of 19,684 ==502039== at 0x4844818: malloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so) ==502039== by 0x1306B2C1: g_malloc (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.0) ==502039== by 0x13087E72: g_strdup (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.0) ==502039== by 0x12FE6D7A: ??? (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.8400.0) ==502039== by 0x12FC58BB: g_object_get_valist (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.8400.0) ==502039== by 0x12FC5DB4: g_object_get (in /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0.8400.0) ==502039== by 0x186EBE36: (anonymous namespace)::get_primary_text(_GtkMessageDialog*) (gtkinst.cxx:4767) ==502039== by 0x186F3A92: (anonymous namespace)::GtkInstanceBuilder::postprocess_widget(_GtkWidget*) (gtkinst.cxx:24308) ==502039== by 0x186ECCC0: (anonymous namespace)::GtkInstanceBuilder::postprocess(void*, void*) (gtkinst.cxx:24343) ==502039== by 0x1308714F: g_slist_foreach (in /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0.8400.0) ==502039== by 0x186EC43D: (anonymous namespace)::GtkInstanceBuilder::GtkInstanceBuilder(_GtkWidget*, std::basic_string_view<char16_t, std::char_traits<char16_t> >, rtl::OUString const&, SystemChildWindow*, bool) (gtkinst.cxx:24426) ==502039== by 0x186D3089: std::__detail::_MakeUniq<(anonymous namespace)::GtkInstanceBuilder>::__single_object std::make_unique<(anonymous namespace)::GtkInstanceBuilder, _GtkWidget*&, rtl::OUString const&, rtl::OUString const&, decltype(nullptr), bool>(_GtkWidget*&, rtl::OUString const&, rtl::OUString const&, decltype(nullptr)&&, bool&&) (unique_ptr.h:1077) [1] https://docs.gtk.org/gobject/method.Object.get.html Change-Id: I0d41a400440b9a1208e9f63d5529a14bc5cf0b1e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183218 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx index b2c6600f8b54..d5b0da792707 100644 --- a/vcl/unx/gtk3/gtkinst.cxx +++ b/vcl/unx/gtk3/gtkinst.cxx @@ -4763,7 +4763,7 @@ namespace OUString get_primary_text(GtkMessageDialog* pMessageDialog) { - gchar* pText = nullptr; + g_autofree char* pText = nullptr; g_object_get(G_OBJECT(pMessageDialog), "text", &pText, nullptr); return OUString(pText, pText ? strlen(pText) : 0, RTL_TEXTENCODING_UTF8); } @@ -4784,7 +4784,7 @@ namespace OUString get_secondary_text(GtkMessageDialog* pMessageDialog) { - gchar* pText = nullptr; + g_autofree char* pText = nullptr; g_object_get(G_OBJECT(pMessageDialog), "secondary-text", &pText, nullptr); return OUString(pText, pText ? strlen(pText) : 0, RTL_TEXTENCODING_UTF8); }