Better error message when file is not found
techtonik opened this issue · 5 comments
If parsed file does not exist, the untangle
message is rather cryptic:
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import untangle
>>> untangle.parse('sfsdf')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\untangle.py", line 143, in parse
parser.parse(StringIO(filename))
File "C:\Python27\lib\xml\sax\expatreader.py", line 110, in parse
xmlreader.IncrementalParser.parse(self, source)
File "C:\Python27\lib\xml\sax\xmlreader.py", line 125, in parse
self.close()
File "C:\Python27\lib\xml\sax\expatreader.py", line 225, in close
self.feed("", isFinal = 1)
File "C:\Python27\lib\xml\sax\expatreader.py", line 217, in feed
self._err_handler.fatalError(exc)
File "C:\Python27\lib\xml\sax\handler.py", line 38, in fatalError
raise exception
xml.sax._exceptions.SAXParseException: <unknown>:1:0: syntax error
The issue here is that parse
tries to be clever and interpret the given string as an XML input string and not a filename. I think the solution here is to have dedicated methods for parsing files and strings.
Having a specific parsefile()
method would help, I guess. And the error message could be improved too to something like like - parse() error - invalid argument contents or filename is not found
.
Regarding your point about the error message: the problem is that the API for parse()
now states that Raises xml.sax.SAXParseException if something goes wrong during parsing.
so catching that would break the API :/
Deprecate filename
argument for this function and provide parsefile()
?
I also think that it may be a source of security vulnerability if untangle
is used to process input from the web.