79c4324644
Change-Id: I2d302dda68298877c65c99147f5bf22186a59aac
71 lines
2.6 KiB
Diff
71 lines
2.6 KiB
Diff
From 61de276ed3cd5692b99ebc6d5b700a21b16ab5e8 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?J=C3=A1n=20Tomko?= <jtomko@redhat.com>
|
|
Date: Tue, 8 Sep 2020 14:57:14 +0200
|
|
Subject: [PATCH 014/108] check for NULL before calling g_regex_unref
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
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: 71efb59a4de7c51b1bc889a316f1796ebf55738f
|
|
https://bugzilla.redhat.com/show_bug.cgi?id=1876907
|
|
Reviewed-by: Peter Krempa <pkrempa@redhat.com>
|
|
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
|
|
(cherry picked from commit 92b252456ee6d6ffc6e39e62ce1ce6c50113e00e)
|
|
---
|
|
src/conf/domain_event.c | 2 +-
|
|
tests/vboxsnapshotxmltest.c | 3 ++-
|
|
2 files changed, 3 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c
|
|
index 33fbf10406..d3acde0236 100644
|
|
--- a/src/conf/domain_event.c
|
|
+++ b/src/conf/domain_event.c
|
|
@@ -2194,7 +2194,7 @@ virDomainQemuMonitorEventCleanup(void *opaque)
|
|
virDomainQemuMonitorEventData *data = opaque;
|
|
|
|
VIR_FREE(data->event);
|
|
- if (data->flags & VIR_CONNECT_DOMAIN_QEMU_MONITOR_EVENT_REGISTER_REGEX)
|
|
+ if (data->regex)
|
|
g_regex_unref(data->regex);
|
|
if (data->freecb)
|
|
(data->freecb)(data->opaque);
|
|
diff --git a/tests/vboxsnapshotxmltest.c b/tests/vboxsnapshotxmltest.c
|
|
index 2ea460d8bd..853d930865 100644
|
|
--- a/tests/vboxsnapshotxmltest.c
|
|
+++ b/tests/vboxsnapshotxmltest.c
|
|
@@ -136,7 +136,8 @@ mymain(void)
|
|
DO_TEST("2disks-3snap-brother");
|
|
|
|
cleanup:
|
|
- g_regex_unref(testSnapshotXMLVariableLineRegex);
|
|
+ if (testSnapshotXMLVariableLineRegex)
|
|
+ g_regex_unref(testSnapshotXMLVariableLineRegex);
|
|
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
|
}
|
|
|
|
--
|
|
2.33.0
|
|
|