From 735510f14d09c2c3bcb2d6aeb1e0f1b8aeb5fe36 Mon Sep 17 00:00:00 2001 From: Thom Wiggers Date: Sun, 28 Feb 2016 12:32:51 +0100 Subject: [PATCH] Fix repository crash if path passed is not a str Tries to decode any non-string objects (such as bytes) Introduces `six` as a dependency Closes #588 --- pygit2/repository.py | 8 ++++++-- setup.py | 5 +++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/pygit2/repository.py b/pygit2/repository.py index d7ca58e..e9bbdc6 100644 --- a/pygit2/repository.py +++ b/pygit2/repository.py @@ -37,6 +37,8 @@ if sys.version_info[0] < 3: else: from io import BytesIO as StringIO +import six + # Import from pygit2 from _pygit2 import Repository as _Repository from _pygit2 import Oid, GIT_OID_HEXSZ, GIT_OID_MINPREFIXLEN @@ -56,8 +58,10 @@ from .submodule import Submodule class Repository(_Repository): - def __init__(self, *args, **kwargs): - super(Repository, self).__init__(*args, **kwargs) + def __init__(self, path, *args, **kwargs): + if not isinstance(path, six.string_types): + path = path.decode('utf-8') + super(Repository, self).__init__(path, *args, **kwargs) self._common_init() @classmethod diff --git a/setup.py b/setup.py index 54bbb0c..1fb9475 100644 --- a/setup.py +++ b/setup.py @@ -63,6 +63,7 @@ del sys.path[0] # Python 2 support # See https://github.com/libgit2/pygit2/pull/180 for a discussion about this. +# Using six isn't an option here yet, we don't necessarily have six installed if sys.version_info[0] == 2: u = lambda s: unicode(s, 'utf-8') else: @@ -186,7 +187,7 @@ extra_args = { if cffi_major_version == 0: extra_args['ext_modules'].append(ffi.verifier.get_extension()) else: - extra_args['cffi_modules']=['pygit2/_run.py:ffi'] + extra_args['cffi_modules'] = ['pygit2/_run.py:ffi'] setup(name='pygit2', @@ -202,7 +203,7 @@ setup(name='pygit2', packages=['pygit2'], package_data={'pygit2': ['decl.h']}, setup_requires=['cffi'], - install_requires=['cffi'], + install_requires=['cffi', 'six'], zip_safe=False, cmdclass=cmdclass, **extra_args)