]> granicus.if.org Git - python/commitdiff
Issue #22206: Using pthread, PyThread_create_key() now sets errno to ENOMEM and
authorVictor Stinner <victor.stinner@gmail.com>
Sun, 17 Aug 2014 20:11:06 +0000 (22:11 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Sun, 17 Aug 2014 20:11:06 +0000 (22:11 +0200)
returns -1 (error) on integer overflow.

Misc/NEWS
Python/thread_pthread.h

index 3f7f47884faf08eee21ca12b604d2b21b82e278e..cd4f52bb5654b15d44074e674584e2dfa7c47fe0 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@ Release date: TBA
 Core and Builtins
 -----------------
 
+- Issue #22206: Using pthread, PyThread_create_key() now sets errno to ENOMEM
+  and returns -1 (error) on integer overflow.
+
 - Issue #20184: Argument Clinic based signature introspection added for
   30 of the builtin functions.
 
index d9f7c76f2aba0e1d3190b0c5495fc3e4c63bcf29..27e0dc84bcb52ed2c8cad5c7372df4752d5e150f 100644 (file)
@@ -608,7 +608,15 @@ PyThread_create_key(void)
 {
     pthread_key_t key;
     int fail = pthread_key_create(&key, NULL);
-    return fail ? -1 : key;
+    if (fail)
+        return -1;
+    if (key > INT_MAX) {
+        /* Issue #22206: handle integer overflow */
+        pthread_key_delete(key);
+        errno = ENOMEM;
+        return -1;
+    }
+    return (int)key;
 }
 
 void