Hi,

I've same problem, after a quick look I've found that upnp_clean_expired_pinholes initialize next_pinhole_ts to MAX_UINT. So your problem is only a conversion problem between signed, unsigned and overflow.

I've made a quick patch you can see in attachment.

Regards,
--
Frederic Planchon




diff -ur miniupnpd-1.7//miniupnpd.c miniupnpd-1.7-patched/miniupnpd.c
--- miniupnpd-1.7//miniupnpd.c  2012-05-21 17:50:03.000000000 +0200
+++ miniupnpd-1.7-patched/miniupnpd.c   2012-09-09 10:00:01.000000000 +0200
@@ -1443,7 +1443,8 @@
                next_pinhole_ts = 0;
                upnp_clean_expired_pinholes(&next_pinhole_ts);
                if(next_pinhole_ts &&
-                  timeout.tv_sec >= (int)(next_pinhole_ts - timeofday.tv_sec)) 
{
+                  timeout.tv_sec >= (int)(next_pinhole_ts - timeofday.tv_sec) 
&&
+                  (int)(next_pinhole_ts - timeofday.tv_sec) >= 0 ) {
                        timeout.tv_sec = next_pinhole_ts - timeofday.tv_sec;
                        timeout.tv_usec = 0;
                }

Reply via email to