mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 06:50:54 +07:00
PY-57058: Skip interfaces with NULL addresses (wslproxy)
``ifaddrs->ifa_addr`` may be NULL according to ``getifaddr(3)``. This is a case for the tailscale VPN at least GitOrigin-RevId: 134cd2bcf03a01b6c52536e23b86a1135450d67b
This commit is contained in:
committed by
intellij-monorepo-bot
parent
94c6d06f97
commit
65a8ccb6c5
Binary file not shown.
@@ -28,7 +28,7 @@
|
||||
static in_addr_t g_egress_ip;
|
||||
|
||||
// Bind to eth0 only
|
||||
static in_addr_t jb_get_wsl_public_ip() {
|
||||
static in_addr_t jb_get_wsl_public_ip(void) {
|
||||
struct ifaddrs *ifaddrs_p_base;
|
||||
if (getifaddrs(&ifaddrs_p_base) != 0) {
|
||||
perror("getifaddrs failed");
|
||||
@@ -36,11 +36,16 @@ static in_addr_t jb_get_wsl_public_ip() {
|
||||
}
|
||||
for (struct ifaddrs *ifaddrs_p = ifaddrs_p_base; ifaddrs_p != NULL; ifaddrs_p = ifaddrs_p->ifa_next) {
|
||||
// Search for interface and ipv4
|
||||
if ((ifaddrs_p->ifa_addr->sa_family != AF_INET) ||
|
||||
const struct sockaddr *sockaddr_p = ifaddrs_p->ifa_addr;
|
||||
if (sockaddr_p == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((sockaddr_p->sa_family != AF_INET) ||
|
||||
((strcmp(ifaddrs_p->ifa_name, JB_EGRESS_INTERFACE) != 0))) {
|
||||
continue;
|
||||
}
|
||||
const struct sockaddr_in *in_addr = (struct sockaddr_in *) ifaddrs_p->ifa_addr;
|
||||
const struct sockaddr_in *in_addr = (struct sockaddr_in *) sockaddr_p;
|
||||
const in_addr_t result = in_addr->sin_addr.s_addr;
|
||||
freeifaddrs(ifaddrs_p_base);
|
||||
return result;
|
||||
@@ -181,7 +186,7 @@ _Noreturn static void *jb_listen_ingress(const int *p_ingress_srv_sock_fd) {
|
||||
|
||||
static int g_ingress_srv_sock_fd;
|
||||
|
||||
int main() {
|
||||
int main(void) {
|
||||
g_egress_ip = jb_get_wsl_public_ip();
|
||||
|
||||
// IP address
|
||||
|
||||
Reference in New Issue
Block a user