From 67aca9e04e5360007c46fde3d64debb4dad4d9ff Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 13 Jun 2007 21:51:27 +0000 Subject: [PATCH] Following an idea by Ron Adam, make sure keys and values in the environ dict are strings (in particular, not 8-bit strings). --- Lib/os.py | 14 +++++++------- Lib/test/test_os.py | 7 +++++++ 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Lib/os.py b/Lib/os.py index e47ec99224a..2987cfca141 100644 --- a/Lib/os.py +++ b/Lib/os.py @@ -420,12 +420,12 @@ def __init__(self, environ, keymap, putenv, unsetenv): self.unsetenv = unsetenv self.data = data = {} for key, value in environ.items(): - data[keymap(key)] = value + data[keymap(key)] = str(value) def __getitem__(self, key): return self.data[self.keymap(key)] - def __setitem__(self, key, item): - self.putenv(key, item) - self.data[self.keymap(key)] = item + def __setitem__(self, key, value): + self.putenv(key, str(value)) + self.data[self.keymap(key)] = str(value) def __delitem__(self, key): self.unsetenv(key) del self.data[self.keymap(key)] @@ -438,7 +438,7 @@ def copy(self): return dict(self) def setdefault(self, key, value): if key not in self: - self[key] = value + self[key] = str(value) return self[key] try: @@ -456,9 +456,9 @@ def setdefault(self, key, value): __all__.append("unsetenv") if name in ('os2', 'nt'): # Where Env Var Names Must Be UPPERCASE - _keymap = lambda key: key.upper() + _keymap = lambda key: str(key.upper()) else: # Where Env Var Names Can Be Mixed Case - _keymap = lambda key: key + _keymap = lambda key: str(key) environ = _Environ(environ, _keymap, _putenv, _unsetenv) diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index 2ddda8ac3f8..1f6499c62c3 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -273,6 +273,13 @@ def test_update2(self): value = os.popen("/bin/sh -c 'echo $HELLO'").read().strip() self.assertEquals(value, "World") + # Verify environ keys and values from the OS are of the + # correct str type. + def test_keyvalue_types(self): + for key, val in os.environ.items(): + self.assertEquals(type(key), str) + self.assertEquals(type(val), str) + class WalkTests(unittest.TestCase): """Tests for os.walk()."""