From fde59b99e8c40031186ee9845ea0cfa9f05e7ebf Mon Sep 17 00:00:00 2001 From: Andrew Gregory Date: Sun, 4 Feb 2024 12:21:11 -0800 Subject: [PATCH] be_package: delay freeing archive resource The error path uconditinally tries to free the archive, leading to a double-free segmentation fault if the error path is triggered after already freeing it. Signed-off-by: Andrew Gregory --- lib/libalpm/be_package.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/libalpm/be_package.c b/lib/libalpm/be_package.c index fb7a6f9d..f8e51f3c 100644 --- a/lib/libalpm/be_package.c +++ b/lib/libalpm/be_package.c @@ -652,8 +652,6 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle, goto pkg_invalid; } - _alpm_archive_read_free(archive); - /* internal fields for package struct */ newpkg->origin = ALPM_PKG_FROM_FILE; STRDUP(newpkg->origin_data.file, pkgfile, goto error); @@ -675,6 +673,7 @@ alpm_pkg_t *_alpm_pkg_load_internal(alpm_handle_t *handle, newpkg->infolevel |= INFRQ_FILES; } + _alpm_archive_read_free(archive); close(fd); return newpkg;