Exception thrown in p4poller.py with unicode character
- Dominant language
- Python
- Stars
- 5.5k
- Forks
- 1.7k
- Avg merge
- 2d 7h
- Merged PRs (30d)
- 6
Description
Our builders stopped listening to Perforce check-ins when a file containing non-ascii characters was checked in.
Here's the callstack:
Traceback (most recent call last):
File "c:\python\python36\lib\site-packages\twisted\internet\defer.py", line 459, in callback
self._startRunCallbacks(result)
File "c:\python\python36\lib\site-packages\twisted\internet\defer.py", line 567, in _startRunCallbacks
self._runCallbacks()
File "c:\python\python36\lib\site-packages\twisted\internet\defer.py", line 653, in _runCallbacks
current.result = callback(current.result, *args, **kw)
File "c:\python\python36\lib\site-packages\twisted\internet\defer.py", line 1442, in gotResult
_inlineCallbacks(r, g, deferred)
--- ---
File "c:\python\python36\lib\site-packages\twisted\internet\defer.py", line 1386, in _inlineCallbacks
result = g.send(result)
File "c:\python\python36\lib\site-packages\buildbot\changes\p4poller.py", line 282, in _poll
result = bytes2unicode(result, self.encoding)
File "c:\python\python36\lib\site-packages\buildbot\util\__init__.py", line 234, in bytes2unicode
return text_type(x, encoding, errors)
builtins.UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe6 in position 2800: invalid continuation byte
In p4poller.py, I suggest making the following changes.
Original code in p4poller.py line 280:
# decode the result from its designated encoding
try:
result = bytes2unicode(result, self.encoding)
except UnicodeError as ex:
log.msg(
"P4Poller: couldn't decode changelist description: %s" % ex.encoding)
log.msg("P4Poller: in object: %s" % ex.object)
log.err("P4Poller: poll failed on %s, %s" %
(self.p4port, self.p4base))
raise
Suggested changes in p4poller.py line 280:
# decode the result from its designated encoding
try:
result = bytes2unicode(result, self.encoding)
except UnicodeError as ex:
log.msg(
"P4Poller: couldn't decode changelist description: %s" % ex.encoding)
result = bytes2unicode(result, encoding=self.encoding, errors="replace")
Contributor guide
Assessment
This issue has not been assessed yet.