[Python-checkins] CVS: python/dist/src/Python getargs.c,2.32,2.33

Fred Drake python-dev@python.org
Tue, 9 May 2000 17:50:04 -0400


Update of /projects/cvsroot/python/dist/src/Python
In directory seahag.cnri.reston.va.us:/home/fdrake/projects/python/Python
Modified Files:
	getargs.c 
Log Message:
Trent Mick <trentm@activestate.com>:
Limit the 'b' formatter of PyArg_ParseTuple to valid values of an unsigned
char, i.e. [0,UCHAR_MAX]. It is expected that this is the common usage of 'b'.
An OverflowError is raised if the parsed value is outside this range.
Index: getargs.c
===================================================================
RCS file: /projects/cvsroot/python/dist/src/Python/getargs.c,v
retrieving revision 2.32
retrieving revision 2.33
diff -C2 -r2.32 -r2.33
*** getargs.c	2000年05月08日 14:02:41	2.32
--- getargs.c	2000年05月09日 21:50:00	2.33
***************
*** 466,470 ****
 	switch (c) {
 	
! 	case 'b': /* byte -- very short int */
 		{
 			char *p = va_arg(*p_va, char *);
--- 466,470 ----
 	switch (c) {
 	
! 	case 'b': /* unsigned byte -- very short int */
 		{
 			char *p = va_arg(*p_va, char *);
***************
*** 472,491 ****
 			if (ival == -1 && PyErr_Occurred())
 				return "integer<b>";
! 			else if (ival < CHAR_MIN) {
 				PyErr_SetString(PyExc_OverflowError,
! 					"byte integer is less than minimum");
 				return "integer<b>";
 			}
! 			else if (ival > CHAR_MAX && ival >= 256) {
 				PyErr_SetString(PyExc_OverflowError,
! 				 "byte integer is greater than maximum");
 				return "integer<b>";
 			}
 			else
! 				*p = (char) ival;
 			break;
 		}
 	
! 	case 'h': /* short int */
 		{
 			short *p = va_arg(*p_va, short *);
--- 472,491 ----
 			if (ival == -1 && PyErr_Occurred())
 				return "integer<b>";
! 			else if (ival < 0) {
 				PyErr_SetString(PyExc_OverflowError,
! 					"unsigned byte integer is less than minimum");
 				return "integer<b>";
 			}
! 			else if (ival > UCHAR_MAX) {
 				PyErr_SetString(PyExc_OverflowError,
! 				 "unsigned byte integer is greater than maximum");
 				return "integer<b>";
 			}
 			else
! 				*p = (unsigned char) ival;
 			break;
 		}
 	
! 	case 'h': /* signed short int */
 		{
 			short *p = va_arg(*p_va, short *);
***************
*** 495,504 ****
 			else if (ival < SHRT_MIN) {
 				PyErr_SetString(PyExc_OverflowError,
! 					"short integer is less than minimum");
 				return "integer<h>";
 			}
 			else if (ival > SHRT_MAX) {
 				PyErr_SetString(PyExc_OverflowError,
! 				 "short integer is greater than maximum");
 				return "integer<h>";
 			}
--- 495,504 ----
 			else if (ival < SHRT_MIN) {
 				PyErr_SetString(PyExc_OverflowError,
! 					"signed short integer is less than minimum");
 				return "integer<h>";
 			}
 			else if (ival > SHRT_MAX) {
 				PyErr_SetString(PyExc_OverflowError,
! 				 "signed short integer is greater than maximum");
 				return "integer<h>";
 			}
***************
*** 508,512 ****
 		}
 	
! 	case 'i': /* int */
 		{
 			int *p = va_arg(*p_va, int *);
--- 508,512 ----
 		}
 	
! 	case 'i': /* signed int */
 		{
 			int *p = va_arg(*p_va, int *);
***************
*** 516,525 ****
 			else if (ival < INT_MIN) {
 				PyErr_SetString(PyExc_OverflowError,
! 					"integer is less than minimum");
 				return "integer<i>";
 			}
 			else if (ival > INT_MAX) {
 				PyErr_SetString(PyExc_OverflowError,
! 				 "integer is greater than maximum");
 				return "integer<i>";
 			}
--- 516,525 ----
 			else if (ival < INT_MIN) {
 				PyErr_SetString(PyExc_OverflowError,
! 					"signed integer is less than minimum");
 				return "integer<i>";
 			}
 			else if (ival > INT_MAX) {
 				PyErr_SetString(PyExc_OverflowError,
! 				 "signed integer is greater than maximum");
 				return "integer<i>";
 			}

AltStyle によって変換されたページ (->オリジナル) /