]> granicus.if.org Git - strace/commitdiff
tests: extend coverage of struct iovec arrays
authorDmitry V. Levin <ldv@altlinux.org>
Sun, 14 Feb 2016 00:04:20 +0000 (00:04 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Sun, 14 Feb 2016 00:36:38 +0000 (00:36 +0000)
* tests/readv.c (main): Check decoding of empty, inaccessible,
and partially inaccessible iovec arrays.
* tests/readv.test: Update.

tests/readv.c
tests/readv.test

index ec35c8ae97b4e583c61b29d655c05a101742107e..ce765ec070083dc830b53db6b5d819590b5aada7 100644 (file)
@@ -49,6 +49,8 @@ main(void)
        const char *w0_d = hexdump_strdup(w0_c);
        void *w0 = tail_memdup(w0_c, LENGTH_OF(w0_c));
 
+       const void *efault = w0 + LENGTH_OF(w0_c);
+
        static const char w1_c[] = "34567";
        const char *w1_d = hexdump_strdup(w1_c);
        void *w1 = tail_memdup(w1_c, LENGTH_OF(w1_c));
@@ -57,6 +59,12 @@ main(void)
        const char *w2_d = hexdump_strdup(w2_c);
        void *w2 = tail_memdup(w2_c, LENGTH_OF(w2_c));
 
+       assert(writev(1, efault, 42) == -1);
+       tprintf("writev(1, [%p], 42) = -1 EFAULT (%m)\n", efault);
+
+       assert(readv(0, efault, 42) == -1);
+       tprintf("readv(0, %p, 42) = -1 EFAULT (%m)\n", efault);
+
        static const char r0_c[] = "01234567";
        const char *r0_d = hexdump_strdup(r0_c);
        static const char r1_c[] = "89abcde";
@@ -75,6 +83,14 @@ main(void)
                }
        };
        const struct iovec *w_iov = tail_memdup(w_iov_, sizeof(w_iov_));
+
+       assert(writev(1, w_iov, 0) == 0);
+       tprintf("writev(1, [], 0) = 0\n");
+
+       assert(writev(1, w_iov + ARRAY_SIZE(w_iov_) - 1, 2) == -1);
+       tprintf("writev(1, [{\"%s\", %u}, %p], 2) = -1 EFAULT (%m)\n",
+               w2_c, LENGTH_OF(w2_c), w_iov + ARRAY_SIZE(w_iov_));
+
        const unsigned int w_len =
                LENGTH_OF(w0_c) + LENGTH_OF(w1_c) + LENGTH_OF(w2_c);
 
index 6a071e388b16d86b31447a7f2b247207dc1b707f..48ae676635b355a844af6229e1395af8890dd5dc 100755 (executable)
@@ -6,7 +6,7 @@
 
 run_prog > /dev/null
 OUT="$LOG.out"
-run_strace -a30 -eread=0 -ewrite=1 -ereadv,writev $args > "$OUT"
+run_strace -a16 -eread=0 -ewrite=1 -ereadv,writev $args > "$OUT"
 match_diff "$LOG" "$OUT"
 rm -f "$OUT"