From 4c989ddc9c8bd38ab14c9f42511eb567ed219604 Mon Sep 17 00:00:00 2001 From: Jeremy Hylton Date: Sat, 7 Aug 2004 19:20:05 +0000 Subject: 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. --- Python/bltinmodule.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'Python') diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index 8ff733c4d8..04fcf597b1 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -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; -- cgit v1.2.1