Don't try to decode when checking clone bundles

This fix exception with python3 with stack-trace:

error: Cannot fetch platform_external_grpc-grpc-java.git (UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position 640: invalid start byte)

[...]
  File "[...]project.py", line 2255, in _IsValidBundle
    if f.read(16) == '# v2 git bundle\n':
  File "/usr/lib/python3.5/codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)

Even if we ask 16 characters, python buffered decoder will try to decode more in the buffer

The patch works for python2 and python3, and open the file in byte mode so that decoding is not attemped

Signed-off-by: Pierre Tardy <tardyp@gmail.com>
Change-Id: I837ae3c5cd724b34670fc2a84e853431f482b20d
Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/224642
Reviewed-by: Mike Frysinger <vapier@google.com>
Reviewed-by: David Pursehouse <dpursehouse@collab.net>
Tested-by: Mike Frysinger <vapier@google.com>
This commit is contained in:
Pierre Tardy 2019-05-16 10:28:21 +02:00 committed by Mike Frysinger
parent 242fcdd93b
commit 2b7daff8cb

View File

@ -2261,8 +2261,8 @@ class Project(object):
def _IsValidBundle(self, path, quiet): def _IsValidBundle(self, path, quiet):
try: try:
with open(path) as f: with open(path, 'rb') as f:
if f.read(16) == '# v2 git bundle\n': if f.read(16) == b'# v2 git bundle\n':
return True return True
else: else:
if not quiet: if not quiet: