Index: third_party/libxml/xmlschemastypes.c |
diff --git a/third_party/libxml/xmlschemastypes.c b/third_party/libxml/xmlschemastypes.c |
index 0d967d074132f08f5de740dd6f135eea3d073028..1ce21e10bf14b4b901664b4bb4ed000a69837ef9 100644 |
--- a/third_party/libxml/xmlschemastypes.c |
+++ b/third_party/libxml/xmlschemastypes.c |
@@ -2899,12 +2899,23 @@ xmlSchemaValAtomicType(xmlSchemaTypePtr type, const xmlChar * value, |
case XML_SCHEMAS_ANYURI:{ |
if (*value != 0) { |
xmlURIPtr uri; |
+ xmlChar *tmpval, *cur; |
if (normOnTheFly) { |
norm = xmlSchemaCollapseString(value); |
if (norm != NULL) |
value = norm; |
} |
- uri = xmlParseURI((const char *) value); |
+ tmpval = xmlStrdup(value); |
+ for (cur = tmpval; *cur; ++cur) { |
+ if (*cur < 32 || *cur >= 127 || *cur == ' ' || |
+ *cur == '<' || *cur == '>' || *cur == '"' || |
+ *cur == '{' || *cur == '}' || *cur == '|' || |
+ *cur == '\\' || *cur == '^' || *cur == '`' || |
+ *cur == '\'') |
+ *cur = '_'; |
+ } |
+ uri = xmlParseURI((const char *) tmpval); |
+ xmlFree(tmpval); |
if (uri == NULL) |
goto return1; |
xmlFreeURI(uri); |