summaryrefslogtreecommitdiff
path: root/lib/xmlparse.c
diff options
context:
space:
mode:
authorkwaclaw <kwaclaw>2006-07-05 13:06:59 +0000
committerkwaclaw <kwaclaw>2006-07-05 13:06:59 +0000
commit8d9fb513ec43bd22710b70ece08ddac02344bafa (patch)
tree293143b851b908124511efdc01fb0210f9dda810 /lib/xmlparse.c
parent69ff0627d25870a4302e65c9ae93c4b4bd47ee91 (diff)
downloadlibexpat-8d9fb513ec43bd22710b70ece08ddac02344bafa.tar.gz
Fix for issues # 1515266 and # 1515600. The inner for loop under
XML_TOK_DATA_CHARS in doContent() and doCdataSection() did not check if the character data handler was set each time a call-back was made.
Diffstat (limited to 'lib/xmlparse.c')
-rw-r--r--lib/xmlparse.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/lib/xmlparse.c b/lib/xmlparse.c
index 5df6464..c7b1528 100644
--- a/lib/xmlparse.c
+++ b/lib/xmlparse.c
@@ -2545,9 +2545,9 @@ doContent(XML_Parser parser,
*nextPtr = end;
return XML_ERROR_NONE;
case XML_TOK_DATA_CHARS:
- if (characterDataHandler) {
- if (MUST_CONVERT(enc, s)) {
- for (;;) {
+ if (MUST_CONVERT(enc, s)) {
+ for (;;) {
+ if (characterDataHandler) {
ICHAR *dataPtr = (ICHAR *)dataBuf;
XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
*eventEndPP = s;
@@ -2555,16 +2555,14 @@ doContent(XML_Parser parser,
(int)(dataPtr - (ICHAR *)dataBuf));
if (s == next)
break;
- if (ps_parsing == XML_FINISHED || ps_parsing == XML_SUSPENDED)
- break;
*eventPP = s;
}
}
- else
- characterDataHandler(handlerArg,
- (XML_Char *)s,
- (int)((XML_Char *)next - (XML_Char *)s));
}
+ else if (characterDataHandler)
+ characterDataHandler(handlerArg,
+ (XML_Char *)s,
+ (int)((XML_Char *)next - (XML_Char *)s));
else if (defaultHandler)
reportDefault(parser, enc, s, next);
break;
@@ -3127,9 +3125,9 @@ doCdataSection(XML_Parser parser,
reportDefault(parser, enc, s, next);
break;
case XML_TOK_DATA_CHARS:
- if (characterDataHandler) {
- if (MUST_CONVERT(enc, s)) {
- for (;;) {
+ if (MUST_CONVERT(enc, s)) {
+ for (;;) {
+ if (characterDataHandler) {
ICHAR *dataPtr = (ICHAR *)dataBuf;
XmlConvert(enc, &s, next, &dataPtr, (ICHAR *)dataBufEnd);
*eventEndPP = next;
@@ -3140,11 +3138,11 @@ doCdataSection(XML_Parser parser,
*eventPP = s;
}
}
- else
- characterDataHandler(handlerArg,
- (XML_Char *)s,
- (int)((XML_Char *)next - (XML_Char *)s));
}
+ else if (characterDataHandler)
+ characterDataHandler(handlerArg,
+ (XML_Char *)s,
+ (int)((XML_Char *)next - (XML_Char *)s));
else if (defaultHandler)
reportDefault(parser, enc, s, next);
break;