This bug appears in httplib.py, at least in python 2.5. For some interogations, it will cause a msg as: Error code: invalid literal for int() with base 16 to be thrown. Discovered by me in urllib2.urlopen when I tried to grab http://www.bnro.ro/nbrfxrates.xml.
Explanations: In HTTPResponse._read_chunked the chunk length is not checked to be a valid integer, and a ValueError will be raised in such a case.
The fix is:
1. Open the httplib.py file in an editor (e.g. /usr/local/lib/python2.5/httplib.py)
2. Around line 546 localize the code:
def _read_chunked(self, amt): assert self.chunked != _UNKNOWN chunk_left = self.chunk_left value = '' # XXX This accumulates chunks by repeated string concatenation, # which is not efficient as the number or size of chunks gets big. while True: if chunk_left is None: line = self.fp.readline() i = line.find(';') if i >= 0: line = line[:i] # strip chunk-extensions chunk_left = int(line, 16)
and replace the chunk_left … line with:
# fix for Error code: invalid literal for int() with base 16: ''
try:
chunk_left = int(line, 16)
except ValueError, msg:
self.close()
return value