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