From 464f5bbb955cab48f3f3293e5551e783a8395d67 Mon Sep 17 00:00:00 2001 From: pelijah Date: Sun, 5 May 2024 21:52:30 +0300 Subject: [PATCH] Fix double free issue in bin_luac.c (#4472) --- librz/bin/p/bin_luac.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/librz/bin/p/bin_luac.c b/librz/bin/p/bin_luac.c index 4f490d1923..9bf435894e 100644 --- a/librz/bin/p/bin_luac.c +++ b/librz/bin/p/bin_luac.c @@ -133,12 +133,22 @@ static RzPVector /**/ *strings(RzBinFile *bf) { return NULL; } + RzPVector *pvec = rz_pvector_new((RzPVectorFree)rz_bin_string_free); + if (!pvec || !rz_pvector_reserve(pvec, rz_list_length(bin_info_obj->string_list))) { + rz_pvector_free(pvec); + return NULL; + } RzListIter *iter; RzBinString *bstr; - RzPVector *pvec = rz_pvector_new((RzPVectorFree)bin_info_obj->string_list->free); rz_list_foreach (bin_info_obj->string_list, iter, bstr) { - rz_pvector_push(pvec, bstr); + if (bstr) { + rz_pvector_push(pvec, bstr); + } } + RzListFree free_cb = bin_info_obj->string_list->free; + bin_info_obj->string_list->free = NULL; + rz_list_purge(bin_info_obj->string_list); + bin_info_obj->string_list->free = free_cb; return pvec; }