diff -r 6f8a5458108d Modules/_dbmmodule.c --- a/Modules/_dbmmodule.c Thu Dec 05 16:13:03 2013 +0100 +++ b/Modules/_dbmmodule.c Thu Dec 05 18:33:50 2013 +0100 @@ -61,12 +61,22 @@ newdbmobject(const char *file, int flags, int mode) { dbmobject *dp; + char filename[PATH_MAX+1]; + + /* Some DBM interfaces have a char* instead of a const char* argument. + * See http://bugs.python.org/issue19296 */ + if (strlen(file) >= sizeof(filename)) { + PyErr_SetString(PyExc_ValueError, "file name is too long"); + return NULL; + } + strncpy(filename, file, PATH_MAX); + filename[PATH_MAX] = '\0'; dp = PyObject_New(dbmobject, &Dbmtype); if (dp == NULL) return NULL; dp->di_size = -1; - if ( (dp->di_dbm = dbm_open(file, flags, mode)) == 0 ) { + if ( (dp->di_dbm = dbm_open(filename, flags, mode)) == 0 ) { PyErr_SetFromErrno(DbmError); Py_DECREF(dp); return NULL;