diff -r 8345fb616cbd Lib/test/test_csv.py --- a/Lib/test/test_csv.py Sun Aug 25 14:57:38 2013 +0200 +++ b/Lib/test/test_csv.py Sun Aug 25 23:08:30 2013 +0800 @@ -791,6 +791,15 @@ mydialect.lineterminator = 4 self.assertRaises(csv.Error, mydialect) + def test_invaliddelimiter(self): + class mydialect(csv.Dialect): + delimiter = b"," + + with self.assertRaises(csv.Error) as cm: + mydialect() + self.assertEqual(str(cm.exception), + '"delimiter" must be an 1-character string') + class TestSniffer(unittest.TestCase): sample1 = """\ diff -r 8345fb616cbd Modules/_csv.c --- a/Modules/_csv.c Sun Aug 25 14:57:38 2013 +0200 +++ b/Modules/_csv.c Sun Aug 25 23:08:30 2013 +0800 @@ -240,7 +240,8 @@ if (src != Py_None) { Py_ssize_t len; len = PyUnicode_GetLength(src); - if (len > 1) { + /* -1 length mean src is not str */ + if (len == -1 || len > 1) { PyErr_Format(PyExc_TypeError, "\"%s\" must be an 1-character string", name);