@@ -265,8 +265,8 @@ PyCode_New(argcount, nlocals, stacksize, flags,
265265 if (!PyString_Check (v ))
266266 continue ;
267267 p = PyString_AsString (v );
268- if (( int ) strspn (p , NAME_CHARS )
269- != PyString_Size (v ))
268+ if (strspn (p , NAME_CHARS )
269+ != ( size_t ) PyString_Size (v ))
270270 continue ;
271271 PyString_InternInPlace (& PyTuple_GET_ITEM (consts , i ));
272272 }
@@ -340,7 +340,7 @@ com_error(c, exc, msg)
340340 PyObject * exc ;
341341 char * msg ;
342342{
343- int n = strlen (msg );
343+ size_t n = strlen (msg );
344344 PyObject * v ;
345345 char buffer [30 ];
346346 char * s ;
@@ -720,12 +720,12 @@ com_mangle(c, name, buffer, maxlen)
720720 struct compiling * c ;
721721 char * name ;
722722 char * buffer ;
723- int maxlen ;
723+ size_t maxlen ;
724724{
725725 /* Name mangling: __private becomes _classname__private.
726726 This is independent from how the name is used. */
727727 char * p ;
728- int nlen , plen ;
728+ size_t nlen , plen ;
729729 nlen = strlen (name );
730730 if (nlen + 2 >= maxlen )
731731 return 0 ; /* Don't mangle __extremely_long_names */
@@ -761,7 +761,7 @@ com_addopnamestr(c, op, name)
761761 char buffer [256 ];
762762 if (name != NULL && name [0 ] == '_' && name [1 ] == '_' &&
763763 c -> c_private != NULL &&
764- com_mangle (c , name , buffer , ( int ) sizeof (buffer )))
764+ com_mangle (c , name , buffer , sizeof (buffer )))
765765 name = buffer ;
766766#endif
767767 if (name == NULL || (v = PyString_InternFromString (name )) == NULL ) {
@@ -883,7 +883,7 @@ parsestr(s)
883883 char * s ;
884884{
885885 PyObject * v ;
886- int len ;
886+ size_t len ;
887887 char * buf ;
888888 char * p ;
889889 char * end ;
@@ -908,6 +908,10 @@ parsestr(s)
908908 }
909909 s ++ ;
910910 len = strlen (s );
911+ if (len > INT_MAX ) {
912+ PyErr_SetString (PyExc_OverflowError , "string to parse is too long" );
913+ return NULL ;
914+ }
911915 if (s [-- len ] != quote ) {
912916 PyErr_BadInternalCall ();
913917 return NULL ;
@@ -2201,7 +2205,7 @@ com_global_stmt(c, n)
22012205 char buffer [256 ];
22022206 if (s != NULL && s [0 ] == '_' && s [1 ] == '_' &&
22032207 c -> c_private != NULL &&
2204- com_mangle (c , s , buffer , ( int ) sizeof (buffer )))
2208+ com_mangle (c , s , buffer , sizeof (buffer )))
22052209 s = buffer ;
22062210#endif
22072211 if (PyDict_GetItemString (c -> c_locals , s ) != NULL ) {
0 commit comments