From 8962355d6cb654f58402156b9ab2731f51a42ab9 Mon Sep 17 00:00:00 2001
From: SteelT <steeltitanium1@gmail.com>
Date: Sat, 17 Feb 2024 13:04:29 -0500
Subject: [PATCH] Fix UPnP port mapping not working

Despite UPNP_AddPortMapping returning sucess status, no port mapping would actually be added at all. And that's due to a memset call in the middle of the function.
Wiping the IGDdatas struct, moving the memset to the start of the function fixes it and a port mapping is actually created/removed when a server is started/stopped.
---
 src/netcode/i_tcp.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/netcode/i_tcp.c b/src/netcode/i_tcp.c
index 6d9a2725a3..96342d5c6c 100644
--- a/src/netcode/i_tcp.c
+++ b/src/netcode/i_tcp.c
@@ -300,6 +300,10 @@ init_upnpc_once(struct upnpdata *upnpuserdata)
 	int upnp_error = -2;
 	int scope_id = 0;
 	int status_code = 0;
+
+	memset(&urls, 0, sizeof(struct UPNPUrls));
+	memset(&data, 0, sizeof(struct IGDdatas));
+
 	CONS_Printf(M_GetText("Looking for UPnP Internet Gateway Device\n"));
 	devlist = upnpDiscoverDevices(deviceTypes, 500, NULL, NULL, 0, false, 2, &upnp_error, 0);
 	if (devlist)
@@ -327,8 +331,6 @@ init_upnpc_once(struct upnpdata *upnpuserdata)
 			parserootdesc(descXML, descXMLsize, &data);
 			free(descXML);
 			descXML = NULL;
-			memset(&urls, 0, sizeof(struct UPNPUrls));
-			memset(&data, 0, sizeof(struct IGDdatas));
 			GetUPNPUrls(&urls, &data, dev->descURL, status_code);
 			I_AddExitFunc(I_ShutdownUPnP);
 		}
-- 
GitLab