miniupnpd/upnpsoap.c: refuses non integer <NewPortMappingIndex> values
This commit is contained in:
parent
9b193b0546
commit
51563f038a
|
@ -1,4 +1,7 @@
|
||||||
$Id: Changelog.txt,v 1.338 2013/05/03 09:30:32 nanard Exp $
|
$Id: Changelog.txt,v 1.339 2013/05/16 10:41:56 nanard Exp $
|
||||||
|
|
||||||
|
2013/05/16:
|
||||||
|
refuses non integer <NewPortMappingIndex> values
|
||||||
|
|
||||||
2013/05/14:
|
2013/05/14:
|
||||||
Update upnpreplyparse to take into account "empty" elements
|
Update upnpreplyparse to take into account "empty" elements
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: upnpsoap.c,v 1.115 2013/03/23 10:46:56 nanard Exp $ */
|
/* $Id: upnpsoap.c,v 1.116 2013/05/16 10:41:57 nanard Exp $ */
|
||||||
/* MiniUPnP project
|
/* MiniUPnP project
|
||||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||||
* (c) 2006-2013 Thomas Bernard
|
* (c) 2006-2013 Thomas Bernard
|
||||||
|
@ -7,6 +7,7 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <limits.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
@ -794,9 +795,10 @@ GetGenericPortMappingEntry(struct upnphttp * h, const char * action)
|
||||||
"<NewLeaseDuration>%u</NewLeaseDuration>"
|
"<NewLeaseDuration>%u</NewLeaseDuration>"
|
||||||
"</u:%sResponse>";
|
"</u:%sResponse>";
|
||||||
|
|
||||||
int index = 0;
|
long int index = 0;
|
||||||
unsigned short eport, iport;
|
unsigned short eport, iport;
|
||||||
const char * m_index;
|
const char * m_index;
|
||||||
|
char * endptr;
|
||||||
char protocol[4], iaddr[32];
|
char protocol[4], iaddr[32];
|
||||||
char desc[64];
|
char desc[64];
|
||||||
char rhost[40];
|
char rhost[40];
|
||||||
|
@ -812,13 +814,27 @@ GetGenericPortMappingEntry(struct upnphttp * h, const char * action)
|
||||||
SoapError(h, 402, "Invalid Args");
|
SoapError(h, 402, "Invalid Args");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
errno = 0; /* To distinguish success/failure after call */
|
||||||
|
index = strtol(m_index, &endptr, 10);
|
||||||
|
if((errno == ERANGE && (index == LONG_MAX || index == LONG_MIN))
|
||||||
|
|| (errno != 0 && index == 0) || (m_index == endptr))
|
||||||
|
{
|
||||||
|
/* should condition (*endptr != '\0') be also an error ? */
|
||||||
|
if(m_index == endptr)
|
||||||
|
syslog(LOG_WARNING, "%s: no digits were found in <%s>",
|
||||||
|
"GetGenericPortMappingEntry", "NewPortMappingIndex");
|
||||||
|
else
|
||||||
|
syslog(LOG_WARNING, "%s: strtol('%s'): %m",
|
||||||
|
"GetGenericPortMappingEntry", m_index);
|
||||||
|
ClearNameValueList(&data);
|
||||||
|
SoapError(h, 402, "Invalid Args");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
index = (int)atoi(m_index);
|
syslog(LOG_INFO, "%s: index=%d", action, (int)index);
|
||||||
|
|
||||||
syslog(LOG_INFO, "%s: index=%d", action, index);
|
|
||||||
|
|
||||||
rhost[0] = '\0';
|
rhost[0] = '\0';
|
||||||
r = upnp_get_redirection_infos_by_index(index, &eport, protocol, &iport,
|
r = upnp_get_redirection_infos_by_index((int)index, &eport, protocol, &iport,
|
||||||
iaddr, sizeof(iaddr),
|
iaddr, sizeof(iaddr),
|
||||||
desc, sizeof(desc),
|
desc, sizeof(desc),
|
||||||
rhost, sizeof(rhost),
|
rhost, sizeof(rhost),
|
||||||
|
|
Loading…
Reference in New Issue