[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