- client (and maybe others): fix XML parsing bug when skipping large

unrecognized elements
This commit is contained in:
David Anderson 2013-03-08 21:40:15 -08:00 committed by Oliver Bock
parent bd8ecb1b00
commit e07fa5e28c
1 changed files with 6 additions and 5 deletions

View File

@ -801,20 +801,21 @@ bool XML_PARSER::parse_start(const char* start_tag) {
void XML_PARSER::skip_unexpected( void XML_PARSER::skip_unexpected(
const char* start_tag, bool verbose, const char* where const char* start_tag, bool verbose, const char* where
) { ) {
char tag[TAG_BUF_LEN], end_tag[TAG_BUF_LEN]; char buf[MAX_XML_STRING], end_tag[TAG_BUF_LEN];
if (verbose) { if (verbose) {
fprintf(stderr, "Unrecognized XML in %s: %s\n", where, start_tag); fprintf(stderr, "Unrecognized XML in %s: %s\n", where, start_tag);
} }
if (strchr(start_tag, '/')) return; if (strchr(start_tag, '/')) return;
sprintf(end_tag, "/%s", start_tag); sprintf(end_tag, "/%s", start_tag);
while (!get(tag, sizeof(tag), is_tag)) { while (!get(buf, sizeof(buf), is_tag)) {
printf("skip_unexpected: is_tag %d tag %s\n", is_tag, buf);
if (verbose) { if (verbose) {
fprintf(stderr, "Skipping: %s\n", tag); fprintf(stderr, "Skipping: is_tag %d %s\n", is_tag, buf);
} }
if (!is_tag) continue; if (!is_tag) continue;
if (!strcmp(tag, end_tag)) return; if (!strcmp(buf, end_tag)) return;
skip_unexpected(tag, false, where); skip_unexpected(buf, false, where);
} }
} }