--- embedaddon/miniupnpd/minixml.c 2012/02/21 23:16:02 1.1.1.1 +++ embedaddon/miniupnpd/minixml.c 2012/05/29 12:55:57 1.1.1.2 @@ -1,10 +1,10 @@ -/* $Id: minixml.c,v 1.1.1.1 2012/02/21 23:16:02 misho Exp $ */ +/* $Id: minixml.c,v 1.1.1.2 2012/05/29 12:55:57 misho Exp $ */ /* minixml.c : the minimum size a xml parser can be ! */ /* Project : miniupnp * webpage: http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/ * Author : Thomas Bernard -Copyright (c) 2005-2009, Thomas BERNARD +Copyright (c) 2005-2011, Thomas BERNARD All rights reserved. Redistribution and use in source and binary forms, with or without @@ -30,6 +30,7 @@ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGE ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include #include "minixml.h" /* parseatt : used to parse the argument list @@ -143,18 +144,42 @@ static void parseelt(struct xmlparser * p) return; while( IS_WHITE_SPACE(*p->xml) ) { - p->xml++; + i++; p->xml++; if (p->xml >= p->xmlend) return; } - while(*p->xml!='<') + if(memcmp(p->xml, "xml += 9; + data = p->xml; + i = 0; + while(memcmp(p->xml, "]]>", 3) != 0) + { + i++; p->xml++; + if ((p->xml + 3) >= p->xmlend) + return; + } + if(i>0 && p->datafunc) + p->datafunc(p->data, data, i); + while(*p->xml!='<') + { + p->xml++; + if (p->xml >= p->xmlend) + return; + } + } + else { - i++; p->xml++; - if (p->xml >= p->xmlend) - return; + while(*p->xml!='<') + { + i++; p->xml++; + if ((p->xml + 1) >= p->xmlend) + return; + } + if(i>0 && p->datafunc && *(p->xml + 1) == '/') + p->datafunc(p->data, data, i); } - if(i>0 && p->datafunc) - p->datafunc(p->data, data, i); } } else if(*p->xml == '/')