upnpsoap.c: Fix atoi() on null pointers
This commit is contained in:
parent
7227e55dba
commit
c0d4c9d24a
|
@ -1,6 +1,7 @@
|
||||||
$Id: Changelog.txt,v 1.318 2012/10/04 22:11:55 nanard Exp $
|
$Id: Changelog.txt,v 1.318 2012/10/04 22:11:55 nanard Exp $
|
||||||
|
|
||||||
2012/10/03:
|
2012/10/03:
|
||||||
|
Fix atoi() on null pointer in upnpsoap.c
|
||||||
ENABLE_HTTP_DATE : add a Date: header to all HTTP responses
|
ENABLE_HTTP_DATE : add a Date: header to all HTTP responses
|
||||||
|
|
||||||
2012/09/27:
|
2012/09/27:
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: upnpsoap.c,v 1.111 2012/09/27 11:54:57 nanard Exp $ */
|
/* $Id: upnpsoap.c,v 1.113 2012/10/04 22:10:26 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-2012 Thomas Bernard
|
* (c) 2006-2012 Thomas Bernard
|
||||||
|
@ -486,15 +486,15 @@ AddAnyPortMapping(struct upnphttp * h, const char * action)
|
||||||
if(leaseduration == 0)
|
if(leaseduration == 0)
|
||||||
leaseduration = 604800;
|
leaseduration = 604800;
|
||||||
|
|
||||||
eport = (unsigned short)atoi(ext_port);
|
if (!int_ip || !ext_port || !int_port)
|
||||||
iport = (unsigned short)atoi(int_port);
|
|
||||||
|
|
||||||
if (!int_ip)
|
|
||||||
{
|
{
|
||||||
ClearNameValueList(&data);
|
ClearNameValueList(&data);
|
||||||
SoapError(h, 402, "Invalid Args");
|
SoapError(h, 402, "Invalid Args");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eport = (unsigned short)atoi(ext_port);
|
||||||
|
iport = (unsigned short)atoi(int_port);
|
||||||
#ifndef SUPPORT_REMOTEHOST
|
#ifndef SUPPORT_REMOTEHOST
|
||||||
#ifdef UPNP_STRICT
|
#ifdef UPNP_STRICT
|
||||||
if (r_host && (strlen(r_host) > 0) && (0 != strcmp(r_host, "*")))
|
if (r_host && (strlen(r_host) > 0) && (0 != strcmp(r_host, "*")))
|
||||||
|
@ -723,17 +723,25 @@ DeletePortMappingRange(struct upnphttp * h, const char * action)
|
||||||
"</u:DeletePortMappingRangeResponse>";
|
"</u:DeletePortMappingRangeResponse>";
|
||||||
struct NameValueParserData data;
|
struct NameValueParserData data;
|
||||||
const char * protocol;
|
const char * protocol;
|
||||||
|
const char * startport_s, * endport_s;
|
||||||
unsigned short startport, endport;
|
unsigned short startport, endport;
|
||||||
int manage;
|
/*int manage;*/
|
||||||
unsigned short * port_list;
|
unsigned short * port_list;
|
||||||
unsigned int i, number = 0;
|
unsigned int i, number = 0;
|
||||||
UNUSED(action);
|
UNUSED(action);
|
||||||
|
|
||||||
ParseNameValue(h->req_buf + h->req_contentoff, h->req_contentlen, &data);
|
ParseNameValue(h->req_buf + h->req_contentoff, h->req_contentlen, &data);
|
||||||
startport = (unsigned short)atoi(GetValueFromNameValueList(&data, "NewStartPort"));
|
startport_s = GetValueFromNameValueList(&data, "NewStartPort");
|
||||||
endport = (unsigned short)atoi(GetValueFromNameValueList(&data, "NewEndPort"));
|
endport_s = GetValueFromNameValueList(&data, "NewEndPort");
|
||||||
protocol = GetValueFromNameValueList(&data, "NewProtocol");
|
protocol = GetValueFromNameValueList(&data, "NewProtocol");
|
||||||
manage = atoi(GetValueFromNameValueList(&data, "NewManage"));
|
/*manage = atoi(GetValueFromNameValueList(&data, "NewManage"));*/
|
||||||
|
if(startport_s == NULL || endport_s == NULL || protocol == NULL) {
|
||||||
|
SoapError(h, 402, "Invalid Args");
|
||||||
|
ClearNameValueList(&data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
startport = (unsigned short)atoi(startport_s);
|
||||||
|
endport = (unsigned short)atoi(endport_s);
|
||||||
|
|
||||||
/* possible errors :
|
/* possible errors :
|
||||||
606 - Action not authorized
|
606 - Action not authorized
|
||||||
|
@ -870,19 +878,32 @@ GetListOfPortMappings(struct upnphttp * h, const char * action)
|
||||||
unsigned int leaseduration = 0;
|
unsigned int leaseduration = 0;
|
||||||
|
|
||||||
struct NameValueParserData data;
|
struct NameValueParserData data;
|
||||||
|
const char * startport_s, * endport_s;
|
||||||
unsigned short startport, endport;
|
unsigned short startport, endport;
|
||||||
const char * protocol;
|
const char * protocol;
|
||||||
int manage;
|
/*int manage;*/
|
||||||
|
const char * number_s;
|
||||||
int number;
|
int number;
|
||||||
unsigned short * port_list;
|
unsigned short * port_list;
|
||||||
unsigned int i, list_size = 0;
|
unsigned int i, list_size = 0;
|
||||||
|
|
||||||
ParseNameValue(h->req_buf + h->req_contentoff, h->req_contentlen, &data);
|
ParseNameValue(h->req_buf + h->req_contentoff, h->req_contentlen, &data);
|
||||||
startport = (unsigned short)atoi(GetValueFromNameValueList(&data, "NewStartPort"));
|
startport_s = GetValueFromNameValueList(&data, "NewStartPort");
|
||||||
endport = (unsigned short)atoi(GetValueFromNameValueList(&data, "NewEndPort"));
|
endport_s = GetValueFromNameValueList(&data, "NewEndPort");
|
||||||
protocol = GetValueFromNameValueList(&data, "NewProtocol");
|
protocol = GetValueFromNameValueList(&data, "NewProtocol");
|
||||||
manage = atoi(GetValueFromNameValueList(&data, "NewManage"));
|
/*manage_s = GetValueFromNameValueList(&data, "NewManage");*/
|
||||||
number = atoi(GetValueFromNameValueList(&data, "NewNumberOfPorts"));
|
number_s = GetValueFromNameValueList(&data, "NewNumberOfPorts");
|
||||||
|
if(startport_s == NULL || endport_s == NULL || protocol == NULL ||
|
||||||
|
number_s == NULL) {
|
||||||
|
SoapError(h, 402, "Invalid Args");
|
||||||
|
ClearNameValueList(&data);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
startport = (unsigned short)atoi(startport_s);
|
||||||
|
endport = (unsigned short)atoi(endport_s);
|
||||||
|
/*manage = atoi(manage_s);*/
|
||||||
|
number = atoi(number_s);
|
||||||
if(number == 0) number = 1000; /* return up to 1000 mappings by default */
|
if(number == 0) number = 1000; /* return up to 1000 mappings by default */
|
||||||
|
|
||||||
if(startport > endport)
|
if(startport > endport)
|
||||||
|
|
Loading…
Reference in New Issue