mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
Subclasses of string can no longer be interned. The semantics of
interning were not clear here -- a subclass could be mutable, for example -- and had bugs. Explicitly interning a subclass of string via intern() will raise a TypeError. Internal operations that attempt to intern a string subclass will have no effect. Added a few tests to test_builtin that includes the old buggy code and verifies that calls like PyObject_SetAttr() don't fail. Perhaps these tests should have gone in test_string.
This commit is contained in:
parent
cbd81556bb
commit
4c989ddc9c
4 changed files with 40 additions and 22 deletions
|
@ -1035,6 +1035,11 @@ builtin_intern(PyObject *self, PyObject *args)
|
|||
PyObject *s;
|
||||
if (!PyArg_ParseTuple(args, "S:intern", &s))
|
||||
return NULL;
|
||||
if (!PyString_CheckExact(s)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"can't intern subclass of string");
|
||||
return NULL;
|
||||
}
|
||||
Py_INCREF(s);
|
||||
PyString_InternInPlace(&s);
|
||||
return s;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue