提交 a2753079 编写于 作者: O Osier Yang

tests: Fix memory leak in virnetmessagetest

Detected when playing with "make -C tests valgrind".
上级 c9f604fc
...@@ -167,6 +167,7 @@ static int testMessagePayloadEncode(const void *args ATTRIBUTE_UNUSED) ...@@ -167,6 +167,7 @@ static int testMessagePayloadEncode(const void *args ATTRIBUTE_UNUSED)
{ {
virNetMessageError err; virNetMessageError err;
static virNetMessage msg; static virNetMessage msg;
int ret = -1;
static const char expect[] = { static const char expect[] = {
0x00, 0x00, 0x00, 0x74, /* Length */ 0x00, 0x00, 0x00, 0x74, /* Length */
0x11, 0x22, 0x33, 0x44, /* Program */ 0x11, 0x22, 0x33, 0x44, /* Program */
...@@ -204,19 +205,21 @@ static int testMessagePayloadEncode(const void *args ATTRIBUTE_UNUSED) ...@@ -204,19 +205,21 @@ static int testMessagePayloadEncode(const void *args ATTRIBUTE_UNUSED)
err.code = VIR_ERR_INTERNAL_ERROR; err.code = VIR_ERR_INTERNAL_ERROR;
err.domain = VIR_FROM_RPC; err.domain = VIR_FROM_RPC;
err.level = VIR_ERR_ERROR;
if (VIR_ALLOC(err.message) < 0) if (VIR_ALLOC(err.message) < 0)
return -1; goto cleanup;
*err.message = strdup("Hello World"); *err.message = strdup("Hello World");
err.level = VIR_ERR_ERROR;
if (VIR_ALLOC(err.str1) < 0) if (VIR_ALLOC(err.str1) < 0)
return -1; goto cleanup;
*err.str1 = strdup("One"); *err.str1 = strdup("One");
if (VIR_ALLOC(err.str2) < 0) if (VIR_ALLOC(err.str2) < 0)
return -1; goto cleanup;
*err.str2 = strdup("Two"); *err.str2 = strdup("Two");
if (VIR_ALLOC(err.str3) < 0) if (VIR_ALLOC(err.str3) < 0)
return -1; goto cleanup;
*err.str3 = strdup("Three"); *err.str3 = strdup("Three");
err.int1 = 1; err.int1 = 1;
err.int2 = 2; err.int2 = 2;
...@@ -228,29 +231,43 @@ static int testMessagePayloadEncode(const void *args ATTRIBUTE_UNUSED) ...@@ -228,29 +231,43 @@ static int testMessagePayloadEncode(const void *args ATTRIBUTE_UNUSED)
msg.header.status = VIR_NET_ERROR; msg.header.status = VIR_NET_ERROR;
if (virNetMessageEncodeHeader(&msg) < 0) if (virNetMessageEncodeHeader(&msg) < 0)
return -1; goto cleanup;
if (virNetMessageEncodePayload(&msg, (xdrproc_t)xdr_virNetMessageError, &err) < 0) if (virNetMessageEncodePayload(&msg, (xdrproc_t)xdr_virNetMessageError, &err) < 0)
return -1; goto cleanup;
if (ARRAY_CARDINALITY(expect) != msg.bufferLength) { if (ARRAY_CARDINALITY(expect) != msg.bufferLength) {
VIR_DEBUG("Expect message length %zu got %zu", VIR_DEBUG("Expect message length %zu got %zu",
sizeof(expect), msg.bufferLength); sizeof(expect), msg.bufferLength);
return -1; goto cleanup;
} }
if (msg.bufferOffset != 0) { if (msg.bufferOffset != 0) {
VIR_DEBUG("Expect message offset 0 got %zu", VIR_DEBUG("Expect message offset 0 got %zu",
msg.bufferOffset); msg.bufferOffset);
return -1; goto cleanup;
} }
if (memcmp(expect, msg.buffer, sizeof(expect)) != 0) { if (memcmp(expect, msg.buffer, sizeof(expect)) != 0) {
virtTestDifferenceBin(stderr, expect, msg.buffer, sizeof(expect)); virtTestDifferenceBin(stderr, expect, msg.buffer, sizeof(expect));
return -1; goto cleanup;
} }
return 0; ret = 0;
cleanup:
if (err.message)
VIR_FREE(*err.message);
if (err.str1)
VIR_FREE(*err.str1);
if (err.str2)
VIR_FREE(*err.str2);
if (err.str3)
VIR_FREE(*err.str3);
VIR_FREE(err.message);
VIR_FREE(err.str1);
VIR_FREE(err.str2);
VIR_FREE(err.str3);
return ret;
} }
static int testMessagePayloadDecode(const void *args ATTRIBUTE_UNUSED) static int testMessagePayloadDecode(const void *args ATTRIBUTE_UNUSED)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册