[XML-SIG] Bug in 0.6.6

Juergen Hermann Juergen Hermann" <jhe@webde-ag.de
Mon, 27 Aug 2001 15:51:26 +0200


Hi!

I think I reported the following for 0.6.5, and it's still in 0.6.6. 
Can someone test this against the CVS source?

Given the following three files, I get a traceback that "HTTP_SSL" is 
not defined, which is because it comes AFTER including the external 
entity. Put it before the "env" entity, and alas, no traceback!

xml.sax._exceptions.SAXParseException: 
file:///export/home/jhe/tmp/EntityTest/enttest.xml:19:44: Undeclared 
entity 'HTTP_SSL' 

Should work in both cases!

==> enttest.ent <==
<?xml version="1.0" encoding="ISO-8859-1"?>

<!ENTITY HTTP_PORT  "80">

==> enttest.py <==
import os
import xml.sax
import xml.sax.saxutils
import xml.sax.handler
import xml.sax.sax2exts

class TestLoader(xml.sax.saxutils.DefaultHandler):

    def __init__(self, filename):
        self.fileurl = 'file://' + os.path.abspath(filename)

        # create parser
        parser = xml.sax.sax2exts.XMLValParserFactory.make_parser()
        print '+++ parser is', parser
        parser.setFeature(xml.sax.handler.feature_namespaces, 1)
        parser.setFeature(xml.sax.handler.feature_validation, 1)
        parser.setFeature(xml.sax.handler.feature_external_ges, 1)
        parser.setFeature(xml.sax.handler.feature_external_pes, 1)

        # set handlers
        parser.setContentHandler(self)
        parser.setDTDHandler(self)
        parser.setErrorHandler(self)
        parser.setEntityResolver(self)

        # parse the XML into events
        parser.parse(self.fileurl)

    def startElementNS(self, name, qname, attrs):
        print name, qname, attrs.items()


if __name__ == "__main__":
    print xml.version_info
    test = TestLoader('enttest.xml')
==> enttest.xml <==
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>

<!DOCTYPE root [
    <!ELEMENT root (param*)>
    <!ELEMENT param EMPTY>
    <!ATTLIST param 
        name NMTOKEN #REQUIRED
        value CDATA #REQUIRED
    >

    <!ENTITY % env SYSTEM "enttest.ent">
    %env;

    <!ENTITY HTTP_SSL   "443">
]>

<root>
  <param name="http-port"  value="&HTTP_PORT;"/>
  <param name="http-ssl"   value="&HTTP_SSL;"/>
</root>