From: PM Holtmo Date: Fri, 23 May 2025 14:10:25 +0000 (+0200) Subject: lib/cpp: Fix memory leaks in LldpCtl X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=241ed3591ed1bf168b2e510fa21aafce7df82c96;p=thirdparty%2Flldpd.git lib/cpp: Fix memory leaks in LldpCtl LldpCtl::GetInterfaces() and LldpAtom::GetAtomList() did not decrement ref for retrieved atoms Ensure parent atom outlives its children atoms --- diff --git a/src/lib/lldpctl.hpp b/src/lib/lldpctl.hpp index 7f7eabd6..e2e301a7 100644 --- a/src/lib/lldpctl.hpp +++ b/src/lib/lldpctl.hpp @@ -233,8 +233,10 @@ class LldpAtom { lldpctl_atom_t *atom; lldpctl_atom_foreach(it, atom) { - list.emplace_back(atom, true, conn_); + list.emplace_back(atom, true, conn_, + std::make_unique(*this)); } + ::lldpctl_atom_dec_ref(it); return list; } @@ -364,7 +366,7 @@ class LldpCtl { std::list GetInterfaces() const { - const auto &it { ::lldpctl_get_interfaces(conn_.get()) }; + auto *it { ::lldpctl_get_interfaces(conn_.get()) }; std::list list; lldpctl_atom_t *atom; @@ -372,6 +374,7 @@ class LldpCtl { { list.emplace_back(atom, true, conn_); } + ::lldpctl_atom_dec_ref(it); return list; }