1
0
mirror of https://gitlab.gnome.org/GNOME/libxml2.git synced 2025-07-29 11:41:22 +03:00

after and exchange with James Clark it appeared I had bug in URI parsing

* test/xsdtest/xsdtest.xml uri.c: after and exchange with James
  Clark it appeared I had bug in URI parsing code ...
* relaxng.c include/libxml/relaxng.h: completely revamped error
  reporting to not loose message from optional parts.
* xmllint.c: added timing for RNG validation steps
* result/relaxng/*: updated the result, all error messages changed
Daniel
This commit is contained in:
Daniel Veillard
2003-03-07 18:32:59 +00:00
parent edfd588e95
commit 42f12e99d1
35 changed files with 931 additions and 229 deletions

View File

@ -1,3 +1,12 @@
Fri Mar 7 19:29:40 CET 2003 Daniel Veillard <daniel@veillard.com>
* test/xsdtest/xsdtest.xml uri.c: after and exchange with James
Clark it appeared I had bug in URI parsing code ...
* relaxng.c include/libxml/relaxng.h: completely revamped error
reporting to not loose message from optional parts.
* xmllint.c: added timing for RNG validation steps
* result/relaxng/*: updated the result, all error messages changed
Fri Mar 7 15:18:32 CET 2003 Daniel Veillard <daniel@veillard.com> Fri Mar 7 15:18:32 CET 2003 Daniel Veillard <daniel@veillard.com>
* xpath.c: fix bug #107804, the algorithm used for document order * xpath.c: fix bug #107804, the algorithm used for document order

View File

@ -27,6 +27,44 @@ typedef xmlRelaxNGParserCtxt *xmlRelaxNGParserCtxtPtr;
typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt; typedef struct _xmlRelaxNGValidCtxt xmlRelaxNGValidCtxt;
typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr; typedef xmlRelaxNGValidCtxt *xmlRelaxNGValidCtxtPtr;
/*
* xmlRelaxNGValidErr:
*
* List of possible Relax NG validation errors
*/
typedef enum {
XML_RELAXNG_OK = 0,
XML_RELAXNG_ERR_MEMORY,
XML_RELAXNG_ERR_TYPE,
XML_RELAXNG_ERR_TYPEVAL,
XML_RELAXNG_ERR_TYPECMP,
XML_RELAXNG_ERR_NOSTATE,
XML_RELAXNG_ERR_NODEFINE,
XML_RELAXNG_ERR_LISTEXTRA,
XML_RELAXNG_ERR_INTERNODATA,
XML_RELAXNG_ERR_INTERSEQ,
XML_RELAXNG_ERR_INTEREXTRA,
XML_RELAXNG_ERR_ELEMNAME,
XML_RELAXNG_ERR_ELEMNONS,
XML_RELAXNG_ERR_ELEMWRONGNS,
XML_RELAXNG_ERR_ELEMEXTRANS,
XML_RELAXNG_ERR_ELEMNOTEMPTY,
XML_RELAXNG_ERR_NOELEM,
XML_RELAXNG_ERR_NOTELEM,
XML_RELAXNG_ERR_ATTRVALID,
XML_RELAXNG_ERR_CONTENTVALID,
XML_RELAXNG_ERR_EXTRACONTENT,
XML_RELAXNG_ERR_INVALIDATTR,
XML_RELAXNG_ERR_DATAELEM,
XML_RELAXNG_ERR_VALELEM,
XML_RELAXNG_ERR_LISTELEM,
XML_RELAXNG_ERR_DATATYPE,
XML_RELAXNG_ERR_VALUE,
XML_RELAXNG_ERR_LIST,
XML_RELAXNG_ERR_NOGRAMMAR,
XML_RELAXNG_ERR_EXTRADATA
} xmlRelaxNGValidErr;
/* /*
* Interfaces for parsing. * Interfaces for parsing.
*/ */

568
relaxng.c
View File

@ -46,7 +46,7 @@ static const xmlChar *xmlRelaxNGNs = (const xmlChar *)
(xmlStrEqual(node->ns->href, xmlRelaxNGNs))) (xmlStrEqual(node->ns->href, xmlRelaxNGNs)))
/* #define DEBUG 1 */ /* very verbose output */ /* #define DEBUG 1 */ /* very verbose output */
/* #define DEBUG_GRAMMAR 1 */ /* #define DEBUG_GRAMMAR 1 */
/* #define DEBUG_CONTENT 1 */ /* #define DEBUG_CONTENT 1 */
/* #define DEBUG_TYPE 1 */ /* #define DEBUG_TYPE 1 */
@ -159,12 +159,6 @@ struct _xmlRelaxNG {
void *_private; /* unused by the library for users or bindings */ void *_private; /* unused by the library for users or bindings */
}; };
typedef enum {
XML_RELAXNG_ERR_OK = 0,
XML_RELAXNG_ERR_NOROOT = 1,
XML_RELAXNG_ERR_
} xmlRelaxNGValidError;
#define XML_RELAXNG_IN_ATTRIBUTE (1 << 0) #define XML_RELAXNG_IN_ATTRIBUTE (1 << 0)
#define XML_RELAXNG_IN_ONEORMORE (1 << 1) #define XML_RELAXNG_IN_ONEORMORE (1 << 1)
#define XML_RELAXNG_IN_LIST (1 << 2) #define XML_RELAXNG_IN_LIST (1 << 2)
@ -180,7 +174,7 @@ struct _xmlRelaxNGParserCtxt {
void *userData; /* user specific data block */ void *userData; /* user specific data block */
xmlRelaxNGValidityErrorFunc error; /* the callback in case of errors */ xmlRelaxNGValidityErrorFunc error; /* the callback in case of errors */
xmlRelaxNGValidityWarningFunc warning;/* the callback in case of warning */ xmlRelaxNGValidityWarningFunc warning;/* the callback in case of warning */
xmlRelaxNGValidError err; xmlRelaxNGValidErr err;
xmlRelaxNGPtr schema; /* The schema in use */ xmlRelaxNGPtr schema; /* The schema in use */
xmlRelaxNGGrammarPtr grammar; /* the current grammar */ xmlRelaxNGGrammarPtr grammar; /* the current grammar */
@ -265,6 +259,21 @@ struct _xmlRelaxNGValidState {
xmlAttrPtr attrs[1]; /* the array of attributes */ xmlAttrPtr attrs[1]; /* the array of attributes */
}; };
/**
* xmlRelaxNGValidError:
*
* A RelaxNGs validation error
*/
typedef struct _xmlRelaxNGValidError xmlRelaxNGValidError;
typedef xmlRelaxNGValidError *xmlRelaxNGValidErrorPtr;
struct _xmlRelaxNGValidError {
xmlRelaxNGValidErr err; /* the error number */
xmlNodePtr node; /* the current node */
xmlNodePtr seq; /* the current child */
const xmlChar * arg1; /* first arg */
const xmlChar * arg2; /* second arg */
};
/** /**
* xmlRelaxNGValidCtxt: * xmlRelaxNGValidCtxt:
* *
@ -281,6 +290,15 @@ struct _xmlRelaxNGValidCtxt {
xmlRelaxNGValidStatePtr state; /* the current validation state */ xmlRelaxNGValidStatePtr state; /* the current validation state */
int flags; /* validation flags */ int flags; /* validation flags */
int depth; /* validation depth */ int depth; /* validation depth */
/*
* Errors accumulated in branches may have to be stacked to be
* provided back when it's sure they affect validation.
*/
xmlRelaxNGValidErrorPtr err; /* Last error */
int errNr; /* Depth of the error stack */
int errMax; /* Max depth of the error stack */
xmlRelaxNGValidErrorPtr errTab; /* stack of errors */
}; };
/** /**
@ -1138,6 +1156,82 @@ xmlRelaxNGLoadInclude(xmlRelaxNGParserCtxtPtr ctxt, const xmlChar *URL,
return(ret); return(ret);
} }
/**
* xmlRelaxNGValidErrorPush:
* @ctxt: the validation context
* @err: the error code
* @arg1: the first string argument
* @arg2: the second string argument
*
* Pushes a new error on top of the error stack
*
* Returns 0 in case of error, the index in the stack otherwise
*/
static int
xmlRelaxNGValidErrorPush(xmlRelaxNGValidCtxtPtr ctxt, xmlRelaxNGValidErr err,
const xmlChar *arg1, const xmlChar *arg2)
{
xmlRelaxNGValidErrorPtr cur;
if (ctxt->errTab == NULL) {
ctxt->errMax = 8;
ctxt->errNr = 0;
ctxt->errTab = (xmlRelaxNGValidErrorPtr) xmlMalloc(
ctxt->errMax * sizeof(xmlRelaxNGValidError));
if (ctxt->errTab == NULL) {
xmlGenericError(xmlGenericErrorContext, "malloc failed !\n");
return (0);
}
}
if (ctxt->errNr >= ctxt->errMax) {
ctxt->errMax *= 2;
ctxt->errTab =
(xmlRelaxNGValidErrorPtr) xmlRealloc(ctxt->errTab,
ctxt->errMax * sizeof(xmlRelaxNGValidError));
if (ctxt->errTab == NULL) {
xmlGenericError(xmlGenericErrorContext, "realloc failed !\n");
return (0);
}
}
cur = &ctxt->errTab[ctxt->errNr];
cur->err = err;
cur->arg1 = arg1;
cur->arg2 = arg2;
if (ctxt->state != NULL) {
cur->node = ctxt->state->node;
cur->seq = ctxt->state->seq;
} else {
cur->node = NULL;
cur->seq = NULL;
}
ctxt->err = cur;
return (ctxt->errNr++);
}
/**
* xmlRelaxNGValidErrorPop:
* @ctxt: the validation context
*
* Pops the top error from the error stack
*
* Returns the error just removed
*/
static xmlRelaxNGValidErrorPtr
xmlRelaxNGValidErrorPop(xmlRelaxNGValidCtxtPtr ctxt)
{
xmlRelaxNGValidErrorPtr ret;
if (ctxt->errNr <= 0)
return (NULL);
ctxt->errNr--;
if (ctxt->errNr > 0)
ctxt->err = &ctxt->errTab[ctxt->errNr - 1];
else
ctxt->err = NULL;
ret = &ctxt->errTab[ctxt->errNr];
return (ret);
}
/** /**
* xmlRelaxNGDocumentPush: * xmlRelaxNGDocumentPush:
* @ctxt: the parser context * @ctxt: the parser context
@ -1303,21 +1397,9 @@ xmlRelaxNGLoadExternalRef(xmlRelaxNGParserCtxtPtr ctxt, const xmlChar *URL,
* * * *
************************************************************************/ ************************************************************************/
#define VALID_CTXT() \ #define VALID_ERR(a) xmlRelaxNGAddValidError(ctxt, a, NULL, NULL);
if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) \ #define VALID_ERR2(a, b) xmlRelaxNGAddValidError(ctxt, a, b, NULL);
xmlGenericError(xmlGenericErrorContext, \ #define VALID_ERR3(a, b, c) xmlRelaxNGAddValidError(ctxt, a, b, c);
"error detected at %s:%d\n", \
__FILE__, __LINE__);
#define VALID_ERROR(a) \
if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) \
if (ctxt->error != NULL) ctxt->error(ctxt->userData, a)
#define VALID_ERROR2(a, b) \
if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) \
if (ctxt->error != NULL) ctxt->error(ctxt->userData, a, b)
#define VALID_ERROR3(a, b, c) \
if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) \
if (ctxt->error != NULL) ctxt->error(ctxt->userData, a, b, c)
#ifdef DEBUG #ifdef DEBUG
static const char * static const char *
@ -1350,19 +1432,137 @@ xmlRelaxNGDefName(xmlRelaxNGDefinePtr def) {
} }
#endif #endif
#if 0
/** /**
* xmlRelaxNGErrorContext: * xmlRelaxNGGetErrorString:
* @ctxt: the parsing context * @err: the error code
* @schema: the schema being built * @arg1: the first string argument
* @node: the node being processed * @arg2: the second string argument
* @child: the child being processed
* *
* Dump a RelaxNGType structure * computes a formatted error string for the given error code and args
*
* Returns the error string, it must be deallocated by the caller
*/
static xmlChar *
xmlRelaxNGGetErrorString(xmlRelaxNGValidErr err, const xmlChar *arg1,
const xmlChar *arg2) {
char msg[1000];
if (arg1 == NULL)
arg1 = BAD_CAST "";
if (arg2 == NULL)
arg2 = BAD_CAST "";
msg[0] = 0;
switch (err) {
case XML_RELAXNG_OK:
return(NULL);
case XML_RELAXNG_ERR_MEMORY:
return(xmlCharStrdup("out of memory"));
case XML_RELAXNG_ERR_TYPE:
snprintf(msg, 1000, "failed to validate type %s", arg1);
break;
case XML_RELAXNG_ERR_TYPEVAL:
snprintf(msg, 1000, "Type %s doesn't allow value %s", arg1, arg2);
break;
case XML_RELAXNG_ERR_TYPECMP:
snprintf(msg, 1000, "failed to compare type %s", arg1);
break;
case XML_RELAXNG_ERR_NOSTATE:
return(xmlCharStrdup("Internal error: no state"));
case XML_RELAXNG_ERR_NODEFINE:
return(xmlCharStrdup("Internal error: no define"));
case XML_RELAXNG_ERR_LISTEXTRA:
snprintf(msg, 1000, "Extra data in list: %s", arg1);
break;
case XML_RELAXNG_ERR_INTERNODATA:
return(xmlCharStrdup("Internal: interleave block has no data"));
case XML_RELAXNG_ERR_INTERSEQ:
return(xmlCharStrdup("Invalid sequence in interleave"));
case XML_RELAXNG_ERR_INTEREXTRA:
snprintf(msg, 1000, "Extra element %s in interleave", arg1);
break;
case XML_RELAXNG_ERR_ELEMNAME:
snprintf(msg, 1000, "Expecting element %s, got %s", arg1, arg2);
break;
case XML_RELAXNG_ERR_ELEMNONS:
snprintf(msg, 1000, "Expecting a namespace for element %s", arg1);
break;
case XML_RELAXNG_ERR_ELEMWRONGNS:
snprintf(msg, 1000, "Element %s has wrong namespace: expecting %s",
arg1, arg2);
break;
case XML_RELAXNG_ERR_ELEMEXTRANS:
snprintf(msg, 1000, "Expecting no namespace for element %s", arg1);
break;
case XML_RELAXNG_ERR_ELEMNOTEMPTY:
snprintf(msg, 1000, "Expecting element %s to be empty", arg1);
break;
case XML_RELAXNG_ERR_NOELEM:
snprintf(msg, 1000, "Expecting an element %s, got nothing", arg1);
break;
case XML_RELAXNG_ERR_NOTELEM:
return(xmlCharStrdup("Expecting an element got text"));
case XML_RELAXNG_ERR_ATTRVALID:
snprintf(msg, 1000, "Element %s failed to validate attributes",
arg1);
break;
case XML_RELAXNG_ERR_CONTENTVALID:
snprintf(msg, 1000, "Element %s failed to validate content",
arg1);
break;
case XML_RELAXNG_ERR_EXTRACONTENT:
snprintf(msg, 1000, "Element %s has extra content: %s",
arg1, arg2);
break;
case XML_RELAXNG_ERR_INVALIDATTR:
snprintf(msg, 1000, "Invalid attribute %s for element %s",
arg1, arg2);
break;
case XML_RELAXNG_ERR_DATAELEM:
snprintf(msg, 1000, "Datatype element %s has child elements",
arg1);
break;
case XML_RELAXNG_ERR_VALELEM:
snprintf(msg, 1000, "Value element %s has child elements",
arg1);
break;
case XML_RELAXNG_ERR_LISTELEM:
snprintf(msg, 1000, "List element %s has child elements",
arg1);
break;
case XML_RELAXNG_ERR_DATATYPE:
snprintf(msg, 1000, "Error validating datatype %s",
arg1);
break;
case XML_RELAXNG_ERR_VALUE:
snprintf(msg, 1000, "Error validating value %s",
arg1);
break;
case XML_RELAXNG_ERR_LIST:
return(xmlCharStrdup("Error validating list"));
case XML_RELAXNG_ERR_NOGRAMMAR:
return(xmlCharStrdup("No top grammar defined"));
case XML_RELAXNG_ERR_EXTRADATA:
return(xmlCharStrdup("Extra data in the document"));
}
if (msg[0] == 0) {
snprintf(msg, 1000, "Unknown error code %d", err);
}
msg[1000] = 0;
return(xmlStrdup((xmlChar *) msg));
}
/**
* xmlRelaxNGValidErrorContext:
* @ctxt: the validation context
* @node: the node
* @child: the node child generating the problem.
*
* Dump informations about the kocation of the error in the instance
*/ */
static void static void
xmlRelaxNGErrorContext(xmlRelaxNGParserCtxtPtr ctxt, xmlRelaxNGPtr schema, xmlRelaxNGValidErrorContext(xmlRelaxNGValidCtxtPtr ctxt, xmlNodePtr node,
xmlNodePtr node, xmlNodePtr child) xmlNodePtr child)
{ {
int line = 0; int line = 0;
const xmlChar *file = NULL; const xmlChar *file = NULL;
@ -1401,10 +1601,7 @@ xmlRelaxNGErrorContext(xmlRelaxNGParserCtxtPtr ctxt, xmlRelaxNGPtr schema,
} }
} }
if (ctxt != NULL) type = "RNG validity error";
type = "compilation error";
else if (schema != NULL)
type = "runtime error";
if ((file != NULL) && (line != 0) && (name != NULL)) if ((file != NULL) && (line != 0) && (name != NULL))
ctxt->error(ctxt->userData, "%s: file %s line %d element %s\n", ctxt->error(ctxt->userData, "%s: file %s line %d element %s\n",
@ -1421,7 +1618,99 @@ xmlRelaxNGErrorContext(xmlRelaxNGParserCtxtPtr ctxt, xmlRelaxNGPtr schema,
else else
ctxt->error(ctxt->userData, "%s\n", type); ctxt->error(ctxt->userData, "%s\n", type);
} }
#endif
/**
* xmlRelaxNGShowValidError:
* @ctxt: the validation context
* @err: the error number
* @node: the node
* @child: the node child generating the problem.
* @arg1: the first argument
* @arg2: the second argument
*
* Show a validation error.
*/
static void
xmlRelaxNGShowValidError(xmlRelaxNGValidCtxtPtr ctxt, xmlRelaxNGValidErr err,
xmlNodePtr node, xmlNodePtr child,
const xmlChar *arg1, const xmlChar *arg2)
{
xmlChar *msg;
if (ctxt->error == NULL)
return;
msg = xmlRelaxNGGetErrorString(err, arg1, arg2);
if (msg == NULL)
return;
xmlRelaxNGValidErrorContext(ctxt, node, child);
ctxt->error(ctxt->userData, "%s\n", msg);
xmlFree(msg);
}
/**
* xmlRelaxNGDumpValidError:
* @ctxt: the validation context
*
* Show all validation error over a given index.
*/
static void
xmlRelaxNGDumpValidError(xmlRelaxNGValidCtxtPtr ctxt) {
int i;
xmlRelaxNGValidErrorPtr err;
for (i = 0;i < ctxt->errNr;i++) {
err = &ctxt->errTab[i];
xmlRelaxNGShowValidError(ctxt, err->err, err->node, err->seq,
err->arg1, err->arg2);
}
ctxt->errNr = 0;
}
/**
* xmlRelaxNGAddValidError:
* @ctxt: the validation context
* @err: the error number
* @arg1: the first argument
* @arg2: the second argument
*
* Register a validation error, either generating it if it's sure
* or stacking it for later handling if unsure.
*/
static void
xmlRelaxNGAddValidError(xmlRelaxNGValidCtxtPtr ctxt, xmlRelaxNGValidErr err,
const xmlChar *arg1, const xmlChar *arg2)
{
if ((ctxt == NULL) || (ctxt->error == NULL))
return;
/*
* generate the error directly
*/
if (((ctxt->flags & 1) == 0) || (ctxt->flags & 2)) {
xmlNodePtr node, seq;
/*
* Flush first any stacked error which might be the
* real cause of the problem.
*/
if (ctxt->errNr != 0)
xmlRelaxNGDumpValidError(ctxt);
if (ctxt->state != NULL) {
node = ctxt->state->node;
seq = ctxt->state->seq;
} else {
node = seq = NULL;
}
xmlRelaxNGShowValidError(ctxt, err, node, seq, arg1, arg2);
}
/*
* Stack the error for later processing if needed
*/
else {
xmlRelaxNGValidErrorPush(ctxt, err, arg1, arg2);
}
}
/************************************************************************ /************************************************************************
* * * *
@ -1509,7 +1798,7 @@ xmlRelaxNGSchemaTypeCheck(void *data ATTRIBUTE_UNUSED,
* Returns 1 if yes, 0 if no and -1 in case of error. * Returns 1 if yes, 0 if no and -1 in case of error.
*/ */
static int static int
xmlRelaxNGSchemaFacetCheck (void *data, const xmlChar *type, xmlRelaxNGSchemaFacetCheck (void *data ATTRIBUTE_UNUSED, const xmlChar *type,
const xmlChar *facetname, const xmlChar *val, const xmlChar *facetname, const xmlChar *val,
const xmlChar *strval, void *value) { const xmlChar *strval, void *value) {
xmlSchemaFacetPtr facet; xmlSchemaFacetPtr facet;
@ -2193,6 +2482,8 @@ xmlRelaxNGCompareNameClasses(xmlRelaxNGDefinePtr def1,
xmlRelaxNGValidCtxt ctxt; xmlRelaxNGValidCtxt ctxt;
ctxt.flags = FLAGS_IGNORABLE; ctxt.flags = FLAGS_IGNORABLE;
memset(&ctxt, 0, sizeof(xmlRelaxNGValidCtxt));
if ((def1->type == XML_RELAXNG_ELEMENT) || if ((def1->type == XML_RELAXNG_ELEMENT) ||
(def1->type == XML_RELAXNG_ATTRIBUTE)) { (def1->type == XML_RELAXNG_ATTRIBUTE)) {
if (def2->type == XML_RELAXNG_TEXT) if (def2->type == XML_RELAXNG_TEXT)
@ -5899,8 +6190,7 @@ xmlRelaxNGNormalize(xmlRelaxNGValidCtxtPtr ctxt, const xmlChar *str) {
ret = (xmlChar *) xmlMalloc((len + 1) * sizeof(xmlChar)); ret = (xmlChar *) xmlMalloc((len + 1) * sizeof(xmlChar));
if (ret == NULL) { if (ret == NULL) {
if (ctxt != NULL) { if (ctxt != NULL) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_MEMORY);
VALID_ERROR("xmlRelaxNGNormalize: out of memory\n");
} else { } else {
xmlGenericError(xmlGenericErrorContext, xmlGenericError(xmlGenericErrorContext,
"xmlRelaxNGNormalize: out of memory\n"); "xmlRelaxNGNormalize: out of memory\n");
@ -5954,16 +6244,14 @@ xmlRelaxNGValidateDatatype(xmlRelaxNGValidCtxtPtr ctxt, const xmlChar *value,
} else } else
ret = -1; ret = -1;
if (ret < 0) { if (ret < 0) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_TYPE, define->name);
VALID_ERROR2("failed to validate type %s\n", define->name);
if ((result != NULL) && (lib != NULL) && (lib->freef != NULL)) if ((result != NULL) && (lib != NULL) && (lib->freef != NULL))
lib->freef(lib->data, result); lib->freef(lib->data, result);
return(-1); return(-1);
} else if (ret == 1) { } else if (ret == 1) {
ret = 0; ret = 0;
} else { } else {
VALID_CTXT(); VALID_ERR3(XML_RELAXNG_ERR_TYPEVAL, define->name, value);
VALID_ERROR3("Type %s doesn't allow value %s\n", define->name, value);
ret = -1; ret = -1;
} }
cur = define->attrs; cur = define->attrs;
@ -6084,9 +6372,7 @@ xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
else else
ret = -1; ret = -1;
if (ret < 0) { if (ret < 0) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_TYPECMP, define->name);
VALID_ERROR2("Internal: failed to compare type %s\n",
define->name);
return(-1); return(-1);
} else if (ret == 1) { } else if (ret == 1) {
ret = 0; ret = 0;
@ -6140,6 +6426,12 @@ xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
list = list->next; list = list->next;
} }
ctxt->flags = oldflags; ctxt->flags = oldflags;
if (ret != 0) {
if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
xmlRelaxNGDumpValidError(ctxt);
} else {
ctxt->errNr = 0;
}
if (ret == 0) if (ret == 0)
xmlRelaxNGNextValue(ctxt); xmlRelaxNGNextValue(ctxt);
break; break;
@ -6159,8 +6451,7 @@ xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
val = xmlStrdup(BAD_CAST ""); val = xmlStrdup(BAD_CAST "");
} }
if (val == NULL) { if (val == NULL) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_NOSTATE);
VALID_ERROR("Internal: no state\n");
return(-1); return(-1);
} }
cur = val; cur = val;
@ -6207,8 +6498,7 @@ xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
if ((ret == 0) && (ctxt->state->value != NULL) && if ((ret == 0) && (ctxt->state->value != NULL) &&
(ctxt->state->value != ctxt->state->endvalue)) { (ctxt->state->value != ctxt->state->endvalue)) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_LISTEXTRA, ctxt->state->value);
VALID_ERROR2("Extra data in list: %s\n", ctxt->state->value);
ret = -1; ret = -1;
} }
xmlFree(val); xmlFree(val);
@ -6241,6 +6531,12 @@ xmlRelaxNGValidateValue(xmlRelaxNGValidCtxtPtr ctxt,
cur = ctxt->state->value; cur = ctxt->state->value;
} }
ctxt->flags = oldflags; ctxt->flags = oldflags;
if (ret != 0) {
if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
xmlRelaxNGDumpValidError(ctxt);
} else {
ctxt->errNr = 0;
}
break; break;
} }
case XML_RELAXNG_EXCEPT: { case XML_RELAXNG_EXCEPT: {
@ -6538,6 +6834,8 @@ static int
xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt, xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
xmlRelaxNGDefinePtr define) { xmlRelaxNGDefinePtr define) {
int ret = 0, i, nbgroups, left; int ret = 0, i, nbgroups, left;
int errNr = ctxt->errNr;
xmlRelaxNGPartitionPtr partitions; xmlRelaxNGPartitionPtr partitions;
xmlRelaxNGInterleaveGroupPtr group = NULL; xmlRelaxNGInterleaveGroupPtr group = NULL;
xmlNodePtr cur, start, last = NULL, lastchg = NULL, lastelem; xmlNodePtr cur, start, last = NULL, lastchg = NULL, lastelem;
@ -6548,8 +6846,7 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
nbgroups = partitions->nbgroups; nbgroups = partitions->nbgroups;
left = nbgroups; left = nbgroups;
} else { } else {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_INTERNODATA);
VALID_ERROR("Internal: interleave block has no data\n");
return(-1); return(-1);
} }
@ -6559,15 +6856,13 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
*/ */
list = (xmlNodePtr *) xmlMalloc(nbgroups * sizeof(xmlNodePtr)); list = (xmlNodePtr *) xmlMalloc(nbgroups * sizeof(xmlNodePtr));
if (list == NULL) { if (list == NULL) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_MEMORY);
VALID_ERROR("Internal: out of memory in interleave check\n");
return(-1); return(-1);
} }
memset(list, 0, nbgroups * sizeof(xmlNodePtr)); memset(list, 0, nbgroups * sizeof(xmlNodePtr));
lasts = (xmlNodePtr *) xmlMalloc(nbgroups * sizeof(xmlNodePtr)); lasts = (xmlNodePtr *) xmlMalloc(nbgroups * sizeof(xmlNodePtr));
if (lasts == NULL) { if (lasts == NULL) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_MEMORY);
VALID_ERROR("Internal: out of memory in interleave check\n");
return(-1); return(-1);
} }
memset(lasts, 0, nbgroups * sizeof(xmlNodePtr)); memset(lasts, 0, nbgroups * sizeof(xmlNodePtr));
@ -6608,8 +6903,7 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
cur = xmlRelaxNGSkipIgnored(ctxt, cur->next); cur = xmlRelaxNGSkipIgnored(ctxt, cur->next);
} }
if (ret != 0) { if (ret != 0) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_INTERSEQ);
VALID_ERROR("Invalid sequence in interleave\n");
ret = -1; ret = -1;
goto done; goto done;
} }
@ -6627,8 +6921,7 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
cur = ctxt->state->seq; cur = ctxt->state->seq;
cur = xmlRelaxNGSkipIgnored(ctxt, cur); cur = xmlRelaxNGSkipIgnored(ctxt, cur);
if (cur != NULL) { if (cur != NULL) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_INTEREXTRA, cur->name);
VALID_ERROR2("Extra element %s in interleave\n", cur->name);
ret = -1; ret = -1;
goto done; goto done;
} }
@ -6638,8 +6931,7 @@ xmlRelaxNGValidateInterleave(xmlRelaxNGValidCtxtPtr ctxt,
} }
ctxt->state->seq = lastelem; ctxt->state->seq = lastelem;
if (ret != 0) { if (ret != 0) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_INTERSEQ);
VALID_ERROR("Invalid sequence in interleave\n");
ret = -1; ret = -1;
goto done; goto done;
} }
@ -6655,6 +6947,9 @@ done:
cur->prev->next = cur; cur->prev->next = cur;
cur = cur->prev; cur = cur->prev;
} }
if (ret == 0) {
ctxt->errNr = errNr;
}
xmlFree(list); xmlFree(list);
xmlFree(lasts); xmlFree(lasts);
@ -6676,8 +6971,7 @@ xmlRelaxNGValidateElementContent(xmlRelaxNGValidCtxtPtr ctxt,
int ret = 0, res; int ret = 0, res;
if (ctxt->state == NULL) { if (ctxt->state == NULL) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_NOSTATE);
VALID_ERROR("Internal: no state\n");
return(-1); return(-1);
} }
while (defines != NULL) { while (defines != NULL) {
@ -6708,33 +7002,27 @@ xmlRelaxNGElementMatch(xmlRelaxNGValidCtxtPtr ctxt,
if (define->name != NULL) { if (define->name != NULL) {
if (!xmlStrEqual(elem->name, define->name)) { if (!xmlStrEqual(elem->name, define->name)) {
VALID_CTXT(); VALID_ERR3(XML_RELAXNG_ERR_ELEMNAME, define->name, elem->name);
VALID_ERROR3("Expecting element %s, got %s\n",
define->name, elem->name);
return(0); return(0);
} }
} }
if ((define->ns != NULL) && (define->ns[0] != 0)) { if ((define->ns != NULL) && (define->ns[0] != 0)) {
if (elem->ns == NULL) { if (elem->ns == NULL) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_ELEMNONS,
VALID_ERROR2("Expecting a namespace for element %s\n",
elem->name); elem->name);
return(0); return(0);
} else if (!xmlStrEqual(elem->ns->href, define->ns)) { } else if (!xmlStrEqual(elem->ns->href, define->ns)) {
VALID_CTXT(); VALID_ERR3(XML_RELAXNG_ERR_ELEMWRONGNS,
VALID_ERROR3("Expecting element %s has wrong namespace: expecting %s\n",
elem->name, define->ns); elem->name, define->ns);
return(0); return(0);
} }
} else if ((elem->ns != NULL) && (define->ns != NULL) && } else if ((elem->ns != NULL) && (define->ns != NULL) &&
(define->name == NULL)) { (define->name == NULL)) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_ELEMEXTRANS,
VALID_ERROR2("Expecting no namespace for element %s\n", elem->name);
define->name);
return(0); return(0);
} else if ((elem->ns != NULL) && (define->name != NULL)) { } else if ((elem->ns != NULL) && (define->name != NULL)) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_ELEMEXTRANS,
VALID_ERROR2("Expecting no namespace for element %s\n",
define->name); define->name);
return(0); return(0);
} }
@ -6765,6 +7053,7 @@ xmlRelaxNGElementMatch(xmlRelaxNGValidCtxtPtr ctxt,
ctxt->flags = oldflags; ctxt->flags = oldflags;
} else if (define->type == XML_RELAXNG_CHOICE) { } else if (define->type == XML_RELAXNG_CHOICE) {
xmlRelaxNGDefinePtr list; xmlRelaxNGDefinePtr list;
oldflags = ctxt->flags; oldflags = ctxt->flags;
ctxt->flags |= FLAGS_IGNORABLE; ctxt->flags |= FLAGS_IGNORABLE;
@ -6781,6 +7070,12 @@ xmlRelaxNGElementMatch(xmlRelaxNGValidCtxtPtr ctxt,
} }
list = list->next; list = list->next;
} }
if (ret != 0) {
if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
xmlRelaxNGDumpValidError(ctxt);
} else {
ctxt->errNr = 0;
}
ret = 0; ret = 0;
ctxt->flags = oldflags; ctxt->flags = oldflags;
} else { } else {
@ -6807,8 +7102,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
xmlRelaxNGValidStatePtr oldstate, state; xmlRelaxNGValidStatePtr oldstate, state;
if (define == NULL) { if (define == NULL) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_NODEFINE);
VALID_ERROR("internal error: define == NULL\n");
return(-1); return(-1);
} }
if (ctxt->state != NULL) { if (ctxt->state != NULL) {
@ -6833,8 +7127,8 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
case XML_RELAXNG_EMPTY: case XML_RELAXNG_EMPTY:
node = xmlRelaxNGSkipIgnored(ctxt, node); node = xmlRelaxNGSkipIgnored(ctxt, node);
if (node != NULL) { if (node != NULL) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_ELEMNOTEMPTY,
VALID_ERROR("Expecting an empty element\n"); ctxt->state->node->name);
ret = -1; ret = -1;
break; break;
} }
@ -6844,38 +7138,23 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
ret = -1; ret = -1;
break; break;
case XML_RELAXNG_TEXT: case XML_RELAXNG_TEXT:
#if 0
if (node == NULL) {
ret = 0;
break;
}
#endif
while ((node != NULL) && while ((node != NULL) &&
((node->type == XML_TEXT_NODE) || ((node->type == XML_TEXT_NODE) ||
(node->type == XML_COMMENT_NODE) || (node->type == XML_COMMENT_NODE) ||
(node->type == XML_PI_NODE) || (node->type == XML_PI_NODE) ||
(node->type == XML_CDATA_SECTION_NODE))) (node->type == XML_CDATA_SECTION_NODE)))
node = node->next; node = node->next;
#if 0
if (node == ctxt->state->seq) {
VALID_CTXT();
VALID_ERROR("Expecting text content\n");
ret = -1;
}
#endif
ctxt->state->seq = node; ctxt->state->seq = node;
break; break;
case XML_RELAXNG_ELEMENT: case XML_RELAXNG_ELEMENT:
node = xmlRelaxNGSkipIgnored(ctxt, node); node = xmlRelaxNGSkipIgnored(ctxt, node);
if (node == NULL) { if (node == NULL) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_NOELEM, define->name);
VALID_ERROR("Expecting an element, got empty\n");
ret = -1; ret = -1;
break; break;
} }
if (node->type != XML_ELEMENT_NODE) { if (node->type != XML_ELEMENT_NODE) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_NOTELEM);
VALID_ERROR2("Expecting an element got %d type\n", node->type);
ret = -1; ret = -1;
break; break;
} }
@ -6894,6 +7173,16 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
break; break;
} }
ret = 0; ret = 0;
if (ctxt->errNr != 0) {
if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
ctxt->errNr = 0;
else {
while ((ctxt->err != NULL) &&
(ctxt->err->err == XML_RELAXNG_ERR_ELEMNAME) &&
(xmlStrEqual(ctxt->err->arg2, node->name)))
xmlRelaxNGValidErrorPop(ctxt);
}
}
state = xmlRelaxNGNewValidState(ctxt, node); state = xmlRelaxNGNewValidState(ctxt, node);
if (state == NULL) { if (state == NULL) {
@ -6907,43 +7196,28 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
tmp = xmlRelaxNGValidateAttributeList(ctxt, define->attrs); tmp = xmlRelaxNGValidateAttributeList(ctxt, define->attrs);
if (tmp != 0) { if (tmp != 0) {
ret = -1; ret = -1;
#ifdef DEBUG VALID_ERR2(XML_RELAXNG_ERR_ATTRVALID, node->name);
xmlGenericError(xmlGenericErrorContext,
"E: Element %s failed to validate attributes\n",
node->name);
#endif
} }
} }
if (define->content != NULL) { if (define->content != NULL) {
tmp = xmlRelaxNGValidateElementContent(ctxt, define->content); tmp = xmlRelaxNGValidateElementContent(ctxt, define->content);
if (tmp != 0) { if (tmp != 0) {
ret = -1; ret = -1;
#ifdef DEBUG VALID_ERR2(XML_RELAXNG_ERR_CONTENTVALID, node->name);
xmlGenericError(xmlGenericErrorContext,
"E: Element %s failed to validate element content\n",
node->name);
#endif
} }
} }
state = ctxt->state; state = ctxt->state;
if (state->seq != NULL) { if (state->seq != NULL) {
state->seq = xmlRelaxNGSkipIgnored(ctxt, state->seq); state->seq = xmlRelaxNGSkipIgnored(ctxt, state->seq);
if (state->seq != NULL) { if (state->seq != NULL) {
VALID_CTXT(); VALID_ERR3(XML_RELAXNG_ERR_EXTRACONTENT,
VALID_ERROR3("Extra content for element %s: %s\n",
node->name, state->seq->name); node->name, state->seq->name);
ret = -1; ret = -1;
#ifdef DEBUG
xmlGenericError(xmlGenericErrorContext,
"E: Element %s has extra content: %s\n",
node->name, state->seq->name);
#endif
} }
} }
for (i = 0;i < state->nbAttrs;i++) { for (i = 0;i < state->nbAttrs;i++) {
if (state->attrs[i] != NULL) { if (state->attrs[i] != NULL) {
VALID_CTXT(); VALID_ERR3(XML_RELAXNG_ERR_INVALIDATTR,
VALID_ERROR3("Invalid attribute %s for element %s\n",
state->attrs[i]->name, node->name); state->attrs[i]->name, node->name);
ret = -1; ret = -1;
} }
@ -6952,8 +7226,9 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
xmlRelaxNGFreeValidState(state); xmlRelaxNGFreeValidState(state);
if (oldstate != NULL) if (oldstate != NULL)
oldstate->seq = xmlRelaxNGSkipIgnored(ctxt, node->next); oldstate->seq = xmlRelaxNGSkipIgnored(ctxt, node->next);
if (ret == 0) if (ret == 0) {
node->_private = define; node->_private = define;
}
#ifdef DEBUG #ifdef DEBUG
@ -6972,7 +7247,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
oldstate->seq->name, oldstate->seq->type); oldstate->seq->name, oldstate->seq->type);
#endif #endif
break; break;
case XML_RELAXNG_OPTIONAL: case XML_RELAXNG_OPTIONAL: {
oldflags = ctxt->flags; oldflags = ctxt->flags;
ctxt->flags |= FLAGS_IGNORABLE; ctxt->flags |= FLAGS_IGNORABLE;
oldstate = xmlRelaxNGCopyValidState(ctxt, ctxt->state); oldstate = xmlRelaxNGCopyValidState(ctxt, ctxt->state);
@ -6980,13 +7255,16 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
if (ret != 0) { if (ret != 0) {
xmlRelaxNGFreeValidState(ctxt->state); xmlRelaxNGFreeValidState(ctxt->state);
ctxt->state = oldstate; ctxt->state = oldstate;
ctxt->flags = oldflags;
ret = 0; ret = 0;
break; break;
} }
xmlRelaxNGFreeValidState(oldstate); xmlRelaxNGFreeValidState(oldstate);
ctxt->flags = oldflags; ctxt->flags = oldflags;
ret = 0; ret = 0;
ctxt->errNr = 0;
break; break;
}
case XML_RELAXNG_ONEORMORE: case XML_RELAXNG_ONEORMORE:
ret = xmlRelaxNGValidateDefinition(ctxt, define->content); ret = xmlRelaxNGValidateDefinition(ctxt, define->content);
if (ret != 0) { if (ret != 0) {
@ -7029,6 +7307,9 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
} }
} }
ctxt->flags = oldflags; ctxt->flags = oldflags;
if (ret == 0) {
ctxt->errNr = 0;
}
ret = 0; ret = 0;
break; break;
} }
@ -7061,6 +7342,12 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
ctxt->flags = oldflags; ctxt->flags = oldflags;
if (success == 1) if (success == 1)
ret = 0; ret = 0;
if (ret != 0) {
if ((ctxt->flags & FLAGS_IGNORABLE) == 0)
xmlRelaxNGDumpValidError(ctxt);
} else if ((ctxt->flags & FLAGS_IGNORABLE) == 0) {
ctxt->errNr = 0;
}
break; break;
} }
case XML_RELAXNG_DEF: case XML_RELAXNG_DEF:
@ -7094,8 +7381,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
child = node; child = node;
while (child != NULL) { while (child != NULL) {
if (child->type == XML_ELEMENT_NODE) { if (child->type == XML_ELEMENT_NODE) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_DATAELEM,
VALID_ERROR2("Element %s has child elements\n",
node->parent->name); node->parent->name);
ret = -1; ret = -1;
break; break;
@ -7114,16 +7400,14 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
if (content == NULL) { if (content == NULL) {
content = xmlStrdup(BAD_CAST ""); content = xmlStrdup(BAD_CAST "");
if (content == NULL) { if (content == NULL) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_MEMORY);
VALID_ERROR("Allocation failure\n");
ret = -1; ret = -1;
break; break;
} }
} }
ret = xmlRelaxNGValidateDatatype(ctxt, content, define); ret = xmlRelaxNGValidateDatatype(ctxt, content, define);
if (ret == -1) { if (ret == -1) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_DATATYPE, define->name);
VALID_ERROR2("Error validating %s\n", define->name);
} else if (ret == 0) { } else if (ret == 0) {
ctxt->state->seq = NULL; ctxt->state->seq = NULL;
} }
@ -7139,8 +7423,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
child = node; child = node;
while (child != NULL) { while (child != NULL) {
if (child->type == XML_ELEMENT_NODE) { if (child->type == XML_ELEMENT_NODE) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_VALELEM,
VALID_ERROR2("Element %s has child elements\n",
node->parent->name); node->parent->name);
ret = -1; ret = -1;
break; break;
@ -7159,8 +7442,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
if (content == NULL) { if (content == NULL) {
content = xmlStrdup(BAD_CAST ""); content = xmlStrdup(BAD_CAST "");
if (content == NULL) { if (content == NULL) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_MEMORY);
VALID_ERROR("Allocation failure\n");
ret = -1; ret = -1;
break; break;
} }
@ -7170,12 +7452,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
ret = xmlRelaxNGValidateValue(ctxt, define); ret = xmlRelaxNGValidateValue(ctxt, define);
ctxt->state->value = oldvalue; ctxt->state->value = oldvalue;
if (ret == -1) { if (ret == -1) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_VALUE, define->name);
if (define->name != NULL) {
VALID_ERROR2("error validating value %s\n", define->name);
} else {
VALID_ERROR("error validating value\n");
}
} else if (ret == 0) { } else if (ret == 0) {
ctxt->state->seq = NULL; ctxt->state->seq = NULL;
} }
@ -7197,8 +7474,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
child = node; child = node;
while (child != NULL) { while (child != NULL) {
if (child->type == XML_ELEMENT_NODE) { if (child->type == XML_ELEMENT_NODE) {
VALID_CTXT(); VALID_ERR2(XML_RELAXNG_ERR_LISTELEM,
VALID_ERROR2("Element %s has child elements\n",
node->parent->name); node->parent->name);
ret = -1; ret = -1;
break; break;
@ -7217,8 +7493,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
if (content == NULL) { if (content == NULL) {
content = xmlStrdup(BAD_CAST ""); content = xmlStrdup(BAD_CAST "");
if (content == NULL) { if (content == NULL) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_MEMORY);
VALID_ERROR("Allocation failure\n");
ret = -1; ret = -1;
break; break;
} }
@ -7232,8 +7507,7 @@ xmlRelaxNGValidateDefinition(xmlRelaxNGValidCtxtPtr ctxt,
ctxt->state->value = oldvalue; ctxt->state->value = oldvalue;
ctxt->state->endvalue = oldendvalue; ctxt->state->endvalue = oldendvalue;
if (ret == -1) { if (ret == -1) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_LIST);
VALID_ERROR("error validating list\n");
} else if ((ret == 0) && (node != NULL)) { } else if ((ret == 0) && (node != NULL)) {
ctxt->state->seq = node->next; ctxt->state->seq = node->next;
} }
@ -7286,8 +7560,7 @@ xmlRelaxNGValidateDocument(xmlRelaxNGValidCtxtPtr ctxt, xmlDocPtr doc) {
schema = ctxt->schema; schema = ctxt->schema;
grammar = schema->topgrammar; grammar = schema->topgrammar;
if (grammar == NULL) { if (grammar == NULL) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_NOGRAMMAR);
VALID_ERROR("No top grammar defined\n");
return(-1); return(-1);
} }
state = xmlRelaxNGNewValidState(ctxt, NULL); state = xmlRelaxNGNewValidState(ctxt, NULL);
@ -7300,8 +7573,7 @@ xmlRelaxNGValidateDocument(xmlRelaxNGValidCtxtPtr ctxt, xmlDocPtr doc) {
node = state->seq; node = state->seq;
node = xmlRelaxNGSkipIgnored(ctxt, node); node = xmlRelaxNGSkipIgnored(ctxt, node);
if (node != NULL) { if (node != NULL) {
VALID_CTXT(); VALID_ERR(XML_RELAXNG_ERR_EXTRADATA);
VALID_ERROR("extra data on the document\n");
ret = -1; ret = -1;
} }
} }
@ -7337,6 +7609,10 @@ xmlRelaxNGNewValidCtxt(xmlRelaxNGPtr schema) {
ret->schema = schema; ret->schema = schema;
ret->error = xmlGenericError; ret->error = xmlGenericError;
ret->userData = xmlGenericErrorContext; ret->userData = xmlGenericErrorContext;
ret->errNr = 0;
ret->errMax = 0;
ret->err = NULL;
ret->errTab = NULL;
return (ret); return (ret);
} }
@ -7350,6 +7626,8 @@ void
xmlRelaxNGFreeValidCtxt(xmlRelaxNGValidCtxtPtr ctxt) { xmlRelaxNGFreeValidCtxt(xmlRelaxNGValidCtxtPtr ctxt) {
if (ctxt == NULL) if (ctxt == NULL)
return; return;
if (ctxt->errTab != NULL)
xmlFree(ctxt->errTab);
xmlFree(ctxt); xmlFree(ctxt);
} }

View File

@ -1,2 +1,82 @@
error detected at relaxng.c:7141 RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
extra data on the document Expecting an element element, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element attribute, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element group, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element interleave, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element choice, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element optional, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element zeroOrMore, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element oneOrMore, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element list, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element mixed, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element ref, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element parentRef, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element empty, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element text, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element value, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element data, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element notAllowed, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element externalRef, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting an element grammar, got nothing
RNG validity error: file ./test/relaxng/spec1.rng line 7 element documentation
Invalid sequence in interleave
RNG validity error: file ./test/relaxng/spec1.rng line 7 element documentation
Element element failed to validate content
RNG validity error: file ./test/relaxng/spec1.rng line 7 element documentation
Element element has extra content: documentation
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element attribute, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element group, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element interleave, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element choice, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element optional, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element zeroOrMore, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element oneOrMore, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element list, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element mixed, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element ref, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element parentRef, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element empty, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element text, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element value, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element data, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element notAllowed, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element externalRef, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Expecting element grammar, got element
RNG validity error: file ./test/relaxng/spec1.rng line 6 element element
Extra data in the document

View File

@ -1,4 +1,4 @@
error detected at relaxng.c:6557 RNG validity error: file ./test/relaxng/tutor10_1_4.xml line 1 element foo
Expecting a namespace for element foo Expecting a namespace for element foo
error detected at relaxng.c:7141 RNG validity error: file ./test/relaxng/tutor10_1_4.xml line 1 element foo
extra data on the document Extra data in the document

View File

@ -1,4 +1,4 @@
error detected at relaxng.c:6562 RNG validity error: file ./test/relaxng/tutor10_1_5.xml line 1 element foo
Expecting element foo has wrong namespace: expecting http://www.example.com Element foo has wrong namespace: expecting http://www.example.com
error detected at relaxng.c:7141 RNG validity error: file ./test/relaxng/tutor10_1_5.xml line 1 element foo
extra data on the document Extra data in the document

View File

@ -1,4 +1,4 @@
error detected at relaxng.c:6562 RNG validity error: file ./test/relaxng/tutor10_1_6.xml line 1 element foo
Expecting element foo has wrong namespace: expecting http://www.example.com Element foo has wrong namespace: expecting http://www.example.com
error detected at relaxng.c:7141 RNG validity error: file ./test/relaxng/tutor10_1_6.xml line 1 element foo
extra data on the document Extra data in the document

View File

@ -1,4 +1,4 @@
error detected at relaxng.c:6574 RNG validity error: file ./test/relaxng/tutor10_2_3.xml line 1 element foo
Expecting no namespace for element foo Expecting no namespace for element foo
error detected at relaxng.c:7141 RNG validity error: file ./test/relaxng/tutor10_2_3.xml line 1 element foo
extra data on the document Extra data in the document

View File

@ -1,4 +1,4 @@
error detected at relaxng.c:6574 RNG validity error: file ./test/relaxng/tutor10_2_4.xml line 1 element foo
Expecting no namespace for element foo Expecting no namespace for element foo
error detected at relaxng.c:7141 RNG validity error: file ./test/relaxng/tutor10_2_4.xml line 1 element foo
extra data on the document Extra data in the document

View File

@ -1,2 +1,8 @@
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor10_7_3.xml line 2 element card
Extra content for element addressBook: card Element card failed to validate attributes
RNG validity error: file ./test/relaxng/tutor10_7_3.xml line 2 element card
Invalid attribute name for element card
RNG validity error: file ./test/relaxng/tutor10_7_3.xml line 2 element card
Invalid attribute email for element card
RNG validity error: file ./test/relaxng/tutor10_7_3.xml line 2 element card
Element addressBook has extra content: card

View File

@ -1,2 +1,8 @@
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor10_8_3.xml line 2 element card
Extra content for element addressBook: card Element card failed to validate attributes
RNG validity error: file ./test/relaxng/tutor10_8_3.xml line 2 element card
Invalid attribute name for element card
RNG validity error: file ./test/relaxng/tutor10_8_3.xml line 2 element card
Invalid attribute email for element card
RNG validity error: file ./test/relaxng/tutor10_8_3.xml line 2 element card
Element addressBook has extra content: card

View File

@ -1,2 +1,2 @@
error detected at relaxng.c:6783 RNG validity error: file ./test/relaxng/tutor11_2_2.xml line 3 element card
Invalid attribute foo for element card Invalid attribute foo for element card

View File

@ -1,2 +1,2 @@
error detected at relaxng.c:6783 RNG validity error: file ./test/relaxng/tutor11_2_3.xml line 3 element card
Invalid attribute b for element card Invalid attribute b for element card

View File

@ -1,2 +1,150 @@
error detected at relaxng.c:7141 RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
extra data on the document Expecting an element element, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element attribute, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element group, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element interleave, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element choice, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element optional, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element zeroOrMore, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element oneOrMore, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element list, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element mixed, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element ref, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element parentRef, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element empty, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element text, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element value, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element data, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element notAllowed, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element externalRef, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting an element grammar, got nothing
RNG validity error: file ./test/relaxng/tutor12_1.rng line 4 element documentation
Invalid sequence in interleave
RNG validity error: file ./test/relaxng/tutor12_1.rng line 4 element documentation
Element element failed to validate content
RNG validity error: file ./test/relaxng/tutor12_1.rng line 4 element documentation
Element element has extra content: documentation
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element attribute, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element group, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element interleave, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element choice, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element optional, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element zeroOrMore, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element oneOrMore, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element list, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element mixed, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element ref, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element parentRef, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element empty, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element text, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element value, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element data, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element notAllowed, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element externalRef, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 3 element element
Expecting element grammar, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Invalid sequence in interleave
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Element zeroOrMore failed to validate content
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Expecting element oneOrMore, got zeroOrMore
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Expecting element list, got zeroOrMore
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Expecting element mixed, got zeroOrMore
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Expecting element ref, got zeroOrMore
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Expecting element parentRef, got zeroOrMore
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Expecting element empty, got zeroOrMore
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Expecting element text, got zeroOrMore
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Expecting element value, got zeroOrMore
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Expecting element data, got zeroOrMore
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Expecting element notAllowed, got zeroOrMore
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Expecting element externalRef, got zeroOrMore
RNG validity error: file ./test/relaxng/tutor12_1.rng line 2 element zeroOrMore
Expecting element grammar, got zeroOrMore
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Invalid sequence in interleave
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Element element failed to validate content
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element attribute, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element group, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element interleave, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element choice, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element optional, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element zeroOrMore, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element oneOrMore, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element list, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element mixed, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element ref, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element parentRef, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element empty, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element text, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element value, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element data, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element notAllowed, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element externalRef, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Expecting element grammar, got element
RNG validity error: file ./test/relaxng/tutor12_1.rng line 1 element element
Extra data in the document

View File

@ -1,4 +1,6 @@
error detected at relaxng.c:6549 RNG validity error: file ./test/relaxng/tutor3_2_1.xml line 1 element email
Expecting element name, got email Expecting element name, got email
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor3_2_1.xml line 1 element email
Extra content for element card: email Element card failed to validate content
RNG validity error: file ./test/relaxng/tutor3_2_1.xml line 1 element email
Element card has extra content: email

View File

@ -1,2 +1,6 @@
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor3_5_2.xml line 2 element name
Extra content for element addressBook: card Element card failed to validate content
RNG validity error: file ./test/relaxng/tutor3_5_2.xml line 2 element name
Element card has extra content: name
RNG validity error: file ./test/relaxng/tutor3_5_2.xml line 2 element card
Element addressBook has extra content: card

View File

@ -1,2 +1,80 @@
error detected at relaxng.c:7141 RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
extra data on the document Expecting an element element, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element attribute, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element group, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element interleave, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element choice, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element optional, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element zeroOrMore, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element oneOrMore, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element list, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element mixed, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element ref, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element parentRef, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element empty, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element text, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element value, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element data, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element notAllowed, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element externalRef, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting an element grammar, got nothing
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Invalid sequence in interleave
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Element element failed to validate content
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element attribute, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element group, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element interleave, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element choice, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element optional, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element zeroOrMore, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element oneOrMore, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element list, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element mixed, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element ref, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element parentRef, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element empty, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element text, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element value, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element data, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element notAllowed, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element externalRef, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Expecting element grammar, got element
RNG validity error: file ./test/relaxng/tutor3_7.rng line 1 element element
Extra data in the document

View File

@ -1,2 +1,4 @@
error detected at relaxng.c:6783 RNG validity error: file ./test/relaxng/tutor6_1_3.xml line 1 element card
Element card failed to validate attributes
RNG validity error: file ./test/relaxng/tutor6_1_3.xml line 1 element card
Invalid attribute preferredFormat for element card Invalid attribute preferredFormat for element card

View File

@ -1,2 +1,10 @@
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor6_2_4.xml line 4 element text
Extra content for element preferredFormat: text Error validating value
RNG validity error: file ./test/relaxng/tutor6_2_4.xml line 4 element text
Error validating value
RNG validity error: file ./test/relaxng/tutor6_2_4.xml line 4 element text
Element preferredFormat failed to validate content
RNG validity error: file ./test/relaxng/tutor6_2_4.xml line 4 element text
Element preferredFormat has extra content: text
RNG validity error: file ./test/relaxng/tutor6_2_4.xml line 1 element card
Element card failed to validate content

View File

@ -1,2 +1,4 @@
error detected at relaxng.c:6783 RNG validity error: file ./test/relaxng/tutor6_3_1.xml line 1 element card
Element card failed to validate attributes
RNG validity error: file ./test/relaxng/tutor6_3_1.xml line 1 element card
Invalid attribute preferredFormat for element card Invalid attribute preferredFormat for element card

View File

@ -1,6 +1,8 @@
error detected at relaxng.c:5813 RNG validity error: file ./test/relaxng/tutor7_1_2.xml line 1 element text
Internal: failed to validate type float failed to validate type float
error detected at relaxng.c:7073 RNG validity error: file ./test/relaxng/tutor7_1_2.xml line 1 element text
error validating list Error validating list
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor7_1_2.xml line 1 element text
Extra content for element vector: text Element vector failed to validate content
RNG validity error: file ./test/relaxng/tutor7_1_2.xml line 1 element text
Element vector has extra content: text

View File

@ -1,6 +1,8 @@
error detected at relaxng.c:6053 RNG validity error: file ./test/relaxng/tutor7_1_3.xml line 1 element text
Extra data in list: 5.6 Extra data in list: 5.6
error detected at relaxng.c:7073 RNG validity error: file ./test/relaxng/tutor7_1_3.xml line 1 element text
error validating list Error validating list
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor7_1_3.xml line 1 element text
Extra content for element vector: text Element vector failed to validate content
RNG validity error: file ./test/relaxng/tutor7_1_3.xml line 1 element text
Element vector has extra content: text

View File

@ -1,4 +1,6 @@
error detected at relaxng.c:5813 RNG validity error: file ./test/relaxng/tutor7_2_4.xml line 1 element vector
Internal: failed to validate type double failed to validate type double
error detected at relaxng.c:7073 RNG validity error: file ./test/relaxng/tutor7_2_4.xml line 1 element vector
error validating list Error validating list
RNG validity error: file ./test/relaxng/tutor7_2_4.xml line 1 element vector
Element vector failed to validate content

View File

@ -1,6 +1,8 @@
error detected at relaxng.c:6053 RNG validity error: file ./test/relaxng/tutor7_3_4.xml line 1 element text
Extra data in list: 5.6 Extra data in list: 5.6
error detected at relaxng.c:7073 RNG validity error: file ./test/relaxng/tutor7_3_4.xml line 1 element text
error validating list Error validating list
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor7_3_4.xml line 1 element text
Extra content for element path: text Element path failed to validate content
RNG validity error: file ./test/relaxng/tutor7_3_4.xml line 1 element text
Element path has extra content: text

View File

@ -1,6 +1,8 @@
error detected at relaxng.c:5813 RNG validity error: file ./test/relaxng/tutor7_3_5.xml line 1 element text
Internal: failed to validate type double failed to validate type double
error detected at relaxng.c:7073 RNG validity error: file ./test/relaxng/tutor7_3_5.xml line 1 element text
error validating list Error validating list
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor7_3_5.xml line 1 element text
Extra content for element path: text Element path failed to validate content
RNG validity error: file ./test/relaxng/tutor7_3_5.xml line 1 element text
Element path has extra content: text

View File

@ -1,4 +1,6 @@
error detected at relaxng.c:6468 RNG validity error: file ./test/relaxng/tutor8_2_4.xml line 5 element title
Extra element title in interleave Extra element title in interleave
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor8_2_4.xml line 5 element title
Extra content for element head: title Element head failed to validate content
RNG validity error: file ./test/relaxng/tutor8_2_4.xml line 5 element title
Element head has extra content: title

View File

@ -1,4 +1,6 @@
error detected at relaxng.c:6709 RNG validity error: file ./test/relaxng/tutor8_2_5.xml line 1 element head
Expecting an element, got empty Expecting an element title, got nothing
error detected at relaxng.c:6479 RNG validity error: file ./test/relaxng/tutor8_2_5.xml line 1 element head
Invalid sequence in interleave Invalid sequence in interleave
RNG validity error: file ./test/relaxng/tutor8_2_5.xml line 1 element head
Element head failed to validate content

View File

@ -1,4 +1,6 @@
error detected at relaxng.c:6468 RNG validity error: file ./test/relaxng/tutor8_2_6.xml line 4 element base
Extra element base in interleave Extra element base in interleave
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor8_2_6.xml line 4 element base
Extra content for element head: base Element head failed to validate content
RNG validity error: file ./test/relaxng/tutor8_2_6.xml line 4 element base
Element head has extra content: base

View File

@ -1,2 +1,6 @@
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor9_5_2.xml line 2 element card
Extra content for element addressBook: card Invalid sequence in interleave
RNG validity error: file ./test/relaxng/tutor9_5_2.xml line 2 element card
Element card failed to validate content
RNG validity error: file ./test/relaxng/tutor9_5_2.xml line 2 element card
Element addressBook has extra content: card

View File

@ -1,2 +1,4 @@
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor9_5_3.xml line 2 element card
Extra content for element addressBook: card Invalid attribute error for element card
RNG validity error: file ./test/relaxng/tutor9_5_3.xml line 2 element card
Element addressBook has extra content: card

View File

@ -1,2 +1,4 @@
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor9_6_2.xml line 2 element card
Extra content for element addressBook: card Element card failed to validate content
RNG validity error: file ./test/relaxng/tutor9_6_2.xml line 2 element card
Element addressBook has extra content: card

View File

@ -1,2 +1,4 @@
error detected at relaxng.c:6770 RNG validity error: file ./test/relaxng/tutor9_6_3.xml line 2 element card
Extra content for element addressBook: card Invalid attribute error for element card
RNG validity error: file ./test/relaxng/tutor9_6_3.xml line 2 element card
Element addressBook has extra content: card

View File

@ -22,10 +22,10 @@
<valid>foobar</valid> <valid>foobar</valid>
<valid>http://www.example.com</valid> <valid>http://www.example.com</valid>
<valid>http://ji%6d@www.example.com</valid> <valid>http://ji%6d@www.example.com</valid>
<valid>http://www.example.co%6d</valid>
<valid>nosuchscheme:stuff</valid> <valid>nosuchscheme:stuff</valid>
<invalid>foo$bar:stuff</invalid> <invalid>foo$bar:stuff</invalid>
<invalid>f%oobar</invalid> <invalid>f%oobar</invalid>
<invalid>http://www.example.co%6d</invalid>
</datatype> </datatype>
<datatype name="integer"> <datatype name="integer">
<valid>10</valid> <valid>10</valid>

6
uri.c
View File

@ -1463,8 +1463,10 @@ xmlParseURIAuthority(xmlURIPtr uri, const char **str) {
* try first to parse it as a server string. * try first to parse it as a server string.
*/ */
ret = xmlParseURIServer(uri, str); ret = xmlParseURIServer(uri, str);
if (ret == 0) if ((ret == 0) && (*str != NULL) &&
((**str == 0) || (**str == '/') || (**str == '?')))
return(0); return(0);
*str = cur;
/* /*
* failed, fallback to reg_name * failed, fallback to reg_name
@ -2020,7 +2022,7 @@ xmlCanonicPath(const xmlChar *path)
p++; p++;
} }
#else #else
uri->path = (char *) xmlStrdup((const char *) path); uri->path = (char *) xmlStrdup((const xmlChar *) path);
#endif #endif
ret = xmlSaveUri(uri); ret = xmlSaveUri(uri);

View File

@ -1066,6 +1066,10 @@ static void parseAndPrintFile(char *filename) {
xmlRelaxNGValidCtxtPtr ctxt; xmlRelaxNGValidCtxtPtr ctxt;
int ret; int ret;
if ((timing) && (!repeat)) {
startTimer();
}
ctxt = xmlRelaxNGNewValidCtxt(relaxngschemas); ctxt = xmlRelaxNGNewValidCtxt(relaxngschemas);
xmlRelaxNGSetValidErrors(ctxt, xmlRelaxNGSetValidErrors(ctxt,
(xmlRelaxNGValidityErrorFunc) fprintf, (xmlRelaxNGValidityErrorFunc) fprintf,
@ -1081,6 +1085,9 @@ static void parseAndPrintFile(char *filename) {
filename); filename);
} }
xmlRelaxNGFreeValidCtxt(ctxt); xmlRelaxNGFreeValidCtxt(ctxt);
if ((timing) && (!repeat)) {
endTimer("Validating");
}
#endif #endif
} }
@ -1470,6 +1477,9 @@ main(int argc, char **argv) {
if (relaxng != NULL) { if (relaxng != NULL) {
xmlRelaxNGParserCtxtPtr ctxt; xmlRelaxNGParserCtxtPtr ctxt;
if (timing) {
startTimer();
}
ctxt = xmlRelaxNGNewParserCtxt(relaxng); ctxt = xmlRelaxNGNewParserCtxt(relaxng);
xmlRelaxNGSetParserErrors(ctxt, xmlRelaxNGSetParserErrors(ctxt,
(xmlRelaxNGValidityErrorFunc) fprintf, (xmlRelaxNGValidityErrorFunc) fprintf,
@ -1477,6 +1487,9 @@ main(int argc, char **argv) {
stderr); stderr);
relaxngschemas = xmlRelaxNGParse(ctxt); relaxngschemas = xmlRelaxNGParse(ctxt);
xmlRelaxNGFreeParserCtxt(ctxt); xmlRelaxNGFreeParserCtxt(ctxt);
if (timing) {
endTimer("Compiling the schemas");
}
} }
#endif #endif
for (i = 1; i < argc ; i++) { for (i = 1; i < argc ; i++) {