[libxml2] Improve the error report on undefined REFs



commit cb3549e30a63935fa840d61412abe828b0c6753e
Author: Daniel Veillard <veillard redhat com>
Date:   Fri Nov 11 11:25:07 2011 +0800

    Improve the error report on undefined REFs
    
    Use the tree node to provide the error context instead
    of the parser input which is not relevant anymore,
    based on a suggestion by FranÃois Delyon <f delyon satimage fr>

 result/valid/xlink.xml.err |    4 +---
 valid.c                    |    7 +++++++
 2 files changed, 8 insertions(+), 3 deletions(-)
---
diff --git a/result/valid/xlink.xml.err b/result/valid/xlink.xml.err
index 08c84bd..c0eea7c 100644
--- a/result/valid/xlink.xml.err
+++ b/result/valid/xlink.xml.err
@@ -1,6 +1,4 @@
 ./test/valid/xlink.xml:450: element termdef: validity error : ID dt-arc already defined
 	<p><termdef id="dt-arc" term="Arc">An <term>arc</term> is contained within an e
 	                                  ^
-./test/valid/xlink.xml:530: element termref: validity error : IDREF attribute def references an unknown ID "dt-xlg"
-
-^
+./test/valid/xlink.xml:199: element termref: validity error : IDREF attribute def references an unknown ID "dt-xlg"
diff --git a/valid.c b/valid.c
index 2cb32f3..5de491d 100644
--- a/valid.c
+++ b/valid.c
@@ -6559,6 +6559,7 @@ xmlValidateCheckRefCallback(xmlListPtr ref_list, xmlValidCtxtPtr ctxt,
 int
 xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
     xmlRefTablePtr table;
+    unsigned int save;
 
     if (ctxt == NULL)
         return(0);
@@ -6568,6 +6569,10 @@ xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
 	return(0);
     }
 
+    /* trick to get correct line id report */
+    save = ctxt->finishDtd;
+    ctxt->finishDtd = 0;
+
     /*
      * Check all the NOTATION/NOTATIONS attributes
      */
@@ -6581,6 +6586,8 @@ xmlValidateDocumentFinal(xmlValidCtxtPtr ctxt, xmlDocPtr doc) {
     ctxt->doc = doc;
     ctxt->valid = 1;
     xmlHashScan(table, (xmlHashScanner) xmlValidateCheckRefCallback, ctxt);
+
+    ctxt->finishDtd = save;
     return(ctxt->valid);
 }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]