diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 09680c8..93f4a93 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1852,6 +1852,17 @@
 	return NULL; /* Make gcc -Wall happy */
 }
 
+#if defined(HAVE_EXECV) || defined(HAVE_SPAWNV)
+static void
+free_string_array(char **array, int count)
+{
+	int i;
+	for (i = 0; i < count; i++)
+		PyMem_Free(array[i]);
+	PyMem_DEL(array);
+}
+#endif
+
 
 #ifdef HAVE_EXECV
 PyDoc_STRVAR(posix_execv__doc__,
@@ -1873,7 +1884,9 @@
 	/* execv has two arguments: (path, argv), where
 	   argv is a list or tuple of strings. */
 
-	if (!PyArg_ParseTuple(args, "sO:execv", &path, &argv))
+	if (!PyArg_ParseTuple(args, "etO:execv",
+                              Py_FileSystemDefaultEncoding,
+                              &path, &argv))
 		return NULL;
 	if (PyList_Check(argv)) {
 		argc = PyList_Size(argv);
@@ -1885,22 +1898,29 @@
 	}
 	else {
 		PyErr_SetString(PyExc_TypeError, "execv() arg 2 must be a tuple or list");
+                PyMem_Free(path);
 		return NULL;
 	}
 
 	if (argc == 0) {
 		PyErr_SetString(PyExc_ValueError, "execv() arg 2 must not be empty");
+                PyMem_Free(path);
 		return NULL;
 	}
 
 	argvlist = PyMem_NEW(char *, argc+1);
-	if (argvlist == NULL)
+	if (argvlist == NULL) {
+		PyMem_Free(path);
 		return NULL;
+	}
 	for (i = 0; i < argc; i++) {
-		if (!PyArg_Parse((*getitem)(argv, i), "s", &argvlist[i])) {
-			PyMem_DEL(argvlist);
+		if (!PyArg_Parse((*getitem)(argv, i), "et",
+				 Py_FileSystemDefaultEncoding,
+				 &argvlist[i])) {
+			free_string_array(argvlist, i);
 			PyErr_SetString(PyExc_TypeError,
 					"execv() arg 2 must contain only strings");
+			PyMem_Free(path);
 			return NULL;
 
 		}
@@ -1915,7 +1935,8 @@
 
 	/* If we get here it's definitely an error */
 
-	PyMem_DEL(argvlist);
+	free_string_array(argvlist, argc);
+	PyMem_Free(path);
 	return posix_error();
 }
 
@@ -1938,12 +1959,15 @@
 	PyObject *key, *val, *keys=NULL, *vals=NULL;
 	int i, pos, argc, envc;
 	PyObject *(*getitem)(PyObject *, int);
+	int lastarg = 0;
 
 	/* execve has three arguments: (path, argv, env), where
 	   argv is a list or tuple of strings and env is a dictionary
 	   like posix.environ. */
 
-	if (!PyArg_ParseTuple(args, "sOO:execve", &path, &argv, &env))
+	if (!PyArg_ParseTuple(args, "etOO:execve",
+			      Py_FileSystemDefaultEncoding,
+			      &path, &argv, &env))
 		return NULL;
 	if (PyList_Check(argv)) {
 		argc = PyList_Size(argv);
@@ -1955,32 +1979,34 @@
 	}
 	else {
 		PyErr_SetString(PyExc_TypeError, "execve() arg 2 must be a tuple or list");
-		return NULL;
+		goto fail_0;
 	}
 	if (!PyMapping_Check(env)) {
 		PyErr_SetString(PyExc_TypeError, "execve() arg 3 must be a mapping object");
-		return NULL;
+		goto fail_0;
 	}
 
 	if (argc == 0) {
 		PyErr_SetString(PyExc_ValueError,
 				"execve() arg 2 must not be empty");
-		return NULL;
+		goto fail_0;
 	}
 
 	argvlist = PyMem_NEW(char *, argc+1);
 	if (argvlist == NULL) {
 		PyErr_NoMemory();
-		return NULL;
+		goto fail_0;
 	}
 	for (i = 0; i < argc; i++) {
 		if (!PyArg_Parse((*getitem)(argv, i),
-				 "s;execve() arg 2 must contain only strings",
+				 "et;execve() arg 2 must contain only strings",
 				 &argvlist[i]))
 		{
+			lastarg = i;
 			goto fail_1;
 		}
 	}
+	lastarg = argc;
 	argvlist[argc] = NULL;
 
 	i = PyMapping_Size(env);
@@ -2044,9 +2070,11 @@
 		PyMem_DEL(envlist[envc]);
 	PyMem_DEL(envlist);
  fail_1:
-	PyMem_DEL(argvlist);
+	free_string_array(argvlist,lastarg);
 	Py_XDECREF(vals);
 	Py_XDECREF(keys);
+ fail_0:
+	PyMem_Free(path);
 	return NULL;
 }
 #endif /* HAVE_EXECV */
@@ -2074,7 +2102,9 @@
 	/* spawnv has three arguments: (mode, path, argv), where
 	   argv is a list or tuple of strings. */
 
-	if (!PyArg_ParseTuple(args, "isO:spawnv", &mode, &path, &argv))
+	if (!PyArg_ParseTuple(args, "ietO:spawnv", &mode,
+			      Py_FileSystemDefaultEncoding,
+			      &path, &argv))
 		return NULL;
 	if (PyList_Check(argv)) {
 		argc = PyList_Size(argv);
@@ -2086,17 +2116,23 @@
 	}
 	else {
 		PyErr_SetString(PyExc_TypeError, "spawnv() arg 2 must be a tuple or list");
+		PyMem_Free(path);
 		return NULL;
 	}
 
 	argvlist = PyMem_NEW(char *, argc+1);
-	if (argvlist == NULL)
+	if (argvlist == NULL) {
+		PyMem_Free(path);
 		return NULL;
+	}
 	for (i = 0; i < argc; i++) {
-		if (!PyArg_Parse((*getitem)(argv, i), "s", &argvlist[i])) {
-			PyMem_DEL(argvlist);
+		if (!PyArg_Parse((*getitem)(argv, i), "et",
+				 Py_FileSystemDefaultEncoding,
+				 &argvlist[i])) {
+			free_string_array(argvlist, i);
 			PyErr_SetString(PyExc_TypeError,
 					"spawnv() arg 2 must contain only strings");
+			PyMem_Free(path);
 			return NULL;
 		}
 	}
@@ -2115,7 +2151,8 @@
 	Py_END_ALLOW_THREADS
 #endif
 
-	PyMem_DEL(argvlist);
+	free_string_array(argvlist, argc);
+	PyMem_Free(path);
 
 	if (spawnval == -1)
 		return posix_error();
@@ -2148,12 +2185,15 @@
 	int mode, i, pos, argc, envc;
 	Py_intptr_t spawnval;
 	PyObject *(*getitem)(PyObject *, int);
+	int lastarg = 0;
 
 	/* spawnve has four arguments: (mode, path, argv, env), where
 	   argv is a list or tuple of strings and env is a dictionary
 	   like posix.environ. */
 
-	if (!PyArg_ParseTuple(args, "isOO:spawnve", &mode, &path, &argv, &env))
+	if (!PyArg_ParseTuple(args, "ietOO:spawnve", &mode,
+			      Py_FileSystemDefaultEncoding,
+			      &path, &argv, &env))
 		return NULL;
 	if (PyList_Check(argv)) {
 		argc = PyList_Size(argv);
@@ -2165,26 +2205,29 @@
 	}
 	else {
 		PyErr_SetString(PyExc_TypeError, "spawnve() arg 2 must be a tuple or list");
-		return NULL;
+		goto fail_0;
 	}
 	if (!PyMapping_Check(env)) {
 		PyErr_SetString(PyExc_TypeError, "spawnve() arg 3 must be a mapping object");
-		return NULL;
+		goto fail_0;
 	}
 
 	argvlist = PyMem_NEW(char *, argc+1);
 	if (argvlist == NULL) {
 		PyErr_NoMemory();
-		return NULL;
+		goto fail_0;
 	}
 	for (i = 0; i < argc; i++) {
 		if (!PyArg_Parse((*getitem)(argv, i),
-				 "s;spawnve() arg 2 must contain only strings",
+				 "et;spawnve() arg 2 must contain only strings",
+				 Py_FileSystemDefaultEncoding,
 				 &argvlist[i]))
 		{
+			lastarg = i;
 			goto fail_1;
 		}
 	}
+	lastarg = argc;
 	argvlist[argc] = NULL;
 
 	i = PyMapping_Size(env);
@@ -2251,9 +2294,11 @@
 		PyMem_DEL(envlist[envc]);
 	PyMem_DEL(envlist);
  fail_1:
-	PyMem_DEL(argvlist);
+	free_string_array(argvlist, lastarg);
 	Py_XDECREF(vals);
 	Py_XDECREF(keys);
+  fail_0:
+	PyMem_Free(path);
 	return res;
 }
 #endif /* HAVE_SPAWNV */
