diff --git a/qapi/qmp-input-visitor.c b/qapi/qmp-input-visitor.c
index 635106e..c4388f3 100644
--- a/qapi/qmp-input-visitor.c
+++ b/qapi/qmp-input-visitor.c
@@ -132,7 +132,7 @@ static void qmp_input_start_struct(Visitor *v, void **obj, const char *kind,
         return;
     }
 
-    if (obj) {
+    if (obj && *obj == NULL) {
         *obj = g_malloc0(size);
     }
 }
diff --git a/tests/test-qmp-input-visitor.c b/tests/test-qmp-input-visitor.c
index 8f5a509..58e04f1 100644
--- a/tests/test-qmp-input-visitor.c
+++ b/tests/test-qmp-input-visitor.c
@@ -247,7 +247,7 @@ static void test_visitor_in_union(TestInputVisitorData *data,
 {
     Visitor *v;
     Error *err = NULL;
-    UserDefUnion *tmp;
+    UserDefUnion *tmp = NULL;
 
     v = visitor_input_test_init(data, "{ 'type': 'b', 'data' : { 'integer': 42 } }");
 
