File tree Expand file tree Collapse file tree 1 file changed +9
-0
lines changed Expand file tree Collapse file tree 1 file changed +9
-0
lines changed Original file line number Diff line number Diff line change 11import asyncio
22import http
33import logging
4+ import re
45import urllib
56
67import httptools
1314 is_ssl ,
1415)
1516
17+ HEADER_RE = re .compile (b'[\x00 -\x1F \x7F ()<>@,;:[]={} \t \\ "]' )
18+ HEADER_VALUE_RE = re .compile (b"[\x00 -\x1F \x7F ]" )
19+
1620
1721def _get_status_line (status_code ):
1822 try :
@@ -459,6 +463,11 @@ async def send(self, message):
459463 content = [STATUS_LINE [status_code ]]
460464
461465 for name , value in headers :
466+ if HEADER_RE .search (name ):
467+ raise RuntimeError ("Invalid HTTP header name." )
468+ if HEADER_VALUE_RE .search (value ):
469+ raise RuntimeError ("Invalid HTTP header value." )
470+
462471 name = name .lower ()
463472 if name == b"content-length" and self .chunked_encoding is None :
464473 self .expected_content_length = int (value .decode ())
You can’t perform that action at this time.
0 commit comments