mirror of
https://github.com/status-im/miniupnp.git
synced 2025-01-31 00:26:48 +00:00
upnpreplyparse.c: Fix memory leak
If there are multiple NewPortListing tags, there is a malloc() for each one. fixes #357
This commit is contained in:
parent
a9a764cea9
commit
e1b4f25bba
@ -1,7 +1,8 @@
|
||||
/* $Id: upnpreplyparse.c,v 1.19 2015/07/15 10:29:11 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
/* $Id: upnpreplyparse.c,v 1.20 2017/12/12 11:26:25 nanard Exp $ */
|
||||
/* vim: tabstop=4 shiftwidth=4 noexpandtab
|
||||
* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2015 Thomas Bernard
|
||||
* (c) 2006-2019 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -26,12 +27,12 @@ NameValueParserStartElt(void * d, const char * name, int l)
|
||||
}
|
||||
|
||||
static void
|
||||
NameValueParserEndElt(void * d, const char * name, int l)
|
||||
NameValueParserEndElt(void * d, const char * name, int namelen)
|
||||
{
|
||||
struct NameValueParserData * data = (struct NameValueParserData *)d;
|
||||
struct NameValue * nv;
|
||||
(void)name;
|
||||
(void)l;
|
||||
(void)namelen;
|
||||
if(!data->topelt)
|
||||
return;
|
||||
if(strcmp(data->curelt, "NewPortListing") != 0)
|
||||
@ -77,6 +78,7 @@ NameValueParserGetData(void * d, const char * datas, int l)
|
||||
if(strcmp(data->curelt, "NewPortListing") == 0)
|
||||
{
|
||||
/* specific case for NewPortListing which is a XML Document */
|
||||
free(data->portListing);
|
||||
data->portListing = malloc(l + 1);
|
||||
if(!data->portListing)
|
||||
{
|
||||
@ -104,9 +106,7 @@ ParseNameValue(const char * buffer, int bufsize,
|
||||
struct NameValueParserData * data)
|
||||
{
|
||||
struct xmlparser parser;
|
||||
data->l_head = NULL;
|
||||
data->portListing = NULL;
|
||||
data->portListingLength = 0;
|
||||
memset(data, 0, sizeof(struct NameValueParserData));
|
||||
/* init xmlparser object */
|
||||
parser.xmlstart = buffer;
|
||||
parser.xmlsize = bufsize;
|
||||
|
@ -1,7 +1,8 @@
|
||||
/* $Id: upnpreplyparse.c,v 1.19 2015/07/15 10:29:11 nanard Exp $ */
|
||||
/* MiniUPnP project
|
||||
/* $Id: upnpreplyparse.c,v 1.20 2017/12/12 11:26:25 nanard Exp $ */
|
||||
/* vim: tabstop=4 shiftwidth=4 noexpandtab
|
||||
* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2015 Thomas Bernard
|
||||
* (c) 2006-2019 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -26,12 +27,12 @@ NameValueParserStartElt(void * d, const char * name, int l)
|
||||
}
|
||||
|
||||
static void
|
||||
NameValueParserEndElt(void * d, const char * name, int l)
|
||||
NameValueParserEndElt(void * d, const char * name, int namelen)
|
||||
{
|
||||
struct NameValueParserData * data = (struct NameValueParserData *)d;
|
||||
struct NameValue * nv;
|
||||
(void)name;
|
||||
(void)l;
|
||||
(void)namelen;
|
||||
if(!data->topelt)
|
||||
return;
|
||||
if(strcmp(data->curelt, "NewPortListing") != 0)
|
||||
@ -77,6 +78,7 @@ NameValueParserGetData(void * d, const char * datas, int l)
|
||||
if(strcmp(data->curelt, "NewPortListing") == 0)
|
||||
{
|
||||
/* specific case for NewPortListing which is a XML Document */
|
||||
free(data->portListing);
|
||||
data->portListing = malloc(l + 1);
|
||||
if(!data->portListing)
|
||||
{
|
||||
@ -104,9 +106,7 @@ ParseNameValue(const char * buffer, int bufsize,
|
||||
struct NameValueParserData * data)
|
||||
{
|
||||
struct xmlparser parser;
|
||||
data->l_head = NULL;
|
||||
data->portListing = NULL;
|
||||
data->portListingLength = 0;
|
||||
memset(data, 0, sizeof(struct NameValueParserData));
|
||||
/* init xmlparser object */
|
||||
parser.xmlstart = buffer;
|
||||
parser.xmlsize = bufsize;
|
||||
|
@ -1,6 +1,9 @@
|
||||
$Id: Changelog.txt,v 1.237 2019/04/03 15:57:43 nanard Exp $
|
||||
miniUPnP client Changelog.
|
||||
|
||||
2019/04/05:
|
||||
Fix memory leak in upnpreplyparse.c with NewPortListing element
|
||||
|
||||
2019/03/10:
|
||||
connecthostport.c: Code simplification, error trace fix
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
/* $Id: upnpreplyparse.c,v 1.19 2015/07/15 10:29:11 nanard Exp $ */
|
||||
/* $Id: upnpreplyparse.c,v 1.20 2017/12/12 11:26:25 nanard Exp $ */
|
||||
/* vim: tabstop=4 shiftwidth=4 noexpandtab
|
||||
* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2017 Thomas Bernard
|
||||
* (c) 2006-2019 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -78,6 +78,7 @@ NameValueParserGetData(void * d, const char * datas, int l)
|
||||
if(strcmp(data->curelt, "NewPortListing") == 0)
|
||||
{
|
||||
/* specific case for NewPortListing which is a XML Document */
|
||||
free(data->portListing);
|
||||
data->portListing = malloc(l + 1);
|
||||
if(!data->portListing)
|
||||
{
|
||||
|
@ -1,5 +1,8 @@
|
||||
$Id: Changelog.txt,v 1.444 2019/04/03 16:25:53 nanard Exp $
|
||||
|
||||
2019/04/05:
|
||||
Fix memory leak in upnpreplyparse.c with NewPortListing element
|
||||
|
||||
2019/03/22:
|
||||
netfilter: miniupnpd_functions.sh parsing fix.
|
||||
fix postrouting chain init.
|
||||
|
@ -2,7 +2,7 @@
|
||||
/* vim: tabstop=4 shiftwidth=4 noexpandtab
|
||||
* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
* (c) 2006-2017 Thomas Bernard
|
||||
* (c) 2006-2019 Thomas Bernard
|
||||
* This software is subject to the conditions detailed
|
||||
* in the LICENCE file provided within the distribution */
|
||||
|
||||
@ -78,6 +78,7 @@ NameValueParserGetData(void * d, const char * datas, int l)
|
||||
if(strcmp(data->curelt, "NewPortListing") == 0)
|
||||
{
|
||||
/* specific case for NewPortListing which is a XML Document */
|
||||
free(data->portListing);
|
||||
data->portListing = malloc(l + 1);
|
||||
if(!data->portListing)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user