]> git.gsnw.org Git - fping.git/commitdiff
backport changes from develop
authorDavid Schweikert <david@schweikert.ch>
Tue, 24 Jan 2017 07:49:22 +0000 (08:49 +0100)
committerDavid Schweikert <david@schweikert.ch>
Mon, 6 Feb 2017 08:10:02 +0000 (09:10 +0100)
src/fping.c

index c5798762785d80e87c0ad2a1939ef89e5a0e886c..44cd9f30aa6db0b56c7c197253a5f3817a6f01ee 100644 (file)
@@ -116,6 +116,8 @@ extern int h_errno;
 #endif
 #define MAX_PING_DATA (MAX_IP_PACKET - SIZE_IP_HDR - SIZE_ICMP_HDR)
 
+#define MAX_LOOP       100000
+
 /* sized so as to be like traditional ping */
 #define DEFAULT_PING_DATA_SIZE 56
 
@@ -953,6 +955,7 @@ void add_range(char* start, char* end)
         exit(1);
     }
     if (addr_res->ai_family != AF_INET) {
+        freeaddrinfo(addr_res);
         fprintf(stderr, "Error: -g works only with IPv4 addresses\n");
         exit(1);
     }
@@ -968,10 +971,17 @@ void add_range(char* start, char* end)
         exit(1);
     }
     if (addr_res->ai_family != AF_INET) {
+        freeaddrinfo(addr_res);
         fprintf(stderr, "Error: -g works only with IPv4 addresses\n");
         exit(1);
     }
-    end_long = ntohl(((struct sockaddr_in*)addr_res->ai_addr)->sin_addr.s_addr);
+    end_long = ntohl(((struct sockaddr_in *) addr_res->ai_addr)->sin_addr.s_addr);
+    freeaddrinfo(addr_res);
+
+    if(end_long - start_long > MAX_LOOP) {
+            fprintf(stderr, "Error: -g parameter generates too many addresses\n");
+            exit(1);
+    }
 
     /* generate */
     while (start_long <= end_long) {
@@ -2051,6 +2061,8 @@ void add_name(char* name)
             break;
         }
     }
+
+    freeaddrinfo(res0);
 }
 
 /************************************************************