Skip to content

Commit

Permalink
Fix handling of chunked+gzipped response when first chunk does not gi…
Browse files Browse the repository at this point in the history
…ve uncompressed data (#3477)
  • Loading branch information
socketpair committed Jan 4, 2019
1 parent 298a71a commit ac5dfb0
Showing 1 changed file with 16 additions and 8 deletions.
24 changes: 16 additions & 8 deletions aiohttp/streams.py
Original file line number Diff line number Diff line change
Expand Up @@ -254,15 +254,23 @@ def end_http_chunk_receiving(self) -> None:
if self._http_chunk_splits is None:
raise RuntimeError("Called end_chunk_receiving without calling "
"begin_chunk_receiving first")
if not self._http_chunk_splits or \
self._http_chunk_splits[-1] != self.total_bytes:
self._http_chunk_splits.append(self.total_bytes)

# wake up readchunk when end of http chunk received
waiter = self._waiter
if waiter is not None:
self._waiter = None
set_result(waiter, False)
pos = self._http_chunk_splits[-1] if self._http_chunk_splits else 0

if self.total_bytes == pos:
# Note, when chunked + gzip is used, we can receive some chunk
# of compressed data, but that data may not be enough for gzip FSM
# to yield any uncompressed data. That's why current position may
# not change after receiving a chunk.
return

self._http_chunk_splits.append(self.total_bytes)

# wake up readchunk when end of http chunk received
waiter = self._waiter
if waiter is not None:
self._waiter = None
set_result(waiter, False)

async def _wait(self, func_name: str) -> None:
# StreamReader uses a future to link the protocol feed_data() method
Expand Down

0 comments on commit ac5dfb0

Please sign in to comment.