]> xenbits.xensource.com Git - qemu-upstream-4.6-testing.git/commitdiff
tests: Don't call visit_end_struct() after visit_start_struct() fails
authorMarkus Armbruster <armbru@redhat.com>
Wed, 7 May 2014 07:53:53 +0000 (09:53 +0200)
committerLuiz Capitulino <lcapitulino@redhat.com>
Thu, 15 May 2014 18:00:46 +0000 (14:00 -0400)
When visit_start_struct() fails, visit_end_struct() must not be
called.  Three out of four visit_type_TestStruct() call it anyway.  As
far as I can tell, visit_start_struct() doesn't actually fail there.
Fix them anyway.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
tests/test-qmp-input-strict.c
tests/test-qmp-output-visitor.c
tests/test-visitor-serialization.c

index 449d285e56abfceddc729a658538be1fe8126e4b..ec798c2acfc14cdf632a101d0ba22726b744cb99 100644 (file)
@@ -72,14 +72,22 @@ typedef struct TestStruct
 static void visit_type_TestStruct(Visitor *v, TestStruct **obj,
                                   const char *name, Error **errp)
 {
+    Error *err = NULL;
+
     visit_start_struct(v, (void **)obj, "TestStruct", name, sizeof(TestStruct),
-                       errp);
+                       &err);
+    if (err) {
+        goto out;
+    }
+
+    visit_type_int(v, &(*obj)->integer, "integer", &err);
+    visit_type_bool(v, &(*obj)->boolean, "boolean", &err);
+    visit_type_str(v, &(*obj)->string, "string", &err);
 
-    visit_type_int(v, &(*obj)->integer, "integer", errp);
-    visit_type_bool(v, &(*obj)->boolean, "boolean", errp);
-    visit_type_str(v, &(*obj)->string, "string", errp);
+    visit_end_struct(v, &err);
 
-    visit_end_struct(v, errp);
+out:
+    error_propagate(errp, err);
 }
 
 static void test_validate_struct(TestInputVisitorData *data,
index 2580f3debf0bfb13066619a12dbba548bcaa6622..dfd597cee1bb4cb5cae7be4438b6e1b374bdef64 100644 (file)
@@ -176,14 +176,22 @@ typedef struct TestStruct
 static void visit_type_TestStruct(Visitor *v, TestStruct **obj,
                                   const char *name, Error **errp)
 {
+    Error *err = NULL;
+
     visit_start_struct(v, (void **)obj, "TestStruct", name, sizeof(TestStruct),
-                       errp);
+                       &err);
+    if (err) {
+        goto out;
+    }
+
+    visit_type_int(v, &(*obj)->integer, "integer", &err);
+    visit_type_bool(v, &(*obj)->boolean, "boolean", &err);
+    visit_type_str(v, &(*obj)->string, "string", &err);
 
-    visit_type_int(v, &(*obj)->integer, "integer", errp);
-    visit_type_bool(v, &(*obj)->boolean, "boolean", errp);
-    visit_type_str(v, &(*obj)->string, "string", errp);
+    visit_end_struct(v, &err);
 
-    visit_end_struct(v, errp);
+out:
+    error_propagate(errp, err);
 }
 
 static void test_visitor_out_struct(TestOutputVisitorData *data,
index 8166cf1b05f69ab46fc2245d1655c2d5b0def24b..85170e5c490a023666df9428482124bf3a19ba12 100644 (file)
@@ -195,13 +195,21 @@ typedef struct TestStruct
 static void visit_type_TestStruct(Visitor *v, TestStruct **obj,
                                   const char *name, Error **errp)
 {
-    visit_start_struct(v, (void **)obj, NULL, name, sizeof(TestStruct), errp);
+    Error *err= NULL;
 
-    visit_type_int(v, &(*obj)->integer, "integer", errp);
-    visit_type_bool(v, &(*obj)->boolean, "boolean", errp);
-    visit_type_str(v, &(*obj)->string, "string", errp);
+    visit_start_struct(v, (void **)obj, NULL, name, sizeof(TestStruct), &err);
+    if (err) {
+        goto out;
+    }
+
+    visit_type_int(v, &(*obj)->integer, "integer", &err);
+    visit_type_bool(v, &(*obj)->boolean, "boolean", &err);
+    visit_type_str(v, &(*obj)->string, "string", &err);
+
+    visit_end_struct(v, &err);
 
-    visit_end_struct(v, errp);
+out:
+    error_propagate(errp, err);
 }
 
 static TestStruct *struct_create(void)