[Python-3000-checkins] r58815 - in python/branches/py3k: Objects/typeobject.c Parser/asdl_c.py Python/Python-ast.c Python/errors.c
guido.van.rossum
python-3000-checkins at python.org
Sat Nov 3 00:07:08 CET 2007
Author: guido.van.rossum
Date: Sat Nov 3 00:07:07 2007
New Revision: 58815
Modified:
python/branches/py3k/Objects/typeobject.c
python/branches/py3k/Parser/asdl_c.py
python/branches/py3k/Python/Python-ast.c
python/branches/py3k/Python/errors.c
Log:
Fixes for issue 1752184, ensuring type objects are always created
with a PyUnicode name.
Modified: python/branches/py3k/Objects/typeobject.c
==============================================================================
--- python/branches/py3k/Objects/typeobject.c (original)
+++ python/branches/py3k/Objects/typeobject.c Sat Nov 3 00:07:07 2007
@@ -45,6 +45,7 @@
{
PyHeapTypeObject* et;
char *tp_name;
+ PyObject *tmp;
if (!(type->tp_flags & Py_TPFLAGS_HEAPTYPE)) {
PyErr_Format(PyExc_TypeError,
@@ -62,14 +63,22 @@
type->tp_name, Py_Type(value)->tp_name);
return -1;
}
- tp_name = PyUnicode_AsString(value);
- if (tp_name == NULL)
+
+ /* Check absence of null characters */
+ tmp = PyUnicode_FromStringAndSize("\0", 1);
+ if (tmp == NULL)
return -1;
- if (strlen(tp_name) != (size_t)PyUnicode_GET_SIZE(value)) {
+ if (PyUnicode_Contains(value, tmp) != 0) {
+ Py_DECREF(tmp);
PyErr_Format(PyExc_ValueError,
"__name__ must not contain null bytes");
return -1;
}
+ Py_DECREF(tmp);
+
+ tp_name = PyUnicode_AsString(value);
+ if (tp_name == NULL)
+ return -1;
et = (PyHeapTypeObject*)type;
Modified: python/branches/py3k/Parser/asdl_c.py
==============================================================================
--- python/branches/py3k/Parser/asdl_c.py (original)
+++ python/branches/py3k/Parser/asdl_c.py Sat Nov 3 00:07:07 2007
@@ -415,7 +415,7 @@
}
PyTuple_SET_ITEM(fnames, i, field);
}
- result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sOss}",
+ result = PyObject_CallFunction((PyObject*)&PyType_Type, "U(O){sOss}",
type, base, "_fields", fnames, "__module__", "_ast");
Py_DECREF(fnames);
return (PyTypeObject*)result;
Modified: python/branches/py3k/Python/Python-ast.c
==============================================================================
--- python/branches/py3k/Python/Python-ast.c (original)
+++ python/branches/py3k/Python/Python-ast.c Sat Nov 3 00:07:07 2007
@@ -410,7 +410,7 @@
}
PyTuple_SET_ITEM(fnames, i, field);
}
- result = PyObject_CallFunction((PyObject*)&PyType_Type, "s(O){sOss}",
+ result = PyObject_CallFunction((PyObject*)&PyType_Type, "U(O){sOss}",
type, base, "_fields", fnames, "__module__", "_ast");
Py_DECREF(fnames);
return (PyTypeObject*)result;
Modified: python/branches/py3k/Python/errors.c
==============================================================================
--- python/branches/py3k/Python/errors.c (original)
+++ python/branches/py3k/Python/errors.c Sat Nov 3 00:07:07 2007
@@ -608,7 +608,7 @@
goto failure;
}
/* Create a real new-style class. */
- result = PyObject_CallFunction((PyObject *)&PyType_Type, "sOO",
+ result = PyObject_CallFunction((PyObject *)&PyType_Type, "UOO",
dot+1, bases, dict);
failure:
Py_XDECREF(bases);
More information about the Python-3000-checkins
mailing list