diff Python/compile.c @ 13096:8c8de5b736dc legacy-trunk

Trent Mick's Win64 changes: size_t vs. int or long; also some overflow tests.
author Guido van Rossum <guido@python.org>
date Wed, 28 Jun 2000 22:07:35 +0000
parents 1c7c2dd1beb1
children c2df5d28034d
line wrap: on
line diff
--- a/Python/compile.c	Wed Jun 28 22:05:44 2000 +0000
+++ b/Python/compile.c	Wed Jun 28 22:07:35 2000 +0000
@@ -265,8 +265,8 @@
 		if (!PyString_Check(v))
 			continue;
 		p = PyString_AsString(v);
-		if ((int)strspn(p, NAME_CHARS)
-		    != PyString_Size(v))
+		if (strspn(p, NAME_CHARS)
+		    != (size_t)PyString_Size(v))
 			continue;
 		PyString_InternInPlace(&PyTuple_GET_ITEM(consts, i));
 	}
@@ -340,7 +340,7 @@
 	PyObject *exc;
 	char *msg;
 {
-	int n = strlen(msg);
+	size_t n = strlen(msg);
 	PyObject *v;
 	char buffer[30];
 	char *s;
@@ -720,12 +720,12 @@
 	struct compiling *c;
 	char *name;
 	char *buffer;
-	int maxlen;
+	size_t maxlen;
 {
 	/* Name mangling: __private becomes _classname__private.
 	   This is independent from how the name is used. */
 	char *p;
-	int nlen, plen;
+	size_t nlen, plen;
 	nlen = strlen(name);
 	if (nlen+2 >= maxlen)
 		return 0; /* Don't mangle __extremely_long_names */
@@ -761,7 +761,7 @@
 	char buffer[256];
 	if (name != NULL && name[0] == '_' && name[1] == '_' &&
 	    c->c_private != NULL &&
-	    com_mangle(c, name, buffer, (int)sizeof(buffer)))
+	    com_mangle(c, name, buffer, sizeof(buffer)))
 		name = buffer;
 #endif
 	if (name == NULL || (v = PyString_InternFromString(name)) == NULL) {
@@ -883,7 +883,7 @@
 	char *s;
 {
 	PyObject *v;
-	int len;
+	size_t len;
 	char *buf;
 	char *p;
 	char *end;
@@ -908,6 +908,10 @@
 	}
 	s++;
 	len = strlen(s);
+	if (len > INT_MAX) {
+		PyErr_SetString(PyExc_OverflowError, "string to parse is too long");
+		return NULL;
+	}
 	if (s[--len] != quote) {
 		PyErr_BadInternalCall();
 		return NULL;
@@ -2201,7 +2205,7 @@
 		char buffer[256];
 		if (s != NULL && s[0] == '_' && s[1] == '_' &&
 		    c->c_private != NULL &&
-		    com_mangle(c, s, buffer, (int)sizeof(buffer)))
+		    com_mangle(c, s, buffer, sizeof(buffer)))
 			s = buffer;
 #endif
 		if (PyDict_GetItemString(c->c_locals, s) != NULL) {