33 lines · cpp
1// RUN: %clangxx_asan -O0 %s -o %t && %run %t2// RUN: %clangxx_asan -O0 %s -DPOSITIVE -o %t && not %run %t 2>&1 | FileCheck %s3 4// Test the readv() interceptor.5 6#include <assert.h>7#include <stdio.h>8#include <stdlib.h>9#include <unistd.h>10#include <fcntl.h>11#include <sys/uio.h>12#include <time.h>13 14int main() {15 char buf[2011];16 struct iovec iov[2];17#ifdef POSITIVE18 char * volatile buf_ = buf;19 iov[0].iov_base = buf_ - 1;20#else21 iov[0].iov_base = buf + 1;22#endif23 iov[0].iov_len = 5;24 iov[1].iov_base = buf + 10;25 iov[1].iov_len = 2000;26 int fd = open("/etc/hosts", O_RDONLY);27 assert(fd > 0);28 readv(fd, iov, 2);29 // CHECK: WRITE of size 5 at30 close(fd);31 return 0;32}33