From 98e09e01e1d254347ab579ba849aefcb640ff8f1 Mon Sep 17 00:00:00 2001 From: Juan RP Date: Sun, 27 Oct 2019 08:44:37 +0100 Subject: [PATCH] lib/package_alternatives.c: check if alternative is a symlink before removing it Original commit by @duncaen ... but couldn't find this anywhere. --- lib/package_alternatives.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/package_alternatives.c b/lib/package_alternatives.c index 9b4d0027..5e4f2b36 100644 --- a/lib/package_alternatives.c +++ b/lib/package_alternatives.c @@ -111,6 +111,7 @@ static int remove_symlinks(struct xbps_handle *xhp, xbps_array_t a, const char *grname) { unsigned int i, cnt; + struct stat st; cnt = xbps_array_count(a); for (i = 0; i < cnt; i++) { @@ -132,6 +133,11 @@ remove_symlinks(struct xbps_handle *xhp, xbps_array_t a, const char *grname) } else { lnk = xbps_xasprintf("%s%s", xhp->rootdir, l); } + if (lstat(lnk, &st) == -1 || !S_ISLNK(st.st_mode)) { + free(lnk); + free(l); + continue; + } xbps_set_cb_state(xhp, XBPS_STATE_ALTGROUP_LINK_REMOVED, 0, NULL, "Removing '%s' alternatives group symlink: %s", grname, l); unlink(lnk);