summaryrefslogtreecommitdiff
path: root/subversion/libsvn_ra_serf/xml.c
diff options
context:
space:
mode:
Diffstat (limited to 'subversion/libsvn_ra_serf/xml.c')
-rw-r--r--subversion/libsvn_ra_serf/xml.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/subversion/libsvn_ra_serf/xml.c b/subversion/libsvn_ra_serf/xml.c
index bedcbd30237e..1a988572b841 100644
--- a/subversion/libsvn_ra_serf/xml.c
+++ b/subversion/libsvn_ra_serf/xml.c
@@ -988,6 +988,30 @@ expat_cdata(void *userData, const char *data, int len)
#endif
}
+#if XML_VERSION_AT_LEAST(1, 95, 8)
+static void
+expat_entity_declaration(void *userData,
+ const XML_Char *entityName,
+ int is_parameter_entity,
+ const XML_Char *value,
+ int value_length,
+ const XML_Char *base,
+ const XML_Char *systemId,
+ const XML_Char *publicId,
+ const XML_Char *notationName)
+{
+ struct expat_ctx_t *ectx = userData;
+
+ /* Stop the parser if an entity declaration is hit. */
+ XML_StopParser(ectx->parser, 0 /* resumable */);
+}
+#else
+/* A noop default_handler. */
+static void
+expat_default_handler(void *userData, const XML_Char *s, int len)
+{
+}
+#endif
/* Implements svn_ra_serf__response_handler_t */
static svn_error_t *
@@ -1042,6 +1066,12 @@ expat_response_handler(serf_request_t *request,
XML_SetUserData(ectx->parser, ectx);
XML_SetElementHandler(ectx->parser, expat_start, expat_end);
XML_SetCharacterDataHandler(ectx->parser, expat_cdata);
+
+#if XML_VERSION_AT_LEAST(1, 95, 8)
+ XML_SetEntityDeclHandler(ectx->parser, expat_entity_declaration);
+#else
+ XML_SetDefaultHandler(ectx->parser, expat_default_handler);
+#endif
}
while (1)