[Python-checkins] r43022 - in python/trunk: Modules/xxmodule.c Objects/object.c
M.-A. Lemburg
mal at egenix.com
Tue Mar 14 10:39:14 CET 2006
neal.norwitz wrote:
> Author: neal.norwitz
> Date: Tue Mar 14 07:02:16 2006
> New Revision: 43022
>
> Modified:
> python/trunk/Modules/xxmodule.c
> python/trunk/Objects/object.c
> Log:
> Fix and test (manually w/xx module) passing NULLs to PyObject_Str() and
> PyObject_Unicode(). This problem was originally reported from Coverity
> and addresses mail on python-dev "checkin r43015".
>
> This inlines the conversion of the string to unicode and cleans
> up/simplifies some code at the end of the PyObject_Unicode().
>
> We really need a complete C API test module for all public APIs
> and passing good and bad parameter values.
Why do you add these things to the xx module and not the
_testcapi module where these things should live ?
AFAIK, the xx module is intended to serve as example to users
who want to write a Python extension.
> Will backport.
>
>
> Modified: python/trunk/Modules/xxmodule.c
> ==============================================================================
> --- python/trunk/Modules/xxmodule.c (original)
> +++ python/trunk/Modules/xxmodule.c Tue Mar 14 07:02:16 2006
> @@ -197,6 +197,18 @@
> return Py_None;
> }
>
> +/* Example passing NULLs to PyObject_Str(NULL) and PyObject_Unicode(NULL). */
> +
> +static PyObject *
> +xx_null(PyObject *self, PyObject *noargs)
> +{
> + PyObject *o1 = PyObject_Str(NULL), *o2 = PyObject_Unicode(NULL);
> + PyObject *tuple = PyTuple_Pack(2, o1, o2);
> + Py_XDECREF(o1);
> + Py_XDECREF(o2);
> + return tuple;
> +}
> +
> /* Test bad format character */
>
> static PyObject *
> @@ -331,6 +343,8 @@
> PyDoc_STR("new() -> new Xx object")},
> {"bug", xx_bug, METH_VARARGS,
> PyDoc_STR("bug(o) -> None")},
> + {"null", xx_null, METH_NOARGS,
> + PyDoc_STR("null(o) -> ('NULL', u'NULL')")},
> {NULL, NULL} /* sentinel */
> };
>
>
> Modified: python/trunk/Objects/object.c
> ==============================================================================
> --- python/trunk/Objects/object.c (original)
> +++ python/trunk/Objects/object.c Tue Mar 14 07:02:16 2006
> @@ -400,10 +400,16 @@
> {
> PyObject *res;
> PyObject *func;
> + PyObject *str;
> static PyObject *unicodestr;
>
> if (v == NULL) {
> res = PyString_FromString("<NULL>");
> + if (res == NULL)
> + return NULL;
> + str = PyUnicode_FromEncodedObject(res, NULL, "strict");
> + Py_DECREF(res);
> + return str;
> } else if (PyUnicode_CheckExact(v)) {
> Py_INCREF(v);
> return v;
> @@ -443,13 +449,9 @@
> if (res == NULL)
> return NULL;
> if (!PyUnicode_Check(res)) {
> - PyObject *str;
> str = PyUnicode_FromEncodedObject(res, NULL, "strict");
> Py_DECREF(res);
> - if (str)
> - res = str;
> - else
> - return NULL;
> + res = str;
> }
> return res;
> }
> _______________________________________________
> Python-checkins mailing list
> Python-checkins at python.org
> http://mail.python.org/mailman/listinfo/python-checkins
--
Marc-Andre Lemburg
eGenix.com
Professional Python Services directly from the Source (#1, Mar 14 2006)
>>> Python/Zope Consulting and Support ... http://www.egenix.com/
>>> mxODBC.Zope.Database.Adapter ... http://zope.egenix.com/
>>> mxODBC, mxDateTime, mxTextTools ... http://python.egenix.com/
________________________________________________________________________
::: Try mxODBC.Zope.DA for Windows,Linux,Solaris,FreeBSD for free ! ::::
More information about the Python-checkins
mailing list