Fixed bad memory reference that could occur if empty key block was to
[idzebra-moved-to-github.git] / index / alvis.c
index 60beaca..e168da3 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: alvis.c,v 1.11 2007-01-15 15:10:16 adam Exp $
+/* $Id: alvis.c,v 1.15 2007-03-19 21:50:39 adam Exp $
    Copyright (C) 1995-2007
    Index Data ApS
 
@@ -345,6 +345,7 @@ static void filter_destroy(void *clientData)
 {
     struct filter_info *tinfo = clientData;
     destroy_schemas(tinfo);
+    xfree(tinfo->full_name);
     if (tinfo->reader)
        xmlFreeTextReader(tinfo->reader);
     odr_destroy(tinfo->odr);
@@ -507,7 +508,9 @@ static int extract_split(struct filter_info *tinfo, struct recExtractCtrl *p)
                                       p /* I/O handler */,
                                       0 /* URL */, 
                                       0 /* encoding */,
-                                      XML_PARSE_XINCLUDE);
+                                      XML_PARSE_XINCLUDE
+                                       | XML_PARSE_NOENT
+                                       | XML_PARSE_NONET);
     }
     if (!tinfo->reader)
        return RECCTRL_EXTRACT_ERROR_GENERIC;
@@ -550,11 +553,17 @@ static int extract_full(struct filter_info *tinfo, struct recExtractCtrl *p)
        xmlDocPtr doc = xmlReadIO(ioread_ex, ioclose_ex, p /* I/O handler */,
                                  0 /* URL */,
                                  0 /* encoding */,
-                                 XML_PARSE_XINCLUDE);
+                                 XML_PARSE_XINCLUDE
+                                 | XML_PARSE_NOENT
+                                 | XML_PARSE_NONET);
        if (!doc)
-       {
            return RECCTRL_EXTRACT_ERROR_GENERIC;
-       }
+       /* else {
+           xmlNodePtr root = xmlDocGetRootElement(doc);
+            if (!root)
+                return RECCTRL_EXTRACT_ERROR_GENERIC;
+                } */
+       
        return extract_doc(tinfo, p, doc);
     }
     else
@@ -623,10 +632,10 @@ static const char *snippet_doc(struct recRetrieveCtrl *p, int text_mode,
     else
        wrbuf_printf(wrbuf, "</snippet>\n");
 
-    xml_doc_str = odr_strdup(p->odr, wrbuf_buf(wrbuf));
+    xml_doc_str = odr_strdup(p->odr, wrbuf_cstr(wrbuf));
 
     zebra_snippets_destroy(res);
-    wrbuf_free(wrbuf, 1);
+    wrbuf_destroy(wrbuf);
     return xml_doc_str;
 }
 
@@ -694,7 +703,7 @@ static int filter_retrieve (void *clientData, struct recRetrieveCtrl *p)
     doc = xmlReadIO(ioread_ret, ioclose_ret, p /* I/O handler */,
                    0 /* URL */,
                    0 /* encoding */,
-                   XML_PARSE_XINCLUDE);
+                   XML_PARSE_XINCLUDE | XML_PARSE_NOENT | XML_PARSE_NONET);
     if (!doc)
     {
        p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS;