Commit 7815c5e9 authored by Walter Dörwald's avatar Walter Dörwald

Check unicode identifier directly instead of converting

it to an 8bit string first.
parent 4dbd01b4
...@@ -1083,6 +1083,13 @@ def slots(): ...@@ -1083,6 +1083,13 @@ def slots():
pass pass
else: else:
raise TestFailed, "['foo\\0bar'] slots not caught" raise TestFailed, "['foo\\0bar'] slots not caught"
try:
class C(object):
__slots__ = ["foo\u1234bar"]
except TypeError:
pass
else:
raise TestFailed, "['foo\\u1234bar'] slots not caught"
try: try:
class C(object): class C(object):
__slots__ = ["1"] __slots__ = ["1"]
......
...@@ -1561,7 +1561,7 @@ static PyGetSetDef subtype_getsets_weakref_only[] = { ...@@ -1561,7 +1561,7 @@ static PyGetSetDef subtype_getsets_weakref_only[] = {
static int static int
valid_identifier(PyObject *s) valid_identifier(PyObject *s)
{ {
unsigned char *p; Py_UNICODE *p;
Py_ssize_t i, n; Py_ssize_t i, n;
if (!PyUnicode_Check(s)) { if (!PyUnicode_Check(s)) {
...@@ -1570,14 +1570,14 @@ valid_identifier(PyObject *s) ...@@ -1570,14 +1570,14 @@ valid_identifier(PyObject *s)
s->ob_type->tp_name); s->ob_type->tp_name);
return 0; return 0;
} }
p = (unsigned char *) PyUnicode_AsString(s); p = PyUnicode_AS_UNICODE(s);
n = strlen((char*)p)/*XXX PyString_GET_SIZE(s)*/; n = PyUnicode_GET_SIZE(s);
/* We must reject an empty name. As a hack, we bump the /* We must reject an empty name. As a hack, we bump the
length to 1 so that the loop will balk on the trailing \0. */ length to 1 so that the loop will balk on the trailing \0. */
if (n == 0) if (n == 0)
n = 1; n = 1;
for (i = 0; i < n; i++, p++) { for (i = 0; i < n; i++, p++) {
if (!(i == 0 ? isalpha(*p) : isalnum(*p)) && *p != '_') { if (i > 255 || (!(i == 0 ? isalpha(*p) : isalnum(*p)) && *p != '_')) {
PyErr_SetString(PyExc_TypeError, PyErr_SetString(PyExc_TypeError,
"__slots__ must be identifiers"); "__slots__ must be identifiers");
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment