more work on bug #109225, and fixed an uninitialized variable pointed out

* relaxng.c: more work on bug #109225, and fixed an uninitialized
  variable pointed out by valgrind
Daniel
diff --git a/relaxng.c b/relaxng.c
index 723e5fd..ea17cf1 100644
--- a/relaxng.c
+++ b/relaxng.c
@@ -58,6 +58,8 @@
 /* #define DEBUG_ERROR 1 */
 
 #define UNBOUNDED (1 << 30)
+#define MAX_ERROR 5
+
 #define TODO 								\
     xmlGenericError(xmlGenericErrorContext,				\
 	    "Unimplemented block at %s:%d\n",				\
@@ -2112,25 +2114,28 @@
  */
 static void
 xmlRelaxNGDumpValidError(xmlRelaxNGValidCtxtPtr ctxt) {
-    int i, j;
+    int i, j, k;
     xmlRelaxNGValidErrorPtr err, dup;
 
 #ifdef DEBUG_ERROR
     xmlGenericError(xmlGenericErrorContext,
 	    "Dumping error stack %d errors\n", ctxt->errNr);
 #endif
-    for (i = 0;i < ctxt->errNr;i++) {
+    for (i = 0, k = 0;i < ctxt->errNr;i++) {
 	err = &ctxt->errTab[i];
-	for (j = 0;j < i;j++) {
-	    dup = &ctxt->errTab[j];
-	    if ((err->err == dup->err) && (err->node == dup->node) &&
-		(xmlStrEqual(err->arg1, dup->arg1)) &&
-		(xmlStrEqual(err->arg2, dup->arg2))) {
-		goto skip;
+	if (k < MAX_ERROR) {
+	    for (j = 0;j < i;j++) {
+		dup = &ctxt->errTab[j];
+		if ((err->err == dup->err) && (err->node == dup->node) &&
+		    (xmlStrEqual(err->arg1, dup->arg1)) &&
+		    (xmlStrEqual(err->arg2, dup->arg2))) {
+		    goto skip;
+		}
 	    }
+	    xmlRelaxNGShowValidError(ctxt, err->err, err->node, err->seq,
+				     err->arg1, err->arg2);
+	    k++;
 	}
-	xmlRelaxNGShowValidError(ctxt, err->err, err->node, err->seq,
-		                 err->arg1, err->arg2);
 skip:
 	if (err->flags & ERROR_IS_DUP) {
 	    if (err->arg1 != NULL)
@@ -2893,7 +2898,7 @@
 static xmlRelaxNGDefinePtr
 xmlRelaxNGParseValue(xmlRelaxNGParserCtxtPtr ctxt, xmlNodePtr node) {
     xmlRelaxNGDefinePtr def = NULL;
-    xmlRelaxNGTypeLibraryPtr lib;
+    xmlRelaxNGTypeLibraryPtr lib = NULL;
     xmlChar *type;
     xmlChar *library;
     int success = 0;