Blame fix-dbm_contains-on-64bit-bigendian.patch

e8c4a5d
Index: Modules/dbmmodule.c
e8c4a5d
===================================================================
e8c4a5d
--- Modules/dbmmodule.c	(revision 84317)
e8c4a5d
+++ Modules/dbmmodule.c	(working copy)
e8c4a5d
@@ -168,12 +168,18 @@
e8c4a5d
 dbm_contains(register dbmobject *dp, PyObject *v)
e8c4a5d
 {
e8c4a5d
     datum key, val;
e8c4a5d
+    Py_ssize_t dsize;
e8c4a5d
 
e8c4a5d
-    if (PyString_AsStringAndSize(v, (char **)&key.dptr,
e8c4a5d
-                                 (Py_ssize_t *)&key.dsize)) {
e8c4a5d
+    if (PyString_AsStringAndSize(v, (char **)&key.dptr, &dsize)) {
e8c4a5d
         return -1;
e8c4a5d
     }
e8c4a5d
 
e8c4a5d
+    /* Coerce from Py_ssize_t down to int: */
e8c4a5d
+    if (dsize > INT_MAX) {
e8c4a5d
+        return -1;
e8c4a5d
+    }
e8c4a5d
+    key.dsize = dsize;
e8c4a5d
+
e8c4a5d
     /* Expand check_dbmobject_open to return -1 */
e8c4a5d
     if (dp->di_dbm == NULL) {
e8c4a5d
         PyErr_SetString(DbmError, "DBM object has already been closed");