[Expat-checkins] expat/lib xmlparse.c,1.42,1.43
kwaclaw@users.sourceforge.net
kwaclaw@users.sourceforge.net
Sat Jun 8 17:02:02 2002
Update of /cvsroot/expat/expat/lib
In directory usw-pr-cvs1:/tmp/cvs-serv32099
Modified Files:
xmlparse.c
Log Message:
Applied patch # 559910 - New SkippedEntityHandler
Index: xmlparse.c
===================================================================
RCS file: /cvsroot/expat/expat/lib/xmlparse.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -d -r1.42 -r1.43
--- xmlparse.c 5 Jun 2002 04:13:10 -0000 1.42
+++ xmlparse.c 9 Jun 2002 00:01:30 -0000 1.43
@@ -417,6 +417,7 @@
XML_NotStandaloneHandler m_notStandaloneHandler;
XML_ExternalEntityRefHandler m_externalEntityRefHandler;
void *m_externalEntityRefHandlerArg;
+ XML_SkippedEntityHandler m_skippedEntityHandler;
XML_UnknownEncodingHandler m_unknownEncodingHandler;
XML_ElementDeclHandler m_elementDeclHandler;
XML_AttlistDeclHandler m_attlistDeclHandler;
@@ -500,6 +501,7 @@
#define externalEntityRefHandler (((Parser *)parser)->m_externalEntityRefHandler)
#define externalEntityRefHandlerArg (((Parser *)parser)->m_externalEntityRefHandlerArg)
#define internalEntityRefHandler (((Parser *)parser)->m_internalEntityRefHandler)
+#define skippedEntityHandler (((Parser *)parser)->m_skippedEntityHandler)
#define unknownEncodingHandler (((Parser *)parser)->m_unknownEncodingHandler)
#define elementDeclHandler (((Parser *)parser)->m_elementDeclHandler)
#define attlistDeclHandler (((Parser *)parser)->m_attlistDeclHandler)
@@ -708,6 +710,7 @@
notStandaloneHandler = NULL;
externalEntityRefHandler = NULL;
externalEntityRefHandlerArg = parser;
+ skippedEntityHandler = NULL;
unknownEncodingHandler = NULL;
elementDeclHandler = NULL;
attlistDeclHandler = NULL;
@@ -798,6 +801,7 @@
XML_EndNamespaceDeclHandler oldEndNamespaceDeclHandler = endNamespaceDeclHandler;
XML_NotStandaloneHandler oldNotStandaloneHandler = notStandaloneHandler;
XML_ExternalEntityRefHandler oldExternalEntityRefHandler = externalEntityRefHandler;
+ XML_SkippedEntityHandler oldSkippedEntityHandler = skippedEntityHandler;
XML_UnknownEncodingHandler oldUnknownEncodingHandler = unknownEncodingHandler;
XML_ElementDeclHandler oldElementDeclHandler = elementDeclHandler;
XML_AttlistDeclHandler oldAttlistDeclHandler = attlistDeclHandler;
@@ -844,6 +848,7 @@
endNamespaceDeclHandler = oldEndNamespaceDeclHandler;
notStandaloneHandler = oldNotStandaloneHandler;
externalEntityRefHandler = oldExternalEntityRefHandler;
+ skippedEntityHandler = oldSkippedEntityHandler;
unknownEncodingHandler = oldUnknownEncodingHandler;
elementDeclHandler = oldElementDeclHandler;
attlistDeclHandler = oldAttlistDeclHandler;
@@ -1118,6 +1123,12 @@
externalEntityRefHandlerArg = parser;
}
+void XML_SetSkippedEntityHandler(XML_Parser parser,
+ XML_SkippedEntityHandler handler)
+{
+ skippedEntityHandler = handler;
+}
+
void XML_SetUnknownEncodingHandler(XML_Parser parser,
XML_UnknownEncodingHandler handler,
void *data)
@@ -1626,7 +1637,7 @@
XML_Char ch = (XML_Char) XmlPredefinedEntityName(enc,
s + enc->minBytesPerChar,
next - enc->minBytesPerChar);
- if (ch) {
+ if (ch) {
if (characterDataHandler)
characterDataHandler(handlerArg, &ch, 1);
else if (defaultHandler)
@@ -1642,9 +1653,11 @@
poolDiscard(&dtd.pool);
if (!entity) {
if (!hadExternalDoctype || dtd.standalone)
- return XML_ERROR_UNDEFINED_ENTITY;
- if (defaultHandler)
- reportDefault(parser, enc, s, next);
+ return XML_ERROR_UNDEFINED_ENTITY;
+ if (skippedEntityHandler)
+ skippedEntityHandler(handlerArg, name, 0);
+ else if (defaultHandler)
+ reportDefault(parser, enc, s, next);
break;
}
if (entity->open)
@@ -1655,8 +1668,11 @@
if (entity->textPtr) {
enum XML_Error result;
OPEN_INTERNAL_ENTITY openEntity;
- if (defaultHandler && !defaultExpandInternalEntities) {
- reportDefault(parser, enc, s, next);
+ if (!defaultExpandInternalEntities) {
+ if (skippedEntityHandler)
+ skippedEntityHandler(handlerArg, entity->name, 0);
+ else if (defaultHandler)
+ reportDefault(parser, enc, s, next);
break;
}
entity->open = 1;
@@ -1665,7 +1681,7 @@
openEntity.entity = entity;
openEntity.internalEventPtr = NULL;
openEntity.internalEventEndPtr = NULL;
- result = doContent(parser,
+ result = doContent(parser,
tagLevel,
internalEncoding,
(char *)entity->textPtr,
@@ -3417,6 +3433,8 @@
if (!entity) {
if (!hadExternalDoctype || dtd.standalone)
return XML_ERROR_UNDEFINED_ENTITY;
+ if (skippedEntityHandler)
+ skippedEntityHandler(handlerArg, name, 1);
break;
}
if (entity->open)
@@ -3782,6 +3800,8 @@
eventPtr = ptr;
return XML_ERROR_UNDEFINED_ENTITY;
}
+ if (skippedEntityHandler)
+ skippedEntityHandler(handlerArg, name, 0);
}
else if (entity->open) {
if (enc == encoding)
@@ -3903,7 +3923,10 @@
/* in the internal subset, PE references are
not allowed within markup declarations */
eventPtr = entityTextPtr;
- result = XML_ERROR_SYNTAX;
+ if (prologState.documentEntity)
+ result = XML_ERROR_PARAM_ENTITY_REF;
+ else
+ result = XML_ERROR_SYNTAX;
goto endEntityValue;
case XML_TOK_NONE:
result = XML_ERROR_NONE;