From c8fdafc79cdca56a9128bd0ec096c9a8af415c2c Mon Sep 17 00:00:00 2001 From: Yoichi NAKAYAMA Date: Sun, 11 Mar 2012 04:00:09 +0900 Subject: [PATCH] Exclude IPv6 stuff in SearchByTarget when UPNP_ENABLE_IPV6 is not defined. (cherry picked from commit 41412c16ef23fc63abbfc83cca8d4a901035ef91) --- ChangeLog | 4 ++++ upnp/src/ssdp/ssdp_ctrlpt.c | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/ChangeLog b/ChangeLog index 15ad6f2..a0664d4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -318,6 +318,10 @@ Version 1.8.0 Version 1.6.16 ******************************************************************************* +2012-03-10 Yoichi NAKAYAMA + + Exclude IPv6 stuff in SearchByTarget when UPNP_ENABLE_IPV6 is not defined. + 2012-03-10 Yoichi NAKAYAMA Further measures against buffer overflows. diff --git a/upnp/src/ssdp/ssdp_ctrlpt.c b/upnp/src/ssdp/ssdp_ctrlpt.c index 13602e4..3489fd3 100644 --- a/upnp/src/ssdp/ssdp_ctrlpt.c +++ b/upnp/src/ssdp/ssdp_ctrlpt.c @@ -501,12 +501,18 @@ int SearchByTarget(int Mx, char *St, void *Cookie) int *id = NULL; int ret = 0; char ReqBufv4[BUFSIZE]; +#ifdef UPNP_ENABLE_IPV6 char ReqBufv6[BUFSIZE]; char ReqBufv6UlaGua[BUFSIZE]; +#endif struct sockaddr_storage __ss_v4; +#ifdef UPNP_ENABLE_IPV6 struct sockaddr_storage __ss_v6; +#endif struct sockaddr_in *destAddr4 = (struct sockaddr_in *)&__ss_v4; +#ifdef UPNP_ENABLE_IPV6 struct sockaddr_in6 *destAddr6 = (struct sockaddr_in6 *)&__ss_v6; +#endif fd_set wrSet; SsdpSearchArg *newArg = NULL; int timeTillRead = 0; @@ -535,23 +541,27 @@ int SearchByTarget(int Mx, char *St, void *Cookie) retVal = CreateClientRequestPacket(ReqBufv4, sizeof(ReqBufv4), timeTillRead, St, AF_INET); if (retVal != UPNP_E_SUCCESS) return retVal; +#ifdef UPNP_ENABLE_IPV6 retVal = CreateClientRequestPacket(ReqBufv6, sizeof(ReqBufv6), timeTillRead, St, AF_INET6); if (retVal != UPNP_E_SUCCESS) return retVal; retVal = CreateClientRequestPacketUlaGua(ReqBufv6UlaGua, sizeof(ReqBufv6UlaGua), timeTillRead, St, AF_INET6); if (retVal != UPNP_E_SUCCESS) return retVal; +#endif memset(&__ss_v4, 0, sizeof(__ss_v4)); destAddr4->sin_family = AF_INET; inet_pton(AF_INET, SSDP_IP, &destAddr4->sin_addr); destAddr4->sin_port = htons(SSDP_PORT); +#ifdef UPNP_ENABLE_IPV6 memset(&__ss_v6, 0, sizeof(__ss_v6)); destAddr6->sin6_family = AF_INET6; inet_pton(AF_INET6, SSDP_IPV6_SITELOCAL, &destAddr6->sin6_addr); destAddr6->sin6_port = htons(SSDP_PORT); destAddr6->sin6_scope_id = gIF_INDEX; +#endif /* add search criteria to list */ HandleLock();