changeset 8447:425525ceb34f draft

(svn r12017) -Fix: when you have more than 9 network interfaces you'll enter the wonderfull world of overflows.
author rubidium <rubidium@openttd.org>
date Tue, 29 Jan 2008 21:43:22 +0000
parents 4abab4c394c2
children 5b5fdcb49728
files src/network/network.cpp
diffstat 1 files changed, 4 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/network/network.cpp
+++ b/src/network/network.cpp
@@ -404,6 +404,7 @@
 				inaddr.s_addr = htonl(ip | ~netmask);
 				_broadcast_list[i] = inaddr.s_addr;
 				i++;
+				if (i == MAX_INTERFACES) break;
 			}
 			if (read < 0) {
 				break;
@@ -431,6 +432,7 @@
 		if (ifa->ifa_broadaddr->sa_family != AF_INET) continue;
 		_broadcast_list[i] = ((struct sockaddr_in*)ifa->ifa_broadaddr)->sin_addr.s_addr;
 		i++;
+		if (i == MAX_INTERFACES) break;
 	}
 	freeifaddrs(ifap);
 
@@ -470,6 +472,7 @@
 		_broadcast_list[i++] =
 			 ifo[j].iiAddress.AddressIn.sin_addr.s_addr |
 			~ifo[j].iiNetmask.AddressIn.sin_addr.s_addr;
+		if (i == MAX_INTERFACES) break;
 	}
 #else
 	ifconf.ifc_len = sizeof(buf);
@@ -493,6 +496,7 @@
 					ioctl(sock, SIOCGIFBRDADDR, &r) != -1) {
 				_broadcast_list[i++] =
 					((struct sockaddr_in*)&r.ifr_broadaddr)->sin_addr.s_addr;
+				if (i == MAX_INTERFACES) break;
 			}
 		}