From ae6a89884aeea9f6e334b8b6951d1aa6c362bdad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Date: Wed, 8 May 2024 13:03:20 +0100 Subject: [PATCH] tests: fix two off-by-1 errors in read-big-pipe test MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When testPipeFeeder copies the XML document into the padded buffer, it tells virStrcpy that 'xmlsize' bytes are available. This is under reporting size by 1 byte, and as a result it fails to copy the trailing '\n' replacing it with '\0'. The return value of virStrcpy wasn't checked, but was reporting this truncation. When testPipeFeeder then sends the padded buffer down the pipe, it asks to send 'emptyspace + xmlsize + 1' bytes, which means it sends the data, as well as the trailing '\0' terminator. Both bugs combined mean it is sending '\0\0' as the last bytes, instead of '\n' which was intended. When virFileReadAll reads data from the pipe, it ends up adding another '\0' resulting in a very NUL terminated string ('\0\0\0'). This is all harmless, but should be fixed regardless. Reviewed-by: Andrea Bolognani Signed-off-by: Daniel P. Berrangé --- tests/virshtest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/virshtest.c b/tests/virshtest.c index 7a7797647c..03d499b759 100644 --- a/tests/virshtest.c +++ b/tests/virshtest.c @@ -151,9 +151,9 @@ testPipeFeeder(void *opaque) } memset(doc, ' ', emptyspace); - virStrcpy(doc + emptyspace, xml, xmlsize); + g_assert(virStrcpy(doc + emptyspace, xml, xmlsize + 1) == 0); - if (safewrite(fd, doc, emptyspace + xmlsize + 1) < 0) { + if (safewrite(fd, doc, emptyspace + xmlsize) < 0) { fprintf(stderr, "\nfailed to write to pipe '%s': %s\n", pipepath, g_strerror(errno)); return; }