]> xenbits.xensource.com Git - libvirt.git/commitdiff
tests: fix two off-by-1 errors in read-big-pipe test
authorDaniel P. Berrangé <berrange@redhat.com>
Wed, 8 May 2024 12:03:20 +0000 (13:03 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Wed, 8 May 2024 13:33:42 +0000 (14:33 +0100)
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 <abologna@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
tests/virshtest.c

index 7a7797647c85923af39438a2bb32ca8d32caa696..03d499b75969404e3e34c5cdadfacef665076740 100644 (file)
@@ -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;
     }