| // RUN: %clangxx_asan -O0 %s -o %t && %run %t |
| // RUN: %clangxx_asan -O0 %s -DPOSITIVE -o %t && not %run %t 2>&1 | FileCheck %s |
| |
| // Test the readv() interceptor. |
| |
| #include <assert.h> |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <unistd.h> |
| #include <fcntl.h> |
| #include <sys/uio.h> |
| #include <time.h> |
| |
| int main() { |
| char buf[2011]; |
| struct iovec iov[2]; |
| #ifdef POSITIVE |
| char * volatile buf_ = buf; |
| iov[0].iov_base = buf_ - 1; |
| #else |
| iov[0].iov_base = buf + 1; |
| #endif |
| iov[0].iov_len = 5; |
| iov[1].iov_base = buf + 10; |
| iov[1].iov_len = 2000; |
| int fd = open("/etc/hosts", O_RDONLY); |
| assert(fd > 0); |
| readv(fd, iov, 2); |
| // CHECK: WRITE of size 5 at |
| close(fd); |
| return 0; |
| } |