Fixed bug #884: Entity declarations in input are lost at retrieval time.
authorAdam Dickmeiss <adam@indexdata.dk>
Mon, 12 Feb 2007 10:33:50 +0000 (10:33 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Mon, 12 Feb 2007 10:33:50 +0000 (10:33 +0000)
NEWS
index/alvis.c
index/mod_dom.c
test/xslt/marc-col.xml

diff --git a/NEWS b/NEWS
index 2d48905..2eeb876 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,5 @@
+Fixed bug #884: Entity declarations in input are lost at retrieval time.
+
 Implemented new filter 'dom'. See test/xslt/dom-config*xml for examples. 
 This, like alvis, performs indexing and retrieval using XSLT. But Unlike
 alvis, it allows multiple XSLT steps to be performed and does ISO2709
 Implemented new filter 'dom'. See test/xslt/dom-config*xml for examples. 
 This, like alvis, performs indexing and retrieval using XSLT. But Unlike
 alvis, it allows multiple XSLT steps to be performed and does ISO2709
index 60beaca..fad3671 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.12 2007-02-12 10:33:51 adam Exp $
    Copyright (C) 1995-2007
    Index Data ApS
 
    Copyright (C) 1995-2007
    Index Data ApS
 
@@ -507,7 +507,7 @@ static int extract_split(struct filter_info *tinfo, struct recExtractCtrl *p)
                                       p /* I/O handler */,
                                       0 /* URL */, 
                                       0 /* encoding */,
                                       p /* I/O handler */,
                                       0 /* URL */, 
                                       0 /* encoding */,
-                                      XML_PARSE_XINCLUDE);
+                                      XML_PARSE_XINCLUDE|XML_PARSE_NOENT);
     }
     if (!tinfo->reader)
        return RECCTRL_EXTRACT_ERROR_GENERIC;
     }
     if (!tinfo->reader)
        return RECCTRL_EXTRACT_ERROR_GENERIC;
@@ -550,7 +550,7 @@ 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 */,
        xmlDocPtr doc = xmlReadIO(ioread_ex, ioclose_ex, p /* I/O handler */,
                                  0 /* URL */,
                                  0 /* encoding */,
-                                 XML_PARSE_XINCLUDE);
+                                 XML_PARSE_XINCLUDE|XML_PARSE_NOENT);
        if (!doc)
        {
            return RECCTRL_EXTRACT_ERROR_GENERIC;
        if (!doc)
        {
            return RECCTRL_EXTRACT_ERROR_GENERIC;
@@ -694,7 +694,7 @@ static int filter_retrieve (void *clientData, struct recRetrieveCtrl *p)
     doc = xmlReadIO(ioread_ret, ioclose_ret, p /* I/O handler */,
                    0 /* URL */,
                    0 /* encoding */,
     doc = xmlReadIO(ioread_ret, ioclose_ret, p /* I/O handler */,
                    0 /* URL */,
                    0 /* encoding */,
-                   XML_PARSE_XINCLUDE);
+                   XML_PARSE_XINCLUDE|XML_PARSE_NOENT);
     if (!doc)
     {
        p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS;
     if (!doc)
     {
        p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS;
index d42d80b..102a51a 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mod_dom.c,v 1.1 2007-02-07 12:08:54 adam Exp $
+/* $Id: mod_dom.c,v 1.2 2007-02-12 10:33:51 adam Exp $
    Copyright (C) 1995-2007
    Index Data ApS
 
    Copyright (C) 1995-2007
    Index Data ApS
 
@@ -794,7 +794,8 @@ static int extract_xml_split(struct filter_info *tinfo,
                                                    p /* I/O handler */,
                                                    0 /* URL */, 
                                                    0 /* encoding */,
                                                    p /* I/O handler */,
                                                    0 /* URL */, 
                                                    0 /* encoding */,
-                                                   XML_PARSE_XINCLUDE);
+                                                   XML_PARSE_XINCLUDE|
+                                                   XML_PARSE_NOENT);
     }
     if (!input->u.xmlreader.reader)
        return RECCTRL_EXTRACT_ERROR_GENERIC;
     }
     if (!input->u.xmlreader.reader)
        return RECCTRL_EXTRACT_ERROR_GENERIC;
@@ -840,7 +841,7 @@ static int extract_xml_full(struct filter_info *tinfo,
         xmlDocPtr doc = xmlReadIO(ioread_ex, ioclose_ex, p /* I/O handler */,
                                   0 /* URL */,
                                   0 /* encoding */,
         xmlDocPtr doc = xmlReadIO(ioread_ex, ioclose_ex, p /* I/O handler */,
                                   0 /* URL */,
                                   0 /* encoding */,
-                                  XML_PARSE_XINCLUDE);
+                                  XML_PARSE_XINCLUDE|XML_PARSE_NOENT);
         if (!doc)
         {
             return RECCTRL_EXTRACT_ERROR_GENERIC;
         if (!doc)
         {
             return RECCTRL_EXTRACT_ERROR_GENERIC;
@@ -995,7 +996,7 @@ static int filter_retrieve (void *clientData, struct recRetrieveCtrl *p)
     doc = xmlReadIO(ioread_ret, ioclose_ret, p /* I/O handler */,
                    0 /* URL */,
                    0 /* encoding */,
     doc = xmlReadIO(ioread_ret, ioclose_ret, p /* I/O handler */,
                    0 /* URL */,
                    0 /* encoding */,
-                   XML_PARSE_XINCLUDE);
+                   XML_PARSE_XINCLUDE|XML_PARSE_NOENT);
     if (!doc)
     {
        p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS;
     if (!doc)
     {
        p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS;
index c5d527f..71e8a77 100644 (file)
@@ -1,3 +1,6 @@
+<!DOCTYPE x [
+  <!ENTITY com  "computer">
+]>
 <collection xmlns="http://www.loc.gov/MARC21/slim">
 <record xmlns="http://www.loc.gov/MARC21/slim">
   <rank>1</rank>
 <collection xmlns="http://www.loc.gov/MARC21/slim">
 <record xmlns="http://www.loc.gov/MARC21/slim">
   <rank>1</rank>
@@ -20,7 +23,7 @@
     <subfield code="a">Jack Collins</subfield>
   </datafield>
   <datafield tag="245" ind1="1" ind2="0">
     <subfield code="a">Jack Collins</subfield>
   </datafield>
   <datafield tag="245" ind1="1" ind2="0">
-    <subfield code="a">How to program a computer</subfield>
+    <subfield code="a">How to program a &com;</subfield>
   </datafield>
   <datafield tag="260" ind1="1" ind2=" ">
     <subfield code="a">Penguin</subfield>
   </datafield>
   <datafield tag="260" ind1="1" ind2=" ">
     <subfield code="a">Penguin</subfield>