@@ -1573,9 +1573,16 @@ def __delattr__(self, name, value):
15731573 raise AttributeError ("Attribute not defined: %s" % name )
15741574
15751575
1576- def _hkey (s ):
1577- return s .title ().replace ('_' , '-' )
1578-
1576+ def _hkey (key ):
1577+ if '\n ' in key or '\r ' in key or '\0 ' in key :
1578+ raise ValueError ("Header names must not contain control characters: %r" % key )
1579+ return key .title ().replace ('_' , '-' )
1580+
1581+ def _hval (value ):
1582+ value = value if isinstance (value , unicode ) else str (value )
1583+ if '\n ' in value or '\r ' in value or '\0 ' in value :
1584+ raise ValueError ("Header value must not contain control characters: %r" % value )
1585+ return value
15791586
15801587class HeaderProperty (object ):
15811588 def __init__ (self , name , reader = None , writer = str , default = '' ):
@@ -2170,7 +2177,6 @@ def __getattr__(self, name, default=unicode()):
21702177 return super (FormsDict , self ).__getattr__ (name )
21712178 return self .getunicode (name , default = default )
21722179
2173-
21742180class HeaderDict (MultiDict ):
21752181 """ A case-insensitive version of :class:`MultiDict` that defaults to
21762182 replace the old value instead of appending it. """
@@ -2189,16 +2195,13 @@ def __getitem__(self, key):
21892195 return self .dict [_hkey (key )][- 1 ]
21902196
21912197 def __setitem__ (self , key , value ):
2192- self .dict [_hkey (key )] = [value if isinstance (value , unicode ) else
2193- str (value )]
2198+ self .dict [_hkey (key )] = [_hval (value )]
21942199
21952200 def append (self , key , value ):
2196- self .dict .setdefault (_hkey (key ), []).append (
2197- value if isinstance (value , unicode ) else str (value ))
2201+ self .dict .setdefault (_hkey (key ), []).append (_hval (value ))
21982202
21992203 def replace (self , key , value ):
2200- self .dict [_hkey (key )] = [value if isinstance (value , unicode ) else
2201- str (value )]
2204+ self .dict [_hkey (key )] = [_hval (value )]
22022205
22032206 def getall (self , key ):
22042207 return self .dict .get (_hkey (key )) or []
@@ -2207,7 +2210,7 @@ def get(self, key, default=None, index=-1):
22072210 return MultiDict .get (self , _hkey (key ), default , index )
22082211
22092212 def filter (self , names ):
2210- for name in [ _hkey (n ) for n in names ] :
2213+ for name in ( _hkey (n ) for n in names ) :
22112214 if name in self .dict :
22122215 del self .dict [name ]
22132216
0 commit comments