fix data corruption when on-the-fly compression is used #2141
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The on-the-fly compressor typically emits multiple vectors.
In #1992 that got merged as part of #1846, we switched the vector type being used for sending response chunks from
h2o_iovec_ttoh2o_sendvec_t. The size of the structs are different.However, we failed to make the corresponding change in HTTP/2 handler, resulting in corrupt list of vectors when multiple vectors are split into different calls to writev.
Reported in #2135.
PS. This is a good (bad) example in showing the danger of using
typeof(typename)in memory-related function calls (e.g., malloc, memcpy, memmove). Do we want to do a review and rewrite those?