]> git.ipfire.org Git - thirdparty/mtr.git/commitdiff
warnings: avoid vla when malloc() is more appropriate
authorSami Kerola <kerolasa@iki.fi>
Mon, 29 Aug 2016 09:54:55 +0000 (10:54 +0100)
committerSami Kerola <kerolasa@iki.fi>
Mon, 29 Aug 2016 09:57:15 +0000 (10:57 +0100)
Assuming allocatin failure will happen use of vla will cause very strange
looking error.  In this occasion it is better to use malloc, and check it
was successful.  Found with smatch scan.

net.c

diff --git a/net.c b/net.c
index 6779da277555a7d076f31e435ac45614bfcf6641..7a77af08d153b7b60bf63782510f26ad0cccbf61 100644 (file)
--- a/net.c
+++ b/net.c
@@ -254,8 +254,13 @@ static int checksum(void *data, int sz)
 static int udp_checksum(struct mtr_ctl *ctl, void *pheader, void *udata,
                        int psize, int dsize, int alt_checksum)
 {
-  unsigned int tsize = psize + dsize;
-  char csumpacket[tsize];
+  size_t tsize = psize + dsize;
+  char *csumpacket;
+  int ret;
+
+  csumpacket = malloc(tsize);
+  if (!csumpacket)
+    error(EXIT_FAILURE, errno, "cannot allocate %zu bytes", tsize);
   memset(csumpacket, (unsigned char) abs(ctl->bitpattern), tsize);
   if (alt_checksum && dsize >= 2) {
     csumpacket[psize + sizeof(struct UDPHeader)] = 0;
@@ -277,7 +282,9 @@ static int udp_checksum(struct mtr_ctl *ctl, void *pheader, void *udata,
   content->length = udpdata->length;
   content->checksum = udpdata->checksum;
 
-  return checksum(csumpacket,tsize);
+  ret = checksum(csumpacket, tsize);
+  free(csumpacket);
+  return ret;
 }