[Python-checkins] CVS: python/dist/src/Objects listobject.c,2.69.2.2,2.69.2.3

Guido van Rossum gvanrossum@users.sourceforge.net
Mon, 12 Feb 2001 13:46:53 -0800


Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv30729

Modified Files:
      Tag: cnri-16-start
	listobject.c 
Log Message:
Fix core dump whenever PyList_Reverse() was called.

This fixes SF bug #132008, reported by Warren J. Hack.

I'm checking this into the 1.6 branch of the CVS tree first.  I'm
assigning the copyright for this patch (and this patch only) to CNRI,
at their specific request.  In order to be able to release 1.6.1 with
a GPL-compatible license, CNRI wants to make at least one change to
the sources.  This is it. :-)


Index: listobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/listobject.c,v
retrieving revision 2.69.2.2
retrieving revision 2.69.2.3
diff -C2 -r2.69.2.2 -r2.69.2.3
*** listobject.c	2000/08/10 14:49:39	2.69.2.2
--- listobject.c	2001/02/12 21:46:51	2.69.2.3
***************
*** 1255,1271 ****
  
  static PyObject *
! listreverse(self, args)
! 	PyListObject *self;
! 	PyObject *args;
  {
  	register PyObject **p, **q;
  	register PyObject *tmp;
  	
- 	if (!PyArg_ParseTuple(args, ":reverse"))
- 		return NULL;
- 
  	if (self->ob_size > 1) {
  		for (p = self->ob_item, q = self->ob_item + self->ob_size - 1;
! 						p < q; p++, q--) {
  			tmp = *p;
  			*p = *q;
--- 1255,1268 ----
  
  static PyObject *
! _listreverse(PyListObject *self)
  {
  	register PyObject **p, **q;
  	register PyObject *tmp;
  	
  	if (self->ob_size > 1) {
  		for (p = self->ob_item, q = self->ob_item + self->ob_size - 1;
! 		     p < q;
! 		     p++, q--)
! 		{
  			tmp = *p;
  			*p = *q;
***************
*** 1273,1277 ****
  		}
  	}
! 	
  	Py_INCREF(Py_None);
  	return Py_None;
--- 1270,1281 ----
  		}
  	}
! }
! 
! static PyObject *
! listreverse(PyListObject *self, PyObject *args)
! {
! 	if (!PyArg_ParseTuple(args, ":reverse"))
! 		return NULL;
! 	_listreverse(self);
  	Py_INCREF(Py_None);
  	return Py_None;
***************
*** 1279,1284 ****
  
  int
! PyList_Reverse(v)
! 	PyObject *v;
  {
  	if (v == NULL || !PyList_Check(v)) {
--- 1283,1287 ----
  
  int
! PyList_Reverse(PyObject *v)
  {
  	if (v == NULL || !PyList_Check(v)) {
***************
*** 1286,1293 ****
  		return -1;
  	}
! 	v = listreverse((PyListObject *)v, (PyObject *)NULL);
! 	if (v == NULL)
! 		return -1;
! 	Py_DECREF(v);
  	return 0;
  }
--- 1289,1293 ----
  		return -1;
  	}
! 	_listreverse((PyListObject *)v);
  	return 0;
  }