mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Following an idea by Ron Adam, make sure keys and values in the
environ dict are strings (in particular, not 8-bit strings).
This commit is contained in:
parent
cd16bf6404
commit
67aca9e04e
2 changed files with 14 additions and 7 deletions
14
Lib/os.py
14
Lib/os.py
|
@ -420,12 +420,12 @@ else:
|
||||||
self.unsetenv = unsetenv
|
self.unsetenv = unsetenv
|
||||||
self.data = data = {}
|
self.data = data = {}
|
||||||
for key, value in environ.items():
|
for key, value in environ.items():
|
||||||
data[keymap(key)] = value
|
data[keymap(key)] = str(value)
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
return self.data[self.keymap(key)]
|
return self.data[self.keymap(key)]
|
||||||
def __setitem__(self, key, item):
|
def __setitem__(self, key, value):
|
||||||
self.putenv(key, item)
|
self.putenv(key, str(value))
|
||||||
self.data[self.keymap(key)] = item
|
self.data[self.keymap(key)] = str(value)
|
||||||
def __delitem__(self, key):
|
def __delitem__(self, key):
|
||||||
self.unsetenv(key)
|
self.unsetenv(key)
|
||||||
del self.data[self.keymap(key)]
|
del self.data[self.keymap(key)]
|
||||||
|
@ -438,7 +438,7 @@ else:
|
||||||
return dict(self)
|
return dict(self)
|
||||||
def setdefault(self, key, value):
|
def setdefault(self, key, value):
|
||||||
if key not in self:
|
if key not in self:
|
||||||
self[key] = value
|
self[key] = str(value)
|
||||||
return self[key]
|
return self[key]
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -456,9 +456,9 @@ else:
|
||||||
__all__.append("unsetenv")
|
__all__.append("unsetenv")
|
||||||
|
|
||||||
if name in ('os2', 'nt'): # Where Env Var Names Must Be UPPERCASE
|
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
|
else: # Where Env Var Names Can Be Mixed Case
|
||||||
_keymap = lambda key: key
|
_keymap = lambda key: str(key)
|
||||||
|
|
||||||
environ = _Environ(environ, _keymap, _putenv, _unsetenv)
|
environ = _Environ(environ, _keymap, _putenv, _unsetenv)
|
||||||
|
|
||||||
|
|
|
@ -273,6 +273,13 @@ class EnvironTests(mapping_tests.BasicTestMappingProtocol):
|
||||||
value = os.popen("/bin/sh -c 'echo $HELLO'").read().strip()
|
value = os.popen("/bin/sh -c 'echo $HELLO'").read().strip()
|
||||||
self.assertEquals(value, "World")
|
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):
|
class WalkTests(unittest.TestCase):
|
||||||
"""Tests for os.walk()."""
|
"""Tests for os.walk()."""
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue