support CDATA in xml parser
This commit is contained in:
@@ -80,7 +80,30 @@ namespace libtorrent
|
||||
if (p == end) break;
|
||||
|
||||
// skip '<'
|
||||
++p;
|
||||
++p;
|
||||
if (p != end && p+8 < end && string_begins_no_case("![CDATA[", p))
|
||||
{
|
||||
// CDATA. match '![CDATA['
|
||||
p += 8;
|
||||
start = p;
|
||||
while (p != end && !string_begins_no_case("]]>", p-2)) ++p;
|
||||
|
||||
// parse error
|
||||
if (p == end)
|
||||
{
|
||||
token = xml_parse_error;
|
||||
start = "unexpected end of file";
|
||||
callback(token, start, val_start);
|
||||
break;
|
||||
}
|
||||
|
||||
token = xml_string;
|
||||
char tmp = p[-2];
|
||||
p[-2] = 0;
|
||||
callback(token, start, val_start);
|
||||
p[-2] = tmp;
|
||||
continue;
|
||||
}
|
||||
|
||||
// parse the name of the tag.
|
||||
for (start = p; p != end && *p != '>' && !isspace(*p); ++p);
|
||||
@@ -202,7 +225,6 @@ namespace libtorrent
|
||||
*i = save;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user