summaryrefslogtreecommitdiffstats
path: root/src/xplist.c
diff options
context:
space:
mode:
authorGravatar Nikias Bassen2017-01-02 00:53:20 +0100
committerGravatar Nikias Bassen2017-01-02 00:53:20 +0100
commit1cdb888575c6fc53fabe3575534ba99e3bb2c153 (patch)
tree9c3c2d83be5cd314b9d351127bf7af80d263757e /src/xplist.c
parent7a3ce8da05c3ce93121676e286ab4d40305b21bb (diff)
downloadlibplist-1cdb888575c6fc53fabe3575534ba99e3bb2c153.tar.gz
libplist-1cdb888575c6fc53fabe3575534ba99e3bb2c153.tar.bz2
xplist: Error out when invalid tags inside text nodes are encountered
Diffstat (limited to 'src/xplist.c')
-rw-r--r--src/xplist.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/xplist.c b/src/xplist.c
index a7d0722..ff065a9 100644
--- a/src/xplist.c
+++ b/src/xplist.c
@@ -587,15 +587,25 @@ static text_part_t* get_text_parts(parse_ctx ctx, const char* tag, size_t tag_le
587 } 587 }
588 ctx->pos += 3; 588 ctx->pos += 3;
589 } else { 589 } else {
590 PLIST_XML_ERR("Invalid special tag <[%.6s encountered\n", ctx->pos); 590 p = ctx->pos;
591 find_next(ctx, " \r\n\t>", 5, 1);
592 PLIST_XML_ERR("Invalid special tag '<[%.*s>' encountered inside '<%s>' tag\n", (int)(ctx->pos - p), p, tag);
591 ctx->err++; 593 ctx->err++;
592 return NULL; 594 return NULL;
593 } 595 }
596 } else {
597 p = ctx->pos;
598 find_next(ctx, " \r\n\t>", 5, 1);
599 PLIST_XML_ERR("Invalid special tag '<!%.*s>' encountered inside '<%s>' tag\n", (int)(ctx->pos - p), p, tag);
600 ctx->err++;
601 return NULL;
594 } 602 }
595 } else if (*ctx->pos == '/') { 603 } else if (*ctx->pos == '/') {
596 break; 604 break;
597 } else { 605 } else {
598 PLIST_XML_ERR("Invalid tag %.10s inside %s tag\n", ctx->pos, tag); 606 p = ctx->pos;
607 find_next(ctx, " \r\n\t>", 5, 1);
608 PLIST_XML_ERR("Invalid tag '<%.*s>' encountered inside '<%s>' tag\n", (int)(ctx->pos - p), p, tag);
599 ctx->err++; 609 ctx->err++;
600 return NULL; 610 return NULL;
601 } 611 }