diff Python/import.c @ 47599:e2eb70235392

Issue 1342: Python could not start if installed in a directory with non-ascii characters. This is the simple fix, which uses the FileSystemEncoding. Replacing all the char* with unicode strings is a major rewrite, and needs more thinking.
author Amaury Forgeot d'Arc <amauryfa@gmail.com>
date Wed, 11 Jun 2008 17:40:47 +0000
parents 212a1fee6bf9
children de0bf60f1245
line wrap: on
line diff
--- a/Python/import.c	Wed Jun 11 16:57:54 2008 +0000
+++ b/Python/import.c	Wed Jun 11 17:40:47 2008 +0000
@@ -1364,19 +1364,26 @@
 		if (!v)
 			return NULL;
 		if (PyUnicode_Check(v)) {
-			v = _PyUnicode_AsDefaultEncodedString(v, NULL);
+			v = PyUnicode_AsEncodedString(v, 
+			    Py_FileSystemDefaultEncoding, NULL);
 			if (v == NULL)
 				return NULL;
 		}
-		if (!PyBytes_Check(v))
+		else if (!PyBytes_Check(v))
 			continue;
+		else
+			Py_INCREF(v);
+
 		base = PyBytes_AS_STRING(v);
 		size = PyBytes_GET_SIZE(v);
 		len = size;
 		if (len + 2 + namelen + MAXSUFFIXSIZE >= buflen) {
+			Py_DECREF(v);
 			continue; /* Too long */
 		}
 		strcpy(buf, base);
+		Py_DECREF(v);
+
 		if (strlen(buf) != len) {
 			continue; /* v contains '\0' */
 		}
@@ -3155,8 +3162,8 @@
 	if (!_PyArg_NoKeywords("NullImporter()", kwds))
 		return -1;
 
-	if (!PyArg_ParseTuple(args, "s:NullImporter",
-			      &path))
+	if (!PyArg_ParseTuple(args, "es:NullImporter",
+			      Py_FileSystemDefaultEncoding, &path))
 		return -1;
 
 	pathlen = strlen(path);