From dba8ab0de551d164683c54dfde9c32599d3ed10a Mon Sep 17 00:00:00 2001
From: Daiki Ueno <ueno@gnu.org>
Date: Mon, 15 Mar 2021 11:03:22 +0100
Subject: [PATCH 4/5] examples: avoid memory leak in tlsproxy

Signed-off-by: Daiki Ueno <ueno@gnu.org>
---
 doc/examples/tlsproxy/tlsproxy.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/doc/examples/tlsproxy/tlsproxy.c b/doc/examples/tlsproxy/tlsproxy.c
index 9404d875ef..2607eae049 100644
--- a/doc/examples/tlsproxy/tlsproxy.c
+++ b/doc/examples/tlsproxy/tlsproxy.c
@@ -107,10 +107,11 @@ bindtoaddress (char *addrport)
     }
 
   if (!rp)
     {
       fprintf (stderr, "Error binding to %s:%s: %m\n", addr, port);
+      freeaddrinfo (result);
       return -1;
     }
 
   freeaddrinfo (result);	/* No longer needed */
 
@@ -170,10 +171,11 @@ connecttoaddress (char *addrport)
     }
 
   if (!rp)
     {
       fprintf (stderr, "Error connecting to %s:%s: %m\n", addr, port);
+      freeaddrinfo (result);
       return -1;
     }
 
   freeaddrinfo (result);	/* No longer needed */
 
@@ -339,30 +341,36 @@ processoptions (int argc, char **argv)
 	{
 	case 0:		/* set a flag, nothing else to do */
 	  break;
 
 	case 'c':
+	  free (connectaddr);
 	  connectaddr = strdup (optarg);
 	  break;
 
 	case 'l':
+	  free (listenaddr);
 	  listenaddr = strdup (optarg);
 	  break;
 
 	case 'K':
+	  free (keyfile);
 	  keyfile = strdup (optarg);
 	  break;
 
 	case 'C':
+	  free (certfile);
 	  certfile = strdup (optarg);
 	  break;
 
 	case 'A':
+	  free (cacertfile);
 	  cacertfile = strdup (optarg);
 	  break;
 
 	case 'H':
+	  free (hostname);
 	  hostname = strdup (optarg);
 	  break;
 
 	case 's':
 	  server = 1;
-- 
2.30.2

