Index: Modules/dbmmodule.c =================================================================== --- Modules/dbmmodule.c (révision 83197) +++ Modules/dbmmodule.c (copie de travail) @@ -368,8 +368,10 @@ char *flags = "r"; int iflags; int mode = 0666; + PyObject *obj; - if ( !PyArg_ParseTuple(args, "s|si:open", &name, &flags, &mode) ) + if (!PyArg_ParseTuple(args, "et|si:open", + Py_FileSystemDefaultEncoding, &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'"); + PyMem_Free(name); return NULL; } - return newdbmobject(name, iflags, mode); + obj = newdbmobject(name, iflags, mode); + PyMem_Free(name); + return obj; } static PyMethodDef dbmmodule_methods[] = { Index: Modules/gdbmmodule.c =================================================================== --- Modules/gdbmmodule.c (révision 83197) +++ Modules/gdbmmodule.c (copie de travail) @@ -460,8 +460,10 @@ char *flags = "r"; int iflags; int mode = 0666; + PyObject *obj; - if (!PyArg_ParseTuple(args, "s|si:open", &name, &flags, &mode)) + if (!PyArg_ParseTuple(args, "et|si:open", + Py_FileSystemDefaultEncoding, &name, &flags, &mode)) return NULL; switch (flags[0]) { case 'r': @@ -479,6 +481,7 @@ default: PyErr_SetString(DbmError, "First flag must be one of 'r', 'w', 'c' or 'n'"); + PyMem_Free(name); return NULL; } for (flags++; *flags != '\0'; flags++) { @@ -507,7 +510,9 @@ } } - return newdbmobject(name, iflags, mode); + obj = newdbmobject(name, iflags, mode); + PyMem_Free(name); + return obj; } static char dbmmodule_open_flags[] = "rwcn"