In this case the function would exit without releasing the argv object
initialized via argv_new().

Move initialization of argv after thic check is performed.

While at it, also move the declaration of gc and initizlize it with
gc_new().

Reported-by: Camille Guérin <guerincamill...@gmail.com>
Signed-off-by: Antonio Quartulli <a...@unstable.cc>
---
 src/openvpn/route.c | 10 ++++------
 1 file changed, 4 insertions(+), 6 deletions(-)

diff --git a/src/openvpn/route.c b/src/openvpn/route.c
index 7eaf1121..ded8fec8 100644
--- a/src/openvpn/route.c
+++ b/src/openvpn/route.c
@@ -2145,8 +2145,6 @@ delete_route(struct route_ipv4 *r,
              const struct env_set *es,
              openvpn_net_ctx_t *ctx)
 {
-    struct gc_arena gc;
-    struct argv argv = argv_new();
 #if !defined(TARGET_LINUX)
     const char *network;
 #if !defined(TARGET_AIX)
@@ -2165,7 +2163,8 @@ delete_route(struct route_ipv4 *r,
         return;
     }
 
-    gc_init(&gc);
+    struct gc_arena gc = gc_new();
+    struct argv argv = argv_new();
 
 #if !defined(TARGET_LINUX)
     network = print_in_addr_t(r->network, 0, &gc);
@@ -2336,8 +2335,6 @@ delete_route_ipv6(const struct route_ipv6 *r6, const 
struct tuntap *tt,
                   unsigned int flags, const struct env_set *es,
                   openvpn_net_ctx_t *ctx)
 {
-    struct gc_arena gc;
-    struct argv argv = argv_new();
     const char *network;
 #if !defined(TARGET_LINUX)
     const char *gateway;
@@ -2360,7 +2357,8 @@ delete_route_ipv6(const struct route_ipv6 *r6, const 
struct tuntap *tt,
     }
 #endif
 
-    gc_init(&gc);
+    struct gc_arena gc = gc_new();
+    struct argv argv = argv_new();
 
     network = print_in6_addr( r6->network, 0, &gc);
 #if !defined(TARGET_LINUX)
-- 
2.35.1



_______________________________________________
Openvpn-devel mailing list
Openvpn-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openvpn-devel

Reply via email to