]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib/command.c: fix leak id'ed by valgrind
authorLou Berger <lberger@labn.net>
Sat, 17 Dec 2016 18:26:03 +0000 (13:26 -0500)
committerLou Berger <lberger@labn.net>
Mon, 2 Jan 2017 20:04:47 +0000 (15:04 -0500)
Signed-off-by: Lou Berger <lberger@labn.net>
lib/command.c

index 0b0614b8060bfb1fff939bb5d56af0fd9f882970..0cabe32e6c3ecf2e069305bed6e64125c5afe99f 100644 (file)
@@ -1066,6 +1066,7 @@ cmd_ipv6_prefix_match (const char *str)
   const char *delim = "/\0";
   char *dupe, *prefix, *mask, *context, *endptr;
   int nmask = -1;
+  enum match_type ret;
 
   if (str == NULL)
     return partly_match;
@@ -1079,21 +1080,26 @@ cmd_ipv6_prefix_match (const char *str)
   prefix = strtok_r(dupe, delim, &context);
   mask   = strtok_r(NULL, delim, &context);
 
+  ret = exact_match;
   if (!mask)
-    return partly_match;
-
-  /* validate prefix */
-  if (inet_pton(AF_INET6, prefix, &sin6_dummy.sin6_addr) != 1)
-    return no_match;
-
-  /* validate mask */
-  nmask = strtol (mask, &endptr, 10);
-  if (*endptr != '\0' || nmask < 0 || nmask > 128)
-    return no_match;
+    ret = partly_match;
+  else
+    {
+      /* validate prefix */
+      if (inet_pton(AF_INET6, prefix, &sin6_dummy.sin6_addr) != 1)
+        ret = no_match;
+      else
+        {
+          /* validate mask */
+          nmask = strtol (mask, &endptr, 10);
+          if (*endptr != '\0' || nmask < 0 || nmask > 128)
+            ret = no_match;
+        }
+    }
 
   XFREE(MTYPE_TMP, dupe);
 
-  return exact_match;
+  return ret;
 }
 
 #endif /* HAVE_IPV6  */