ip: unformat_ip_address should no modify its argument on failure 44/36044/3
authorBenoît Ganne <bganne@cisco.com>
Tue, 26 Apr 2022 16:44:19 +0000 (18:44 +0200)
committerBeno�t Ganne <bganne@cisco.com>
Wed, 1 Jun 2022 08:15:07 +0000 (08:15 +0000)
When failing to match an ip address, we should not reset the ip address
that could have been initialized by a previous match.

Type: fix

Change-Id: I026766391eb3eb8230f75f66bf4b681e774741d9
Signed-off-by: Benoît Ganne <bganne@cisco.com>
src/vat/ip_types.c
src/vnet/ip/ip_types.c

index f4dcc96..cdfcbc0 100644 (file)
@@ -42,14 +42,15 @@ unformat_ip_address (unformat_input_t * input, va_list * args)
 {
   ip_address_t *a = va_arg (*args, ip_address_t *);
 
-  clib_memset (a, 0, sizeof (*a));
-  if (unformat (input, "%U", unformat_ip4_address, &ip_addr_v4 (a)))
-    ip_addr_version (a) = AF_IP4;
-  else if (unformat_user (input, unformat_ip6_address, &ip_addr_v6 (a)))
-    ip_addr_version (a) = AF_IP6;
-  else
-    return 0;
-  return 1;
+  if (unformat_user (input, unformat_ip46_address, &ip_addr_46 (a),
+                    IP46_TYPE_ANY))
+    {
+      ip_addr_version (a) =
+       ip46_address_is_ip4 (&ip_addr_46 (a)) ? AF_IP4 : AF_IP6;
+      return 1;
+    }
+
+  return 0;
 }
 
 u8 *
index 323cf4d..88b3f7b 100644 (file)
@@ -42,14 +42,15 @@ unformat_ip_address (unformat_input_t * input, va_list * args)
 {
   ip_address_t *a = va_arg (*args, ip_address_t *);
 
-  clib_memset (a, 0, sizeof (*a));
-  if (unformat (input, "%U", unformat_ip4_address, &ip_addr_v4 (a)))
-    ip_addr_version (a) = AF_IP4;
-  else if (unformat_user (input, unformat_ip6_address, &ip_addr_v6 (a)))
-    ip_addr_version (a) = AF_IP6;
-  else
-    return 0;
-  return 1;
+  if (unformat_user (input, unformat_ip46_address, &ip_addr_46 (a),
+                    IP46_TYPE_ANY))
+    {
+      ip_addr_version (a) =
+       ip46_address_is_ip4 (&ip_addr_46 (a)) ? AF_IP4 : AF_IP6;
+      return 1;
+    }
+
+  return 0;
 }
 
 u8 *