Fix for #156: UPnP segfault when no valid UPnP IGDs are found.
authorDan Helfman <witten@torsion.org>
Sat, 16 Apr 2011 18:35:45 +0000 (11:35 -0700)
committerMatt Corallo <matt@bluematt.me>
Sat, 16 Apr 2011 19:58:42 +0000 (21:58 +0200)
net.cpp

diff --git a/net.cpp b/net.cpp
index f3857ba..a403655 100644 (file)
--- a/net.cpp
+++ b/net.cpp
@@ -906,7 +906,8 @@ void ThreadMapPort2(void* parg)
     struct IGDdatas data;
     int r;
 
-    if (UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr)) == 1)
+    r = UPNP_GetValidIGD(devlist, &urls, &data, lanaddr, sizeof(lanaddr));
+    if (r == 1)
     {
         char intClient[16];
         char intPort[6];
@@ -937,7 +938,8 @@ void ThreadMapPort2(void* parg)
     } else {
         printf("No valid UPnP IGDs found\n");
         freeUPNPDevlist(devlist); devlist = 0;
-        FreeUPNPUrls(&urls);
+        if (r != 0)
+            FreeUPNPUrls(&urls);
         loop {
             if (fShutdown || !fUseUPnP)
                 return;