Patch #804543: strdup saved locales. Backported to 2.3.
diff --git a/Modules/readline.c b/Modules/readline.c
index 5053d1c..7535ecf 100644
--- a/Modules/readline.c
+++ b/Modules/readline.c
@@ -611,7 +611,7 @@
 setup_readline(void)
 {
 #ifdef SAVE_LOCALE
-	char *saved_locale = setlocale(LC_CTYPE, NULL);
+	char *saved_locale = strdup(setlocale(LC_CTYPE, NULL));
 #endif
 
 	using_history();
@@ -652,6 +652,7 @@
 
 #ifdef SAVE_LOCALE
 	setlocale(LC_CTYPE, saved_locale); /* Restore locale */
+	free(saved_locale);
 #endif
 }
 
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 21c2cac..ab6ed58 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -235,7 +235,7 @@
 	   initialized by other means. Also set the encoding of
 	   stdin and stdout if these are terminals.  */
 
-	saved_locale = setlocale(LC_CTYPE, NULL);
+	saved_locale = strdup(setlocale(LC_CTYPE, NULL));
 	setlocale(LC_CTYPE, "");
 	codeset = nl_langinfo(CODESET);
 	if (codeset && *codeset) {
@@ -250,6 +250,7 @@
 	} else
 		codeset = NULL;
 	setlocale(LC_CTYPE, saved_locale);
+	free(saved_locale);
 
 	if (codeset) {
 		sys_stream = PySys_GetObject("stdin");