[Python-Dev] yeah! for Jeremy and Greg

Barry A. Warsaw bwarsaw@cnri.reston.va.us
Wed, 29 Mar 2000 00:42:34 -0500 (EST)


>>>>> "BAW" == Barry A Warsaw <bwarsaw@cnri.reston.va.us> writes:

    BAW> Uh oh.  Fresh CVS update and make clean, make:

    >>> sum(*n)
    | Traceback (innermost last):
    |   File "<stdin>", line 1, in ?
    | SystemError: bad argument to internal function

Here's a proposed patch that will cause a TypeError to be raised
instead.

-Barry

-------------------- snip snip --------------------
Index: abstract.c
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Objects/abstract.c,v
retrieving revision 2.33
diff -c -r2.33 abstract.c
*** abstract.c	2000/03/10 22:55:18	2.33
--- abstract.c	2000/03/29 05:36:21
***************
*** 860,866 ****
  	PyObject *s;
  {
  	PySequenceMethods *m;
! 
  	if (s == NULL) {
  		null_error();
  		return -1;
--- 860,867 ----
  	PyObject *s;
  {
  	PySequenceMethods *m;
! 	int size = -1;
! 	
  	if (s == NULL) {
  		null_error();
  		return -1;
***************
*** 868,877 ****
  
  	m = s->ob_type->tp_as_sequence;
  	if (m && m->sq_length)
! 		return m->sq_length(s);
  
! 	type_error("len() of unsized object");
! 	return -1;
  }
  
  PyObject *
--- 869,879 ----
  
  	m = s->ob_type->tp_as_sequence;
  	if (m && m->sq_length)
! 		size = m->sq_length(s);
  
! 	if (size < 0)
! 		type_error("len() of unsized object");
! 	return size;
  }
  
  PyObject *
Index: ceval.c
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Python/ceval.c,v
retrieving revision 2.169
diff -c -r2.169 ceval.c
*** ceval.c	2000/03/28 23:49:16	2.169
--- ceval.c	2000/03/29 05:39:00
***************
*** 1636,1641 ****
--- 1636,1649 ----
  				break;
  			    }
  			    nstar = PySequence_Length(stararg);
+ 			    if (nstar < 0) {
+ 				    if (!PyErr_Occurred)
+ 					    PyErr_SetString(
+ 						    PyExc_TypeError,
+ 						    "len() of unsized object");
+ 				    x = NULL;
+ 				    break;
+ 			    }
  			}
  			if (nk > 0) {
  			    if (kwdict == NULL) {