On Thu, Sep 07, 2023 at 11:02:42 +0200, Michal Privoznik wrote:
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 <mprivozn(a)redhat.com>
---
tools/virsh-snapshot.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/tools/virsh-snapshot.c b/tools/virsh-snapshot.c
index d7889a38e4..ecb935b2b4 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) {
In most other places in virsh we do the check as 'snaplist->snaps &&
snaplist->nsnaps'.
qsort(snaplist->snaps, snaplist->nsnaps,
sizeof(*snaplist->snaps),
virshSnapSorter);
+ }
snaplist->nsnaps -= deleted;
ret = g_steal_pointer(&snaplist);
Regardless of the above comment:
Reviewed-by: Peter Krempa <pkrempa(a)redhat.com>