summaryrefslogtreecommitdiff
path: root/lib/xmlparse.c
diff options
context:
space:
mode:
authorkwaclaw <kwaclaw>2006-07-10 18:59:52 +0000
committerkwaclaw <kwaclaw>2006-07-10 18:59:52 +0000
commitd4cd186487b0c4b66a6d4ecbc19824ce9f906035 (patch)
tree4a98ef1bad6f24be1ade91b2613685ba1d365d20 /lib/xmlparse.c
parent4bf8fe13332ad960ab1dc7efb5ee84d121f82a7a (diff)
downloadlibexpat-d4cd186487b0c4b66a6d4ecbc19824ce9f906035.tar.gz
Improved fix for issues # 1515266 and # 1515600. Will now preserve the
"failover to default handler" logic. Note: clearing the character data handler does not take effect immediately anymore.
Diffstat (limited to 'lib/xmlparse.c')
-rw-r--r--lib/xmlparse.c76
1 files changed, 39 insertions, 37 deletions
diff --git a/lib/xmlparse.c b/lib/xmlparse.c
index faa841f..db9c174 100644
--- a/lib/xmlparse.c
+++ b/lib/xmlparse.c
@@ -2544,29 +2544,30 @@ doContent(XML_Parser parser,
}
*nextPtr = end;
return XML_ERROR_NONE;
- case XML_TOK_DATA_CHARS:
- if (MUST_CONVERT(enc, s)) {
- for (;;) {
- if (characterDataHandler) {
- ICHAR *dataPtr = (ICHAR *)dataBuf;
- XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
- *eventEndPP = s;
- characterDataHandler(handlerArg, dataBuf,
- (int)(dataPtr - (ICHAR *)dataBuf));
- if (s == next)
- break;
- *eventPP = s;
+ case XML_TOK_DATA_CHARS:
+ {
+ XML_CharacterDataHandler charDataHandler = characterDataHandler;
+ if (charDataHandler) {
+ if (MUST_CONVERT(enc, s)) {
+ for (;;) {
+ ICHAR *dataPtr = (ICHAR *)dataBuf;
+ XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
+ *eventEndPP = s;
+ charDataHandler(handlerArg, dataBuf,
+ (int)(dataPtr - (ICHAR *)dataBuf));
+ if (s == next)
+ break;
+ *eventPP = s;
+ }
}
else
- break;
+ charDataHandler(handlerArg,
+ (XML_Char *)s,
+ (int)((XML_Char *)next - (XML_Char *)s));
}
+ else if (defaultHandler)
+ reportDefault(parser, enc, s, next);
}
- else if (characterDataHandler)
- characterDataHandler(handlerArg,
- (XML_Char *)s,
- (int)((XML_Char *)next - (XML_Char *)s));
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
break;
case XML_TOK_PI:
if (!reportProcessingInstruction(parser, enc, s, next))
@@ -3127,28 +3128,29 @@ doCdataSection(XML_Parser parser,
reportDefault(parser, enc, s, next);
break;
case XML_TOK_DATA_CHARS:
- if (MUST_CONVERT(enc, s)) {
- for (;;) {
- if (characterDataHandler) {
- ICHAR *dataPtr = (ICHAR *)dataBuf;
- XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
- *eventEndPP = next;
- characterDataHandler(handlerArg, dataBuf,
- (int)(dataPtr - (ICHAR *)dataBuf));
- if (s == next)
- break;
- *eventPP = s;
+ {
+ XML_CharacterDataHandler charDataHandler = characterDataHandler;
+ if (charDataHandler) {
+ if (MUST_CONVERT(enc, s)) {
+ for (;;) {
+ ICHAR *dataPtr = (ICHAR *)dataBuf;
+ XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
+ *eventEndPP = next;
+ charDataHandler(handlerArg, dataBuf,
+ (int)(dataPtr - (ICHAR *)dataBuf));
+ if (s == next)
+ break;
+ *eventPP = s;
+ }
}
else
- break;
+ charDataHandler(handlerArg,
+ (XML_Char *)s,
+ (int)((XML_Char *)next - (XML_Char *)s));
}
+ else if (defaultHandler)
+ reportDefault(parser, enc, s, next);
}
- else if (characterDataHandler)
- characterDataHandler(handlerArg,
- (XML_Char *)s,
- (int)((XML_Char *)next - (XML_Char *)s));
- else if (defaultHandler)
- reportDefault(parser, enc, s, next);
break;
case XML_TOK_INVALID:
*eventPP = next;