From 4ddbb1de7f8bae6b99d809f8d85d2546af804400 Mon Sep 17 00:00:00 2001 From: dmiller Date: Mon, 20 Jul 2026 15:48:55 +0000 Subject: [PATCH] Unify checks for source sock addr validity --- NmapOps.cc | 4 ++-- Target.cc | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/NmapOps.cc b/NmapOps.cc index ca543efc0..ea55ecda8 100644 --- a/NmapOps.cc +++ b/NmapOps.cc @@ -150,7 +150,7 @@ int NmapOps::pf() { } int NmapOps::SourceSockAddr(struct sockaddr_storage *ss, size_t *ss_len) { - if (sourcesocklen <= 0) + if (sourcesocklen <= 0 || sourcesock.ss_family == AF_UNSPEC) return 1; assert(sourcesocklen <= sizeof(*ss)); if (ss) @@ -162,7 +162,7 @@ int NmapOps::SourceSockAddr(struct sockaddr_storage *ss, size_t *ss_len) { /* Returns a const pointer to the source address if set, or NULL if unset. */ const struct sockaddr_storage *NmapOps::SourceSockAddr() const { - if (sourcesock.ss_family == AF_UNSPEC) + if (sourcesocklen <= 0 || sourcesock.ss_family == AF_UNSPEC) return NULL; else return &sourcesock; diff --git a/Target.cc b/Target.cc index ba6d5f7c4..bb393276d 100644 --- a/Target.cc +++ b/Target.cc @@ -262,7 +262,7 @@ const struct in6_addr *Target::v6hostip() const { /* The source address used to reach the target */ int Target::SourceSockAddr(struct sockaddr_storage *ss, size_t *ss_len) const { - if (sourcesocklen <= 0) + if (sourcesocklen <= 0 || sourcesock.ss_family == AF_UNSPEC) return 1; assert(sourcesocklen <= sizeof(*ss)); if (ss) @@ -273,7 +273,10 @@ int Target::SourceSockAddr(struct sockaddr_storage *ss, size_t *ss_len) const { } const struct sockaddr_storage *Target::SourceSockAddr() const { - return &sourcesock; + if (sourcesocklen <= 0 || sourcesock.ss_family == AF_UNSPEC) + return NULL; + else + return &sourcesock; } /* Note that it is OK to pass in a sockaddr_in or sockaddr_in6 casted