mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-09-08 16:54:49 +00:00
check for NULL before calling g_regex_unref
g_regex_unref reports an error if called with a NULL argument.
We have two cases in the code where we (possibly) call it on a NULL
argument. The interesting one is in virDomainQemuMonitorEventCleanup.
Based on VIR_CONNECT_DOMAIN_QEMU_MONITOR_EVENT_REGISTER_REGEX, we unref
data->regex, which has two problems:
* On the client side, flags is -1 so the comparison is true even if no
regex was used, reproducible by:
$ virsh qemu-monitor-event --timeout 1
which results in an ugly error:
(process:1289846): GLib-CRITICAL **: 14:58:42.631: g_regex_unref: assertion 'regex != NULL' failed
* On the server side, we only create the regex if both the flag and the
string are present, so it's possible to trigger this message by:
$ virsh qemu-monitor-event --regex --timeout 1
Use a non-NULL comparison instead of the flag to decide whether we need
to unref the regex. And add a non-NULL check to the unref in the
VirtualBox test too.
Signed-off-by: Ján Tomko <jtomko@redhat.com>
Fixes: 71efb59a4d
https://bugzilla.redhat.com/show_bug.cgi?id=1876907
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
2ce20ba839
commit
92b252456e
@ -2194,7 +2194,7 @@ virDomainQemuMonitorEventCleanup(void *opaque)
|
|||||||
virDomainQemuMonitorEventData *data = opaque;
|
virDomainQemuMonitorEventData *data = opaque;
|
||||||
|
|
||||||
VIR_FREE(data->event);
|
VIR_FREE(data->event);
|
||||||
if (data->flags & VIR_CONNECT_DOMAIN_QEMU_MONITOR_EVENT_REGISTER_REGEX)
|
if (data->regex)
|
||||||
g_regex_unref(data->regex);
|
g_regex_unref(data->regex);
|
||||||
if (data->freecb)
|
if (data->freecb)
|
||||||
(data->freecb)(data->opaque);
|
(data->freecb)(data->opaque);
|
||||||
|
@ -135,6 +135,7 @@ mymain(void)
|
|||||||
DO_TEST("2disks-3snap-brother");
|
DO_TEST("2disks-3snap-brother");
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
|
if (testSnapshotXMLVariableLineRegex)
|
||||||
g_regex_unref(testSnapshotXMLVariableLineRegex);
|
g_regex_unref(testSnapshotXMLVariableLineRegex);
|
||||||
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user