mirror of https://github.com/python/cpython.git
More changes needed to make things work once bytes and str are truly divorced.
This commit is contained in:
parent
25a29a9534
commit
e22905a06c
|
@ -6,9 +6,9 @@
|
||||||
|
|
||||||
__doc__ = """hashlib module - A common interface to many hash functions.
|
__doc__ = """hashlib module - A common interface to many hash functions.
|
||||||
|
|
||||||
new(name, string='') - returns a new hash object implementing the
|
new(name, data=b'') - returns a new hash object implementing the
|
||||||
given hash function; initializing the hash
|
given hash function; initializing the hash
|
||||||
using the given string data.
|
using the given binary data.
|
||||||
|
|
||||||
Named constructor functions are also available, these are much faster
|
Named constructor functions are also available, these are much faster
|
||||||
than using new():
|
than using new():
|
||||||
|
@ -39,14 +39,14 @@
|
||||||
|
|
||||||
>>> import hashlib
|
>>> import hashlib
|
||||||
>>> m = hashlib.md5()
|
>>> m = hashlib.md5()
|
||||||
>>> m.update("Nobody inspects")
|
>>> m.update(b"Nobody inspects")
|
||||||
>>> m.update(" the spammish repetition")
|
>>> m.update(b" the spammish repetition")
|
||||||
>>> m.digest()
|
>>> m.digest()
|
||||||
'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
|
b'\xbbd\x9c\x83\xdd\x1e\xa5\xc9\xd9\xde\xc9\xa1\x8d\xf0\xff\xe9'
|
||||||
|
|
||||||
More condensed:
|
More condensed:
|
||||||
|
|
||||||
>>> hashlib.sha224("Nobody inspects the spammish repetition").hexdigest()
|
>>> hashlib.sha224(b"Nobody inspects the spammish repetition").hexdigest()
|
||||||
'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
|
'a4337bc45a8fc544c03f52dc550cd6e1e87021bc896588bd79e901e2'
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -77,25 +77,25 @@ def __get_builtin_constructor(name):
|
||||||
raise ValueError, "unsupported hash type"
|
raise ValueError, "unsupported hash type"
|
||||||
|
|
||||||
|
|
||||||
def __py_new(name, string=''):
|
def __py_new(name, data=b''):
|
||||||
"""new(name, string='') - Return a new hashing object using the named algorithm;
|
"""new(name, data='') - Return a new hashing object using the named algorithm;
|
||||||
optionally initialized with a string.
|
optionally initialized with data (which must be bytes).
|
||||||
"""
|
"""
|
||||||
return __get_builtin_constructor(name)(string)
|
return __get_builtin_constructor(name)(data)
|
||||||
|
|
||||||
|
|
||||||
def __hash_new(name, string=''):
|
def __hash_new(name, data=b''):
|
||||||
"""new(name, string='') - Return a new hashing object using the named algorithm;
|
"""new(name, data=b'') - Return a new hashing object using the named algorithm;
|
||||||
optionally initialized with a string.
|
optionally initialized with data (which must be bytes).
|
||||||
"""
|
"""
|
||||||
try:
|
try:
|
||||||
return _hashlib.new(name, string)
|
return _hashlib.new(name, data)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
# If the _hashlib module (OpenSSL) doesn't support the named
|
# If the _hashlib module (OpenSSL) doesn't support the named
|
||||||
# hash, try using our builtin implementations.
|
# hash, try using our builtin implementations.
|
||||||
# This allows for SHA224/256 and SHA384/512 support even though
|
# This allows for SHA224/256 and SHA384/512 support even though
|
||||||
# the OpenSSL library prior to 0.9.8 doesn't provide them.
|
# the OpenSSL library prior to 0.9.8 doesn't provide them.
|
||||||
return __get_builtin_constructor(name)(string)
|
return __get_builtin_constructor(name)(data)
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -21,7 +21,7 @@ def tearDown(self):
|
||||||
def testWeakRefs(self):
|
def testWeakRefs(self):
|
||||||
# verify weak references
|
# verify weak references
|
||||||
p = proxy(self.f)
|
p = proxy(self.f)
|
||||||
p.write('teststring')
|
p.write(b'teststring')
|
||||||
self.assertEquals(self.f.tell(), p.tell())
|
self.assertEquals(self.f.tell(), p.tell())
|
||||||
self.f.close()
|
self.f.close()
|
||||||
self.f = None
|
self.f = None
|
||||||
|
@ -36,7 +36,7 @@ def testAttributes(self):
|
||||||
|
|
||||||
def testReadinto(self):
|
def testReadinto(self):
|
||||||
# verify readinto
|
# verify readinto
|
||||||
self.f.write('12')
|
self.f.write(b'12')
|
||||||
self.f.close()
|
self.f.close()
|
||||||
a = array('b', b'x'*10)
|
a = array('b', b'x'*10)
|
||||||
self.f = open(TESTFN, 'rb')
|
self.f = open(TESTFN, 'rb')
|
||||||
|
@ -215,7 +215,7 @@ def testIteration(self):
|
||||||
# Test the complex interaction when mixing file-iteration and the
|
# Test the complex interaction when mixing file-iteration and the
|
||||||
# various read* methods.
|
# various read* methods.
|
||||||
dataoffset = 16384
|
dataoffset = 16384
|
||||||
filler = "ham\n"
|
filler = b"ham\n"
|
||||||
assert not dataoffset % len(filler), \
|
assert not dataoffset % len(filler), \
|
||||||
"dataoffset must be multiple of len(filler)"
|
"dataoffset must be multiple of len(filler)"
|
||||||
nchunks = dataoffset // len(filler)
|
nchunks = dataoffset // len(filler)
|
||||||
|
|
|
@ -27,7 +27,8 @@ def writeTmp(i, lines, mode='w'): # opening in text mode is the default
|
||||||
|
|
||||||
def remove_tempfiles(*names):
|
def remove_tempfiles(*names):
|
||||||
for name in names:
|
for name in names:
|
||||||
safe_unlink(name)
|
if name:
|
||||||
|
safe_unlink(name)
|
||||||
|
|
||||||
class BufferSizesTests(unittest.TestCase):
|
class BufferSizesTests(unittest.TestCase):
|
||||||
def test_buffer_sizes(self):
|
def test_buffer_sizes(self):
|
||||||
|
@ -191,30 +192,33 @@ def test_opening_mode(self):
|
||||||
self.fail("FileInput should reject invalid mode argument")
|
self.fail("FileInput should reject invalid mode argument")
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
pass
|
||||||
|
t1 = None
|
||||||
try:
|
try:
|
||||||
# try opening in universal newline mode
|
# try opening in universal newline mode
|
||||||
t1 = writeTmp(1, ["A\nB\r\nC\rD"], mode="wb")
|
t1 = writeTmp(1, [b"A\nB\r\nC\rD"], mode="wb")
|
||||||
fi = FileInput(files=t1, mode="U")
|
fi = FileInput(files=t1, mode="U")
|
||||||
lines = list(fi)
|
lines = list(fi)
|
||||||
self.assertEqual(lines, ["A\n", "B\n", "C\n", "D"])
|
self.assertEqual(lines, ["A\n", "B\n", "C\n", "D"])
|
||||||
finally:
|
finally:
|
||||||
remove_tempfiles(t1)
|
remove_tempfiles(t1)
|
||||||
|
|
||||||
## def test_file_opening_hook(self):
|
def test_file_opening_hook(self):
|
||||||
## # XXX The rot13 codec was removed.
|
try:
|
||||||
## # So this test needs to be changed to use something else.
|
# cannot use openhook and inplace mode
|
||||||
## try:
|
fi = FileInput(inplace=1, openhook=lambda f, m: None)
|
||||||
## # cannot use openhook and inplace mode
|
self.fail("FileInput should raise if both inplace "
|
||||||
## fi = FileInput(inplace=1, openhook=lambda f, m: None)
|
"and openhook arguments are given")
|
||||||
## self.fail("FileInput should raise if both inplace "
|
except ValueError:
|
||||||
## "and openhook arguments are given")
|
pass
|
||||||
## except ValueError:
|
try:
|
||||||
## pass
|
fi = FileInput(openhook=1)
|
||||||
## try:
|
self.fail("FileInput should check openhook for being callable")
|
||||||
## fi = FileInput(openhook=1)
|
except ValueError:
|
||||||
## self.fail("FileInput should check openhook for being callable")
|
pass
|
||||||
## except ValueError:
|
# XXX The rot13 codec was removed.
|
||||||
## pass
|
# So this test needs to be changed to use something else.
|
||||||
|
# (Or perhaps the API needs to change so we can just pass
|
||||||
|
# an encoding rather than using a hook?)
|
||||||
## try:
|
## try:
|
||||||
## t1 = writeTmp(1, ["A\nB"], mode="wb")
|
## t1 = writeTmp(1, ["A\nB"], mode="wb")
|
||||||
## fi = FileInput(files=t1, openhook=hook_encoded("rot13"))
|
## fi = FileInput(files=t1, openhook=hook_encoded("rot13"))
|
||||||
|
|
|
@ -41,9 +41,9 @@ def test_hexdigest(self):
|
||||||
|
|
||||||
|
|
||||||
def test_large_update(self):
|
def test_large_update(self):
|
||||||
aas = 'a' * 128
|
aas = b'a' * 128
|
||||||
bees = 'b' * 127
|
bees = b'b' * 127
|
||||||
cees = 'c' * 126
|
cees = b'c' * 126
|
||||||
|
|
||||||
for name in self.supported_hash_names:
|
for name in self.supported_hash_names:
|
||||||
m1 = hashlib.new(name)
|
m1 = hashlib.new(name)
|
||||||
|
@ -104,83 +104,83 @@ def test_case_sha1_3(self):
|
||||||
# http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
|
# http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf
|
||||||
|
|
||||||
def test_case_sha224_0(self):
|
def test_case_sha224_0(self):
|
||||||
self.check('sha224', "",
|
self.check('sha224', b"",
|
||||||
"d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f")
|
"d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f")
|
||||||
|
|
||||||
def test_case_sha224_1(self):
|
def test_case_sha224_1(self):
|
||||||
self.check('sha224', "abc",
|
self.check('sha224', b"abc",
|
||||||
"23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7")
|
"23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7")
|
||||||
|
|
||||||
def test_case_sha224_2(self):
|
def test_case_sha224_2(self):
|
||||||
self.check('sha224',
|
self.check('sha224',
|
||||||
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
|
b"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
|
||||||
"75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525")
|
"75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525")
|
||||||
|
|
||||||
def test_case_sha224_3(self):
|
def test_case_sha224_3(self):
|
||||||
self.check('sha224', "a" * 1000000,
|
self.check('sha224', b"a" * 1000000,
|
||||||
"20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67")
|
"20794655980c91d8bbb4c1ea97618a4bf03f42581948b2ee4ee7ad67")
|
||||||
|
|
||||||
|
|
||||||
def test_case_sha256_0(self):
|
def test_case_sha256_0(self):
|
||||||
self.check('sha256', "",
|
self.check('sha256', b"",
|
||||||
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
|
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855")
|
||||||
|
|
||||||
def test_case_sha256_1(self):
|
def test_case_sha256_1(self):
|
||||||
self.check('sha256', "abc",
|
self.check('sha256', b"abc",
|
||||||
"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad")
|
"ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad")
|
||||||
|
|
||||||
def test_case_sha256_2(self):
|
def test_case_sha256_2(self):
|
||||||
self.check('sha256',
|
self.check('sha256',
|
||||||
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
|
b"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
|
||||||
"248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1")
|
"248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1")
|
||||||
|
|
||||||
def test_case_sha256_3(self):
|
def test_case_sha256_3(self):
|
||||||
self.check('sha256', "a" * 1000000,
|
self.check('sha256', b"a" * 1000000,
|
||||||
"cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0")
|
"cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0")
|
||||||
|
|
||||||
|
|
||||||
def test_case_sha384_0(self):
|
def test_case_sha384_0(self):
|
||||||
self.check('sha384', "",
|
self.check('sha384', b"",
|
||||||
"38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da"+
|
"38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da"+
|
||||||
"274edebfe76f65fbd51ad2f14898b95b")
|
"274edebfe76f65fbd51ad2f14898b95b")
|
||||||
|
|
||||||
def test_case_sha384_1(self):
|
def test_case_sha384_1(self):
|
||||||
self.check('sha384', "abc",
|
self.check('sha384', b"abc",
|
||||||
"cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed"+
|
"cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed"+
|
||||||
"8086072ba1e7cc2358baeca134c825a7")
|
"8086072ba1e7cc2358baeca134c825a7")
|
||||||
|
|
||||||
def test_case_sha384_2(self):
|
def test_case_sha384_2(self):
|
||||||
self.check('sha384',
|
self.check('sha384',
|
||||||
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"+
|
b"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"+
|
||||||
"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
|
b"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
|
||||||
"09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712"+
|
"09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712"+
|
||||||
"fcc7c71a557e2db966c3e9fa91746039")
|
"fcc7c71a557e2db966c3e9fa91746039")
|
||||||
|
|
||||||
def test_case_sha384_3(self):
|
def test_case_sha384_3(self):
|
||||||
self.check('sha384', "a" * 1000000,
|
self.check('sha384', b"a" * 1000000,
|
||||||
"9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b"+
|
"9d0e1809716474cb086e834e310a4a1ced149e9c00f248527972cec5704c2a5b"+
|
||||||
"07b8b3dc38ecc4ebae97ddd87f3d8985")
|
"07b8b3dc38ecc4ebae97ddd87f3d8985")
|
||||||
|
|
||||||
|
|
||||||
def test_case_sha512_0(self):
|
def test_case_sha512_0(self):
|
||||||
self.check('sha512', "",
|
self.check('sha512', b"",
|
||||||
"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce"+
|
"cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce"+
|
||||||
"47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e")
|
"47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e")
|
||||||
|
|
||||||
def test_case_sha512_1(self):
|
def test_case_sha512_1(self):
|
||||||
self.check('sha512', "abc",
|
self.check('sha512', b"abc",
|
||||||
"ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a"+
|
"ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a"+
|
||||||
"2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f")
|
"2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f")
|
||||||
|
|
||||||
def test_case_sha512_2(self):
|
def test_case_sha512_2(self):
|
||||||
self.check('sha512',
|
self.check('sha512',
|
||||||
"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"+
|
b"abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn"+
|
||||||
"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
|
b"hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu",
|
||||||
"8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018"+
|
"8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018"+
|
||||||
"501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909")
|
"501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909")
|
||||||
|
|
||||||
def test_case_sha512_3(self):
|
def test_case_sha512_3(self):
|
||||||
self.check('sha512', "a" * 1000000,
|
self.check('sha512', b"a" * 1000000,
|
||||||
"e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973eb"+
|
"e718483d0ce769644e2e42c7bc15b4638e1f98b13b2044285632a803afa973eb"+
|
||||||
"de0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b")
|
"de0ff244877ea60a4cb0432ce577c31beb009c5c2c49aa2e4eadb217ad8cc09b")
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
# 2**31 == 2147483648
|
# 2**31 == 2147483648
|
||||||
f.seek(2147483649)
|
f.seek(2147483649)
|
||||||
# Seeking is not enough of a test: you must write and flush, too!
|
# Seeking is not enough of a test: you must write and flush, too!
|
||||||
f.write("x")
|
f.write(b"x")
|
||||||
f.flush()
|
f.flush()
|
||||||
except (IOError, OverflowError):
|
except (IOError, OverflowError):
|
||||||
f.close()
|
f.close()
|
||||||
|
@ -70,10 +70,10 @@ def expect(got_this, expect_this):
|
||||||
print('create large file via seek (may be sparse file) ...')
|
print('create large file via seek (may be sparse file) ...')
|
||||||
f = open(name, 'wb')
|
f = open(name, 'wb')
|
||||||
try:
|
try:
|
||||||
f.write('z')
|
f.write(b'z')
|
||||||
f.seek(0)
|
f.seek(0)
|
||||||
f.seek(size)
|
f.seek(size)
|
||||||
f.write('a')
|
f.write(b'a')
|
||||||
f.flush()
|
f.flush()
|
||||||
if test_support.verbose:
|
if test_support.verbose:
|
||||||
print('check file size with os.fstat')
|
print('check file size with os.fstat')
|
||||||
|
|
|
@ -114,27 +114,28 @@ def test_dbcs(self):
|
||||||
def test_dbcs_keep_buffer(self):
|
def test_dbcs_keep_buffer(self):
|
||||||
decoder = codecs.getincrementaldecoder('cp949')()
|
decoder = codecs.getincrementaldecoder('cp949')()
|
||||||
self.assertEqual(decoder.decode(b'\xc6\xc4\xc0'), '\ud30c')
|
self.assertEqual(decoder.decode(b'\xc6\xc4\xc0'), '\ud30c')
|
||||||
self.assertRaises(UnicodeDecodeError, decoder.decode, '', True)
|
self.assertRaises(UnicodeDecodeError, decoder.decode, b'', True)
|
||||||
self.assertEqual(decoder.decode(b'\xcc'), '\uc774')
|
self.assertEqual(decoder.decode(b'\xcc'), '\uc774')
|
||||||
|
|
||||||
self.assertEqual(decoder.decode(b'\xc6\xc4\xc0'), '\ud30c')
|
self.assertEqual(decoder.decode(b'\xc6\xc4\xc0'), '\ud30c')
|
||||||
self.assertRaises(UnicodeDecodeError, decoder.decode, '\xcc\xbd', True)
|
self.assertRaises(UnicodeDecodeError, decoder.decode,
|
||||||
|
b'\xcc\xbd', True)
|
||||||
self.assertEqual(decoder.decode(b'\xcc'), '\uc774')
|
self.assertEqual(decoder.decode(b'\xcc'), '\uc774')
|
||||||
|
|
||||||
def test_iso2022(self):
|
def test_iso2022(self):
|
||||||
decoder = codecs.getincrementaldecoder('iso2022-jp')()
|
decoder = codecs.getincrementaldecoder('iso2022-jp')()
|
||||||
ESC = '\x1b'
|
ESC = b'\x1b'
|
||||||
self.assertEqual(decoder.decode(ESC + '('), '')
|
self.assertEqual(decoder.decode(ESC + b'('), '')
|
||||||
self.assertEqual(decoder.decode('B', True), '')
|
self.assertEqual(decoder.decode(b'B', True), '')
|
||||||
self.assertEqual(decoder.decode(ESC + '$'), '')
|
self.assertEqual(decoder.decode(ESC + b'$'), '')
|
||||||
self.assertEqual(decoder.decode('B@$'), '\u4e16')
|
self.assertEqual(decoder.decode(b'B@$'), '\u4e16')
|
||||||
self.assertEqual(decoder.decode('@$@'), '\u4e16')
|
self.assertEqual(decoder.decode(b'@$@'), '\u4e16')
|
||||||
self.assertEqual(decoder.decode('$', True), '\u4e16')
|
self.assertEqual(decoder.decode(b'$', True), '\u4e16')
|
||||||
self.assertEqual(decoder.reset(), None)
|
self.assertEqual(decoder.reset(), None)
|
||||||
self.assertEqual(decoder.decode('@$'), '@$')
|
self.assertEqual(decoder.decode(b'@$'), '@$')
|
||||||
self.assertEqual(decoder.decode(ESC + '$'), '')
|
self.assertEqual(decoder.decode(ESC + b'$'), '')
|
||||||
self.assertRaises(UnicodeDecodeError, decoder.decode, '', True)
|
self.assertRaises(UnicodeDecodeError, decoder.decode, b'', True)
|
||||||
self.assertEqual(decoder.decode('B@$'), '\u4e16')
|
self.assertEqual(decoder.decode(b'B@$'), '\u4e16')
|
||||||
|
|
||||||
class Test_StreamReader(unittest.TestCase):
|
class Test_StreamReader(unittest.TestCase):
|
||||||
def test_bug1728403(self):
|
def test_bug1728403(self):
|
||||||
|
@ -213,7 +214,7 @@ def test_streamwriter_strwrite(self):
|
||||||
|
|
||||||
class Test_ISO2022(unittest.TestCase):
|
class Test_ISO2022(unittest.TestCase):
|
||||||
def test_g2(self):
|
def test_g2(self):
|
||||||
iso2022jp2 = '\x1b(B:hu4:unit\x1b.A\x1bNi de famille'
|
iso2022jp2 = b'\x1b(B:hu4:unit\x1b.A\x1bNi de famille'
|
||||||
uni = ':hu4:unit\xe9 de famille'
|
uni = ':hu4:unit\xe9 de famille'
|
||||||
self.assertEqual(iso2022jp2.decode('iso2022-jp-2'), uni)
|
self.assertEqual(iso2022jp2.decode('iso2022-jp-2'), uni)
|
||||||
|
|
||||||
|
|
|
@ -1147,7 +1147,7 @@ getsockaddrarg(PySocketSockObject *s, PyObject *args,
|
||||||
struct sockaddr_un* addr;
|
struct sockaddr_un* addr;
|
||||||
char *path;
|
char *path;
|
||||||
int len;
|
int len;
|
||||||
if (!PyArg_Parse(args, "t#", &path, &len))
|
if (!PyArg_Parse(args, "s#", &path, &len))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
addr = (struct sockaddr_un*)addr_ret;
|
addr = (struct sockaddr_un*)addr_ret;
|
||||||
|
|
Loading…
Reference in New Issue