Skip to content

Commit

Permalink
maybe_string dealing with non-unicode strings
Browse files Browse the repository at this point in the history
  • Loading branch information
wschuell authored and jdavid committed Jan 17, 2025
1 parent d224940 commit 1b806f5
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 2 deletions.
2 changes: 1 addition & 1 deletion pygit2/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def check_error(err, io=False):
# Error message
giterr = C.git_error_last()
if giterr != ffi.NULL:
message = ffi.string(giterr.message).decode('utf8')
message = ffi.string(giterr.message).decode('utf8', errors='surrogateescape')
else:
message = f'err {err} (no message provided)'

Expand Down
2 changes: 1 addition & 1 deletion pygit2/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def maybe_string(ptr):
if not ptr:
return None

return ffi.string(ptr).decode('utf8')
return ffi.string(ptr).decode('utf8', errors='surrogateescape')


def to_bytes(s, encoding='utf-8', errors='strict'):
Expand Down
45 changes: 45 additions & 0 deletions test/test_nonunicode.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# Copyright 2010-2024 The pygit2 contributors
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2,
# as published by the Free Software Foundation.
#
# In addition to the permissions in the GNU General Public License,
# the authors give you unlimited permission to link the compiled
# version of this file into combinations with other programs,
# and to distribute those combinations without any restriction
# coming from the use of this file. (The General Public License
# restrictions do apply in other respects; for example, they cover
# modification of the file, and distribution when not linked into
# a combined executable.)
#
# This file is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; see the file COPYING. If not, write to
# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.

"""Tests for non unicode byte strings"""

import pygit2
import os
import shutil


bstring = b'\xc3master'

def test_nonunicode_branchname(testrepo):
folderpath = 'temp_repo_nonutf'
if os.path.exists(folderpath):
shutil.rmtree(folderpath)
newrepo = pygit2.clone_repository(
path=folderpath, url='https://github.com/pygit2/test_branch_notutf.git'
)
assert bstring in [
(ref.split('/')[-1]).encode('utf8', 'surrogateescape')
for ref in newrepo.listall_references()
] # Remote branch among references: 'refs/remotes/origin/\udcc3master'

0 comments on commit 1b806f5

Please sign in to comment.