Index: Modules/_gdbmmodule.c =================================================================== --- Modules/_gdbmmodule.c (révision 83194) +++ Modules/_gdbmmodule.c (copie de travail) @@ -441,12 +441,14 @@ static PyObject * dbmopen(PyObject *self, PyObject *args) { - char *name; + PyObject *name; char *flags = "r"; int iflags; int mode = 0666; + PyObject *obj; - if (!PyArg_ParseTuple(args, "s|si:open", &name, &flags, &mode)) + if (!PyArg_ParseTuple(args, "O&|si:open", + PyUnicode_FSConverter, &name, &flags, &mode)) return NULL; switch (flags[0]) { case 'r': @@ -464,6 +466,7 @@ default: PyErr_SetString(DbmError, "First flag must be one of 'r', 'w', 'c' or 'n'"); + Py_DECREF(name); return NULL; } for (flags++; *flags != '\0'; flags++) { @@ -492,7 +495,9 @@ } } - return newdbmobject(name, iflags, mode); + obj = newdbmobject(PyBytes_AS_STRING(name), iflags, mode); + Py_DECREF(name); + return obj; } static char dbmmodule_open_flags[] = "rwcn" Index: Modules/_dbmmodule.c =================================================================== --- Modules/_dbmmodule.c (révision 83194) +++ Modules/_dbmmodule.c (copie de travail) @@ -364,12 +364,14 @@ static PyObject * dbmopen(PyObject *self, PyObject *args) { - char *name; + PyObject *name; char *flags = "r"; int iflags; int mode = 0666; + PyObject *obj; - if ( !PyArg_ParseTuple(args, "s|si:open", &name, &flags, &mode) ) + if (!PyArg_ParseTuple(args, "s|si:open", + PyUnicode_FSConverter, &name, &flags, &mode)) return NULL; if ( strcmp(flags, "r") == 0 ) iflags = O_RDONLY; @@ -384,9 +386,12 @@ else { PyErr_SetString(DbmError, "arg 2 to open should be 'r', 'w', 'c', or 'n'"); + Py_DECREF(name); return NULL; } - return newdbmobject(name, iflags, mode); + obj = newdbmobject(PyBytes_AS_STRING(name), iflags, mode); + Py_DECREF(name); + return obj; } static PyMethodDef dbmmodule_methods[] = {