Nathaniel J. Smith
Nathaniel J. Smith
Header values are a mess. Supposedly they're defined by RFC 7230, but in fact it has a bug and its definition is obviously wrong. And, in practice, implementations are substantially...
Twisted recently did a CVE fix for CRLF injection in methods and request targets: https://twistedmatrix.com/trac/ticket/9647 We already validate request targets and headers to prevent this kind of nonsense, but AFAICT...
I was looking at https://github.com/shazow/urllib3/pull/1318, and realized I wasn't quite sure what the right rules were for handling whitespace in headers using the "obsolete line-folding rule". Specifically, if we have...
Possibly h11 in client mode should raise an exception if it receives data before sending a Request
This is related to: https://github.com/njsmith/h11/issues/23 Right now, there are two reasons this doesn't happen: * h11 doesn't look at the next request/response cycle at all until the current one finishes...
h11 is in this awkward life stage, where I believe it's basically complete and correct... but it's an unusual API with few precedents, and it hasn't been used much beyond...
It's security-critical that ReceiveBuffer's methods have linear worst-case complexity, and the code we use to accomplish this is non-trivial. There should be tests that we have successfully avoided the O(n^2)...
Apparently the autobahn tests 12.5.* have a bug where they send invalid utf8: https://github.com/aaugustin/websockets/pull/178#issuecomment-302923540 https://github.com/crossbario/autobahn-testsuite/issues/71 How can we be passing these tests? It seems like a correct implementation has to...
In my initial draft, I have 3 functions: * `run_on_each`: concurrent map, with results optionally directed to a `SendChannel`, no return value * `amap`: concurrent map, `async with` calling convention,...
Right now, the incremental result reporting always reports results as they're ready, so the order of the output doesn't necessarily match the order of the input. (Except for `run_all`, since...
The builtin `map` supports multiple iterables: ```python In [1]: list(map(lambda x, y: x + y, [1, 2, 3], [4, 5, 6])) Out[1]: [5, 7, 9] ``` (The `map` in `concurrent.futures`...