Index: Modules/_codecsmodule.c =================================================================== --- Modules/_codecsmodule.c (révision 68639) +++ Modules/_codecsmodule.c (copie de travail) @@ -258,7 +258,7 @@ Py_ssize_t consumed; PyObject *decoded = NULL; - if (!PyArg_ParseTuple(args, "s*|zi:utf_7_decode", + if (!PyArg_ParseTuple(args, "y*|zi:utf_7_decode", &pbuf, &errors, &final)) return NULL; consumed = pbuf.len; @@ -281,7 +281,7 @@ Py_ssize_t consumed; PyObject *decoded = NULL; - if (!PyArg_ParseTuple(args, "s*|zi:utf_8_decode", + if (!PyArg_ParseTuple(args, "y*|zi:utf_8_decode", &pbuf, &errors, &final)) return NULL; consumed = pbuf.len; @@ -305,7 +305,7 @@ Py_ssize_t consumed; PyObject *decoded; - if (!PyArg_ParseTuple(args, "s*|zi:utf_16_decode", + if (!PyArg_ParseTuple(args, "y*|zi:utf_16_decode", &pbuf, &errors, &final)) return NULL; consumed = pbuf.len; /* This is overwritten unless final is true. */ @@ -328,7 +328,7 @@ Py_ssize_t consumed; PyObject *decoded = NULL; - if (!PyArg_ParseTuple(args, "s*|zi:utf_16_le_decode", + if (!PyArg_ParseTuple(args, "y*|zi:utf_16_le_decode", &pbuf, &errors, &final)) return NULL; @@ -352,7 +352,7 @@ Py_ssize_t consumed; PyObject *decoded = NULL; - if (!PyArg_ParseTuple(args, "s*|zi:utf_16_be_decode", + if (!PyArg_ParseTuple(args, "y*|zi:utf_16_be_decode", &pbuf, &errors, &final)) return NULL; @@ -384,7 +384,7 @@ int final = 0; Py_ssize_t consumed; - if (!PyArg_ParseTuple(args, "s*|zii:utf_16_ex_decode", + if (!PyArg_ParseTuple(args, "y*|zii:utf_16_ex_decode", &pbuf, &errors, &byteorder, &final)) return NULL; consumed = pbuf.len; /* This is overwritten unless final is true. */ @@ -409,7 +409,7 @@ Py_ssize_t consumed; PyObject *decoded; - if (!PyArg_ParseTuple(args, "s*|zi:utf_32_decode", + if (!PyArg_ParseTuple(args, "y*|zi:utf_32_decode", &pbuf, &errors, &final)) return NULL; consumed = pbuf.len; /* This is overwritten unless final is true. */ @@ -432,7 +432,7 @@ Py_ssize_t consumed; PyObject *decoded; - if (!PyArg_ParseTuple(args, "s*|zi:utf_32_le_decode", + if (!PyArg_ParseTuple(args, "y*|zi:utf_32_le_decode", &pbuf, &errors, &final)) return NULL; consumed = pbuf.len; /* This is overwritten unless final is true. */ @@ -455,7 +455,7 @@ Py_ssize_t consumed; PyObject *decoded; - if (!PyArg_ParseTuple(args, "s*|zi:utf_32_be_decode", + if (!PyArg_ParseTuple(args, "y*|zi:utf_32_be_decode", &pbuf, &errors, &final)) return NULL; consumed = pbuf.len; /* This is overwritten unless final is true. */ @@ -486,7 +486,7 @@ int final = 0; Py_ssize_t consumed; - if (!PyArg_ParseTuple(args, "s*|zii:utf_32_ex_decode", + if (!PyArg_ParseTuple(args, "y*|zii:utf_32_ex_decode", &pbuf, &errors, &byteorder, &final)) return NULL; consumed = pbuf.len; /* This is overwritten unless final is true. */ @@ -542,7 +542,7 @@ PyObject *unicode; const char *errors = NULL; - if (!PyArg_ParseTuple(args, "s*|z:latin_1_decode", + if (!PyArg_ParseTuple(args, "y*|z:latin_1_decode", &pbuf, &errors)) return NULL; @@ -559,7 +559,7 @@ PyObject *unicode; const char *errors = NULL; - if (!PyArg_ParseTuple(args, "s*|z:ascii_decode", + if (!PyArg_ParseTuple(args, "y*|z:ascii_decode", &pbuf, &errors)) return NULL; @@ -577,7 +577,7 @@ const char *errors = NULL; PyObject *mapping = NULL; - if (!PyArg_ParseTuple(args, "s*|zO:charmap_decode", + if (!PyArg_ParseTuple(args, "y*|zO:charmap_decode", &pbuf, &errors, &mapping)) return NULL; if (mapping == Py_None) @@ -600,7 +600,7 @@ Py_ssize_t consumed; PyObject *decoded = NULL; - if (!PyArg_ParseTuple(args, "s*|zi:mbcs_decode", + if (!PyArg_ParseTuple(args, "y*|zi:mbcs_decode", &pbuf, &errors, &final)) return NULL; consumed = pbuf.len; Index: Lib/test/test_codecs.py =================================================================== --- Lib/test/test_codecs.py (révision 68639) +++ Lib/test/test_codecs.py (copie de travail) @@ -1476,6 +1476,35 @@ self.assertEquals(srw.read(), "\xfc") +class TypesTest(unittest.TestCase): + def test_decode_unicode(self): + data = "\u1000" + decodes = [ + codecs.utf_7_decode, + codecs.utf_8_decode, + codecs.utf_16_le_decode, + codecs.utf_16_be_decode, + codecs.utf_16_ex_decode, + codecs.utf_32_decode, + codecs.utf_32_le_decode, + codecs.utf_32_be_decode, + codecs.utf_32_ex_decode, + codecs.latin_1_decode, + codecs.ascii_decode, + codecs.charmap_decode, + ] + if hasattr(codecs, "mbcs_decode"): + decodes.append(codecs.mbcs_decode) + for decode in decodes: + self.assertRaises(TypeError, decode, "xxx") + + def test_unicode_escape(self): + self.assertEquals(codecs.unicode_escape_decode(r"\u1234"), ("\u1234", 6)) + self.assertEquals(codecs.unicode_escape_decode(br"\u1234"), ("\u1234", 6)) + self.assertEquals(codecs.raw_unicode_escape_decode(r"\u1234"), ("\u1234", 6)) + self.assertEquals(codecs.raw_unicode_escape_decode(br"\u1234"), ("\u1234", 6)) + + def test_main(): support.run_unittest( UTF32Test, @@ -1501,6 +1530,7 @@ BasicUnicodeTest, CharmapTest, WithStmtTest, + TypesTest, )