buildbot / buildbot/buildbot

Exception thrown in p4poller.py with unicode character

Open
#4,086 1 comment 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.