@@ -471,6 +471,16 @@ convertsimple1(arg, p_format, p_va)
471471 long ival = PyInt_AsLong (arg );
472472 if (ival == -1 && PyErr_Occurred ())
473473 return "integer<b>" ;
474+ else if (ival < CHAR_MIN ) {
475+ PyErr_SetString (PyExc_OverflowError ,
476+ "byte integer is less than minimum" );
477+ return "integer<b>" ;
478+ }
479+ else if (ival > CHAR_MAX && ival >= 256 ) {
480+ PyErr_SetString (PyExc_OverflowError ,
481+ "byte integer is greater than maximum" );
482+ return "integer<b>" ;
483+ }
474484 else
475485 * p = (char ) ival ;
476486 break ;
@@ -482,6 +492,16 @@ convertsimple1(arg, p_format, p_va)
482492 long ival = PyInt_AsLong (arg );
483493 if (ival == -1 && PyErr_Occurred ())
484494 return "integer<h>" ;
495+ else if (ival < SHRT_MIN ) {
496+ PyErr_SetString (PyExc_OverflowError ,
497+ "short integer is less than minimum" );
498+ return "integer<h>" ;
499+ }
500+ else if (ival > SHRT_MAX ) {
501+ PyErr_SetString (PyExc_OverflowError ,
502+ "short integer is greater than maximum" );
503+ return "integer<h>" ;
504+ }
485505 else
486506 * p = (short ) ival ;
487507 break ;
@@ -493,6 +513,16 @@ convertsimple1(arg, p_format, p_va)
493513 long ival = PyInt_AsLong (arg );
494514 if (ival == -1 && PyErr_Occurred ())
495515 return "integer<i>" ;
516+ else if (ival < INT_MIN ) {
517+ PyErr_SetString (PyExc_OverflowError ,
518+ "integer is less than minimum" );
519+ return "integer<i>" ;
520+ }
521+ else if (ival > INT_MAX ) {
522+ PyErr_SetString (PyExc_OverflowError ,
523+ "integer is greater than maximum" );
524+ return "integer<i>" ;
525+ }
496526 else
497527 * p = ival ;
498528 break ;
@@ -572,8 +602,8 @@ convertsimple1(arg, p_format, p_va)
572602 case 's' : /* string */
573603 {
574604 if (* format == '#' ) { /* any buffer-like object */
575- void * * p = (void * * )va_arg (* p_va , char * * );
576- PyBufferProcs * pb = arg -> ob_type -> tp_as_buffer ;
605+ void * * p = (void * * )va_arg (* p_va , char * * );
606+ PyBufferProcs * pb = arg -> ob_type -> tp_as_buffer ;
577607 int * q = va_arg (* p_va , int * );
578608 int count ;
579609
@@ -589,9 +619,9 @@ convertsimple1(arg, p_format, p_va)
589619 * q = count ;
590620 format ++ ;
591621 } else {
592- char * * p = va_arg (* p_va , char * * );
622+ char * * p = va_arg (* p_va , char * * );
593623
594- if (PyString_Check (arg ))
624+ if (PyString_Check (arg ))
595625 * p = PyString_AS_STRING (arg );
596626 else if (PyUnicode_Check (arg )) {
597627 arg = _PyUnicode_AsUTF8String (arg , NULL );
@@ -610,8 +640,8 @@ convertsimple1(arg, p_format, p_va)
610640 case 'z' : /* string, may be NULL (None) */
611641 {
612642 if (* format == '#' ) { /* any buffer-like object */
613- void * * p = (void * * )va_arg (* p_va , char * * );
614- PyBufferProcs * pb = arg -> ob_type -> tp_as_buffer ;
643+ void * * p = (void * * )va_arg (* p_va , char * * );
644+ PyBufferProcs * pb = arg -> ob_type -> tp_as_buffer ;
615645 int * q = va_arg (* p_va , int * );
616646 int count ;
617647
@@ -632,9 +662,9 @@ convertsimple1(arg, p_format, p_va)
632662 }
633663 format ++ ;
634664 } else {
635- char * * p = va_arg (* p_va , char * * );
665+ char * * p = va_arg (* p_va , char * * );
636666
637- if (arg == Py_None )
667+ if (arg == Py_None )
638668 * p = 0 ;
639669 else if (PyString_Check (arg ))
640670 * p = PyString_AsString (arg );
@@ -780,8 +810,8 @@ convertsimple1(arg, p_format, p_va)
780810 case 'u' : /* raw unicode buffer (Py_UNICODE *) */
781811 {
782812 if (* format == '#' ) { /* any buffer-like object */
783- void * * p = (void * * )va_arg (* p_va , char * * );
784- PyBufferProcs * pb = arg -> ob_type -> tp_as_buffer ;
813+ void * * p = (void * * )va_arg (* p_va , char * * );
814+ PyBufferProcs * pb = arg -> ob_type -> tp_as_buffer ;
785815 int * q = va_arg (* p_va , int * );
786816 int count ;
787817
@@ -799,9 +829,9 @@ convertsimple1(arg, p_format, p_va)
799829 * q = count /(sizeof (Py_UNICODE ));
800830 format ++ ;
801831 } else {
802- Py_UNICODE * * p = va_arg (* p_va , Py_UNICODE * * );
832+ Py_UNICODE * * p = va_arg (* p_va , Py_UNICODE * * );
803833
804- if (PyUnicode_Check (arg ))
834+ if (PyUnicode_Check (arg ))
805835 * p = PyUnicode_AS_UNICODE (arg );
806836 else
807837 return "unicode" ;
@@ -850,7 +880,7 @@ convertsimple1(arg, p_format, p_va)
850880 if ((* pred )(arg ))
851881 * p = arg ;
852882 else
853- return "(unspecified)" ;
883+ return "(unspecified)" ;
854884
855885 }
856886 else if (* format == '&' ) {
@@ -1161,7 +1191,7 @@ vgetargskeywords(args, keywords, format, kwlist, p_va)
11611191 }
11621192 if (!match ) {
11631193 sprintf (msgbuf ,
1164- "%s is an invalid keyword argument for this function" ,
1194+ "%s is an invalid keyword argument for this function" ,
11651195 ks );
11661196 PyErr_SetString (PyExc_TypeError , msgbuf );
11671197 return 0 ;
0 commit comments