Fix XML error handling
authorAdam Dickmeiss <adam@indexdata.dk>
Mon, 8 Sep 2003 09:50:04 +0000 (09:50 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Mon, 8 Sep 2003 09:50:04 +0000 (09:50 +0000)
CHANGELOG
recctrl/xmlread.c

index 8d004d5..2c26579 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,7 +1,6 @@
 
 
-Attempt to avoid SEGV in older versions of Expat by not calling 
-XML_GetCurrent{Line,Column}Number when XML_Parse fails. New
-test case: malxml.
+Fix XML error handling. Stop XML parse immediately if XML parse error
+occur (i.e.  produce one error only).
 
 Zebra ignores "unsupported use attribute" for individual databases
 when search multiple databases (unless all databases fail).
 
 Zebra ignores "unsupported use attribute" for individual databases
 when search multiple databases (unless all databases fail).
index 99951c6..85f8bd8 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: xmlread.c,v 1.9 2003-09-08 09:30:17 adam Exp $
+/* $Id: xmlread.c,v 1.10 2003-09-08 09:50:04 adam Exp $
    Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
    Index Data Aps
 
    Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002
    Index Data Aps
 
@@ -43,7 +43,6 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #define XML_CHUNK 1024
 
 struct user_info {
 #define XML_CHUNK 1024
 
 struct user_info {
-    int full_error_info;
     data1_node *d1_stack[256];
     int level;
     data1_handle dh;
     data1_node *d1_stack[256];
     int level;
     data1_handle dh;
@@ -203,17 +202,12 @@ static int cb_external_entity (XML_Parser pparser,
         }
         if (!XML_ParseBuffer (parser, r, done))
         {
         }
         if (!XML_ParseBuffer (parser, r, done))
         {
-           if (ui->full_error_info)
-               yaz_log (LOG_WARN, "%s:%d:%d:XML error: %s",
-                        systemId,
-                        XML_GetCurrentLineNumber(parser),
-                        XML_GetCurrentColumnNumber(parser),
-                        XML_ErrorString(XML_GetErrorCode(parser)));
-           else
-               yaz_log (LOG_WARN, "%s:%d:XML error: %s",
-                        systemId,
-                        XML_GetCurrentLineNumber(parser),
-                        XML_ErrorString(XML_GetErrorCode(parser)));
+           done = 1;
+           yaz_log (LOG_WARN, "%s:%d:%d:XML error: %s",
+                    systemId,
+                    XML_GetCurrentLineNumber(parser),
+                    XML_GetCurrentColumnNumber(parser),
+                    XML_ErrorString(XML_GetErrorCode(parser)));
        }
     }
     fclose (inf);
        }
     }
     fclose (inf);
@@ -401,14 +395,12 @@ static void cb_ns_end(void *userData, const char *prefix)
 }
 data1_node *zebra_read_xml (data1_handle dh,
                             int (*rf)(void *, char *, size_t), void *fh,
 }
 data1_node *zebra_read_xml (data1_handle dh,
                             int (*rf)(void *, char *, size_t), void *fh,
-                            NMEM m,
-                           int full_error_info)
+                            NMEM m)
 {
     XML_Parser parser;
     struct user_info uinfo;
     int done = 0;
 
 {
     XML_Parser parser;
     struct user_info uinfo;
     int done = 0;
 
-    uinfo.full_error_info = full_error_info;
     uinfo.loglevel = LOG_DEBUG;
     uinfo.level = 1;
     uinfo.dh = dh;
     uinfo.loglevel = LOG_DEBUG;
     uinfo.level = 1;
     uinfo.dh = dh;
@@ -452,14 +444,11 @@ data1_node *zebra_read_xml (data1_handle dh,
             done = 1;
         if (!XML_ParseBuffer (parser, r, done))
         {
             done = 1;
         if (!XML_ParseBuffer (parser, r, done))
         {
-           if (full_error_info)
-               yaz_log (LOG_WARN, "%d:%d:XML error: %s",
-                        XML_GetCurrentLineNumber(parser),
-                        XML_GetCurrentColumnNumber(parser),
-                        XML_ErrorString(XML_GetErrorCode(parser)));
-           else
-               yaz_log (LOG_WARN, "XML error: %s",
-                        XML_ErrorString(XML_GetErrorCode(parser)));
+           done = 1;
+           yaz_log (LOG_WARN, "%d:%d:XML error: %s",
+                    XML_GetCurrentLineNumber(parser),
+                    XML_GetCurrentColumnNumber(parser),
+                    XML_ErrorString(XML_GetErrorCode(parser)));
        }
     }
     XML_ParserFree (parser);
        }
     }
     XML_ParserFree (parser);
@@ -470,8 +459,6 @@ data1_node *zebra_read_xml (data1_handle dh,
 
 struct xml_info {
     XML_Expat_Version expat_version;
 
 struct xml_info {
     XML_Expat_Version expat_version;
-    int full_error_info;   /* true if we can safely use Expat's
-                             XML_GetCurrent{Line,Column}Number */
 };
 
 static void *grs_init_xml(void)
 };
 
 static void *grs_init_xml(void)
@@ -480,22 +467,12 @@ static void *grs_init_xml(void)
 
     p->expat_version = XML_ExpatVersionInfo();
 
 
     p->expat_version = XML_ExpatVersionInfo();
 
-    /* determine if we can use XML_GetCurrent{Line,Column}Number */
-    p->full_error_info = 0;
-    if (p->expat_version.major > 1)
-       p->full_error_info = 1;
-    else if (p->expat_version.major == 1 && p->expat_version.minor > 95)
-       p->full_error_info = 1;
-    else if (p->expat_version.major == 1 && p->expat_version.minor == 95
-            && p->expat_version.micro >= 3)
-       p->full_error_info = 1;
     return p;
 }
 
 static data1_node *grs_read_xml (struct grs_read_info *p)
 {
     return p;
 }
 
 static data1_node *grs_read_xml (struct grs_read_info *p)
 {
-    struct xml_info *x = (struct xml_info *) p->clientData;
-    return zebra_read_xml (p->dh, p->readf, p->fh, p->mem, x->full_error_info);
+    return zebra_read_xml (p->dh, p->readf, p->fh, p->mem);
 }
 
 static void grs_destroy_xml(void *clientData)
 }
 
 static void grs_destroy_xml(void *clientData)