]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Trent Mick's Win64 changes: size_t vs. int or long; also some overflow
authorGuido van Rossum <guido@python.org>
Wed, 28 Jun 2000 22:07:35 +0000 (22:07 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 28 Jun 2000 22:07:35 +0000 (22:07 +0000)
tests.

Python/ceval.c
Python/codecs.c
Python/compile.c
Python/dynload_win.c
Python/getcwd.c
Python/modsupport.c
Python/sysmodule.c
Python/thread_nt.h
Python/traceback.c

index 78196ba74b5e5c35686ace7299091e129aa20b43..e15343291657735a3adf9ff787f91cbba45aed8c 100644 (file)
@@ -2876,7 +2876,7 @@ exec_statement(f, prog, globals, locals)
        }
        else {
                char *s = PyString_AsString(prog);
-               if ((int)strlen(s) != PyString_Size(prog)) {
+               if (strlen(s) != (size_t)PyString_Size(prog)) {
                        PyErr_SetString(PyExc_ValueError,
                                        "embedded '\\0' in exec string");
                        return -1;
index 5e01ccae133544beff49215f85273f21f9841a14..ceff376a23e3d1b6eb0a23a22bfb19a8356e67bc 100644 (file)
@@ -83,11 +83,16 @@ static
 PyObject *normalizestring(const char *string)
 {
     register int i;
-    int len = strlen(string);
+    size_t len = strlen(string);
     char *p;
     PyObject *v;
     
-    v = PyString_FromStringAndSize(NULL, len);
+       if (len > INT_MAX) {
+               PyErr_SetString(PyExc_OverflowError, "string is too large");
+               return NULL;
+       }
+       
+    v = PyString_FromStringAndSize(NULL, (int)len);
     if (v == NULL)
        return NULL;
     p = PyString_AS_STRING(v);
index a387317ef3c9542d5bec3cd56ed741f3e8903792..4373422f3140dbaa65ca0086eb0dab465017fc02 100644 (file)
@@ -265,8 +265,8 @@ PyCode_New(argcount, nlocals, stacksize, flags,
                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 @@ com_error(c, exc, msg)
        PyObject *exc;
        char *msg;
 {
-       int n = strlen(msg);
+       size_t n = strlen(msg);
        PyObject *v;
        char buffer[30];
        char *s;
@@ -720,12 +720,12 @@ com_mangle(c, name, buffer, maxlen)
        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 @@ com_addopnamestr(c, op, name)
        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 @@ parsestr(s)
        char *s;
 {
        PyObject *v;
-       int len;
+       size_t len;
        char *buf;
        char *p;
        char *end;
@@ -908,6 +908,10 @@ parsestr(s)
        }
        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 @@ com_global_stmt(c, n)
                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) {
index 08a2a895fe38c26f5f620a8bd17d8d7a470b25d2..7506c41f6cba98224d2b9cac19c1cb6c3053d3e9 100644 (file)
@@ -104,7 +104,7 @@ dl_funcptr _PyImport_GetDynLoadFunc(const char *fqname, const char *shortname,
                                        "DLL load failed with error code %d",
                                        errorCode);
                        } else {
-                               int len;
+                               size_t len;
                                /* For some reason a \r\n
                                   is appended to the text */
                                if (theLength >= 2 &&
index e720c99a6f551f303eb6bf23c262694bb6609d45..7005869ad38796ff8a412a6bfc1ca5f7fe2586cf 100644 (file)
@@ -62,7 +62,7 @@ getcwd(buf, size)
                return NULL;
        }
        ret = getwd(localbuf);
-       if (ret != NULL && strlen(localbuf) >= size) {
+       if (ret != NULL && strlen(localbuf) >= (size_t)size) {
                errno = ERANGE;
                return NULL;
        }
index 7b402865e2762b2a7625c3c6647db5108ecb046c..13737f13ee826873302e6a96f258d145d1ee2ca7 100644 (file)
@@ -355,8 +355,15 @@ do_mkvalue(p_format, p_va)
                                Py_INCREF(v);
                        }
                        else {
-                               if (n < 0)
-                                       n = strlen(str);
+                               if (n < 0) {
+                                       size_t m = strlen(str);
+                                       if (m > INT_MAX) {
+                                               PyErr_SetString(PyExc_OverflowError,
+                                                       "string too long for Python string");
+                                               return NULL;
+                                       }
+                                       n = (int)m;
+                               }
                                v = PyString_FromStringAndSize(str, n);
                        }
                        return v;
index 6219454ed61fd516043021d735d58135b0be24c8..843df8dda317887e2cb121cff67f32b6c101ae02 100644 (file)
@@ -504,7 +504,7 @@ _PySys_Init()
        Py_XDECREF(v);
 #ifdef MS_COREDLL
        PyDict_SetItemString(sysdict, "dllhandle",
-                            v = PyInt_FromLong((int)PyWin_DLLhModule));
+                            v = PyLong_FromVoidPtr(PyWin_DLLhModule));
        Py_XDECREF(v);
        PyDict_SetItemString(sysdict, "winver",
                             v = PyString_FromString(PyWin_DLLVersionString));
index c8ed6cd70e642bc1a2a5f5fc1a2aa567f565a34d..9e82a9408f2d4f09ef145efb7bd5595044286acc 100644 (file)
@@ -101,6 +101,9 @@ BOOL InitializeNonRecursiveMutex(PNRMUTEX mutex)
        return mutex->hevent != NULL ;  /* TRUE if the mutex is created */
 }
 
+#ifdef InterlockedCompareExchange
+#undef InterlockedCompareExchange
+#endif
 #define InterlockedCompareExchange(dest,exchange,comperand) (ixchg((dest), (exchange), (comperand)))
 
 VOID DeleteNonRecursiveMutex(PNRMUTEX mutex)
@@ -179,7 +182,7 @@ static void PyThread__init_thread(void)
  */
 int PyThread_start_new_thread(void (*func)(void *), void *arg)
 {
-       long rv;
+       INT_PTR rv;
        int success = 0;
 
        dprintf(("%ld: PyThread_start_new_thread called\n", PyThread_get_thread_ident()));
@@ -190,7 +193,7 @@ int PyThread_start_new_thread(void (*func)(void *), void *arg)
  
        if (rv != -1) {
                success = 1;
-               dprintf(("%ld: PyThread_start_new_thread succeeded: %ld\n", PyThread_get_thread_ident(), rv));
+               dprintf(("%ld: PyThread_start_new_thread succeeded: %p\n", PyThread_get_thread_ident(), rv));
        }
 
        return success;
index 0b8157d5a51aeaf325b92de40ec7bfd78ceca221..d63aef5d140a9d49388bd953ec8919501d7a0b6b 100644 (file)
@@ -166,7 +166,7 @@ tb_displayline(f, filename, lineno, name)
                path = PySys_GetObject("path");
                if (path != NULL && PyList_Check(path)) {
                        int npath = PyList_Size(path);
-                       int taillen = strlen(tail);
+                       size_t taillen = strlen(tail);
                        char namebuf[MAXPATHLEN+1];
                        for (i = 0; i < npath; i++) {
                                PyObject *v = PyList_GetItem(path, i);
@@ -175,12 +175,12 @@ tb_displayline(f, filename, lineno, name)
                                        break;
                                }
                                if (PyString_Check(v)) {
-                                       int len;
+                                       size_t len;
                                        len = PyString_Size(v);
                                        if (len + 1 + taillen >= MAXPATHLEN)
                                                continue; /* Too long */
                                        strcpy(namebuf, PyString_AsString(v));
-                                       if ((int)strlen(namebuf) != len)
+                                       if (strlen(namebuf) != len)
                                                continue; /* v contains '\0' */
                                        if (len > 0 && namebuf[len-1] != SEP)
                                                namebuf[len++] = SEP;