1 // Test that ASan doesn't raise false alarm when getsockname and getpeername 2 // are called with addrlen=nullptr; 3 // 4 // RUN: %clangxx %s -o %t && %run %t 2>&1 5 6 // connect() fails on Android. 7 // UNSUPPORTED: android 8 9 #include <assert.h> 10 #include <errno.h> 11 #include <netinet/in.h> 12 #include <sys/socket.h> 13 14 int main() { 15 const int fd = socket(AF_INET, SOCK_DGRAM, 0); 16 assert(fd >= 0); 17 18 const sockaddr_in sin = { 19 .sin_family = AF_INET, 20 .sin_port = 1234, 21 .sin_addr = 22 { 23 .s_addr = INADDR_LOOPBACK, 24 }, 25 }; 26 assert(connect(fd, reinterpret_cast<const sockaddr *>(&sin), sizeof(sin)) == 27 0); 28 29 errno = 0; 30 assert(getsockname(fd, nullptr, nullptr) == -1); 31 assert(errno == EFAULT); 32 33 errno = 0; 34 assert(getpeername(fd, nullptr, nullptr) == -1); 35 assert(errno == EFAULT); 36 37 return 0; 38 } 39