From: Michal Privoznik Date: Thu, 7 Sep 2023 08:56:01 +0000 (+0200) Subject: virsh-snapshot: Avoid passing NULL to qsort() in virshSnapshotListCollect() X-Git-Tag: v9.8.0-rc1~144 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=67c93cfae9312160de840d309bb3f5c36e5c9e9a;p=thirdparty%2Flibvirt.git virsh-snapshot: Avoid passing NULL to qsort() in virshSnapshotListCollect() If a domain has no snapshots and 'virsh snapshot-list' is called, this gets all the way down to virshSnapshotListCollect() which then collects all snapshots (none), and passes them to qsort() which doesn't like being called with NULL: extern void qsort (void *__base, size_t __nmemb, size_t __size, __compar_fn_t __compar) __nonnull ((1, 4)); Resolves: https://gitlab.com/libvirt/libvirt/-/issues/533 Signed-off-by: Michal Privoznik Reviewed-by: Peter Krempa --- diff --git a/tools/virsh-snapshot.c b/tools/virsh-snapshot.c index d7889a38e4..c85258c09a 100644 --- a/tools/virsh-snapshot.c +++ b/tools/virsh-snapshot.c @@ -1310,9 +1310,11 @@ virshSnapshotListCollect(vshControl *ctl, virDomainPtr dom, } } } - if (!(orig_flags & VIR_DOMAIN_SNAPSHOT_LIST_TOPOLOGICAL)) + if (!(orig_flags & VIR_DOMAIN_SNAPSHOT_LIST_TOPOLOGICAL) && + snaplist->snaps && snaplist->nsnaps) { qsort(snaplist->snaps, snaplist->nsnaps, sizeof(*snaplist->snaps), virshSnapSorter); + } snaplist->nsnaps -= deleted; ret = g_steal_pointer(&snaplist);