[XML-SIG] xmlproc DTD api bug
Lars Marius Garshol
larsga@garshol.priv.no
24 Oct 2000 18:26:28 +0200
* Alexandre Fayolle
|
| I'm using PyXml 0.5.5.1 on python 1.5.2 I know these are old
| versions (we are planning to move further real soon now), so maybe
| the problem has already been fixed. Please excuse me if this is the
| case.
It has been fixed, but not in the PyXML package. The fix will appear
there when I move xmlproc development to the PyXML CVS tree.
| If I have an element with an ANY content model, and use
| elt.get_valid_elements(elt.get_start_state()), I get a Type Error,
| because the content model is None for this element:
| File "/usr/lib/python1.5/site-packages/xml/parsers/xmlproc/xmldtd.py",
| line 300, in get_valid_elements
| return self.content_model[state].keys()
| TypeError: unsubscriptable object
|
| I think xmlproc should test for this case,
I agree, and the version in my CVS tree does. It might be that
version 0.70 also does; I'm not sure.
| and return the list of all the elements known in the DTD (using
| dtd.get_elements())
In principle I agree that this would be the correct solution.
However, the element doesn't have a reference to the DTD, so it
doesn't have this information. So my current code returns '[]'
instead.
The problem is that if the element is to have a reference to the DTD
we have a cycle and in 1.5.2 that means that we must have either a
.unlink() method on the DTD or memory leaks (and quite often also
both).
If you want to fix the immediate problem, add this method to the
ElementTypeAny class in xmldtd.py:
def get_valid_elements(self, state):
return []
Thank you for reporting this problem!
--Lars M.