[Python-checkins] CVS: python/dist/src/Objects unicodeobject.c,2.18,2.19

Guido van Rossum python-dev@python.org
Tue, 9 May 2000 10:14:30 -0400 (EDT)


Update of /projects/cvsroot/python/dist/src/Objects
In directory eric:/projects/python/develop/guido/src/Objects

Modified Files:
	unicodeobject.c 
Log Message:
Trent Mick:

Fix the string methods that implement slice-like semantics with
optional args (count, find, endswith, etc.) to properly handle
indeces outside [INT_MIN, INT_MAX]. Previously the "i" formatter
for PyArg_ParseTuple was used to get the indices. These could overflow.

This patch changes the string methods to use the "O&" formatter with
the slice_index() function from ceval.c which is used to do the same
job for Python code slices (e.g. 'abcabcabc'[0:1000000000L]).


Index: unicodeobject.c
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Objects/unicodeobject.c,v
retrieving revision 2.18
retrieving revision 2.19
diff -C2 -r2.18 -r2.19
*** unicodeobject.c	2000/05/04 15:52:20	2.18
--- unicodeobject.c	2000/05/09 14:14:27	2.19
***************
*** 3024,3028 ****
      PyObject *result;
  
!     if (!PyArg_ParseTuple(args, "O|ii:count", &substring, &start, &end))
          return NULL;
  
--- 3024,3029 ----
      PyObject *result;
  
!     if (!PyArg_ParseTuple(args, "O|O&O&:count", &substring,
! 		_PyEval_SliceIndex, &start, _PyEval_SliceIndex, &end))
          return NULL;
  
***************
*** 3151,3155 ****
      PyObject *result;
  
!     if (!PyArg_ParseTuple(args, "O|ii:find", &substring, &start, &end))
          return NULL;
      substring = (PyUnicodeObject *)PyUnicode_FromObject(
--- 3152,3157 ----
      PyObject *result;
  
!     if (!PyArg_ParseTuple(args, "O|O&O&:find", &substring,
! 		_PyEval_SliceIndex, &start, _PyEval_SliceIndex, &end))
          return NULL;
      substring = (PyUnicodeObject *)PyUnicode_FromObject(
***************
*** 3213,3217 ****
      int end = INT_MAX;
  
!     if (!PyArg_ParseTuple(args, "O|ii:index", &substring, &start, &end))
          return NULL;
      
--- 3215,3220 ----
      int end = INT_MAX;
  
!     if (!PyArg_ParseTuple(args, "O|O&O&:index", &substring,
! 		_PyEval_SliceIndex, &start, _PyEval_SliceIndex, &end))
          return NULL;
      
***************
*** 3643,3647 ****
      PyObject *result;
  
!     if (!PyArg_ParseTuple(args, "O|ii:rfind", &substring, &start, &end))
          return NULL;
      substring = (PyUnicodeObject *)PyUnicode_FromObject(
--- 3646,3651 ----
      PyObject *result;
  
!     if (!PyArg_ParseTuple(args, "O|O&O&:rfind", &substring,
! 		_PyEval_SliceIndex, &start, _PyEval_SliceIndex, &end))
          return NULL;
      substring = (PyUnicodeObject *)PyUnicode_FromObject(
***************
*** 3669,3673 ****
      int end = INT_MAX;
  
!     if (!PyArg_ParseTuple(args, "O|ii:rindex", &substring, &start, &end))
          return NULL;
      substring = (PyUnicodeObject *)PyUnicode_FromObject(
--- 3673,3678 ----
      int end = INT_MAX;
  
!     if (!PyArg_ParseTuple(args, "O|O&O&:rindex", &substring,
! 		_PyEval_SliceIndex, &start, _PyEval_SliceIndex, &end))
          return NULL;
      substring = (PyUnicodeObject *)PyUnicode_FromObject(
***************
*** 3938,3942 ****
      PyObject *result;
  
!     if (!PyArg_ParseTuple(args, "O|ii:startswith", &substring, &start, &end))
  	return NULL;
      substring = (PyUnicodeObject *)PyUnicode_FromObject(
--- 3943,3948 ----
      PyObject *result;
  
!     if (!PyArg_ParseTuple(args, "O|O&O&:startswith", &substring,
! 		_PyEval_SliceIndex, &start, _PyEval_SliceIndex, &end))
  	return NULL;
      substring = (PyUnicodeObject *)PyUnicode_FromObject(
***************
*** 3968,3972 ****
      PyObject *result;
  
!     if (!PyArg_ParseTuple(args, "O|ii:endswith", &substring, &start, &end))
  	return NULL;
      substring = (PyUnicodeObject *)PyUnicode_FromObject(
--- 3974,3979 ----
      PyObject *result;
  
!     if (!PyArg_ParseTuple(args, "O|O&O&:endswith", &substring,
! 		_PyEval_SliceIndex, &start, _PyEval_SliceIndex, &end))
  	return NULL;
      substring = (PyUnicodeObject *)PyUnicode_FromObject(