You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by bc...@apache.org on 2015/11/20 01:43:04 UTC
trafficserver git commit: TS-3963: Response headers are not
completely transferred
Repository: trafficserver
Updated Branches:
refs/heads/6.0.x 2d4b9189e -> 13190b9e5
TS-3963: Response headers are not completely transferred
(cherry picked from commit 713121065c8a6bcccc6fb6e51d49017a4daff8e5)
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/13190b9e
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/13190b9e
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/13190b9e
Branch: refs/heads/6.0.x
Commit: 13190b9e5f7660c759a9b08b74f1333a9290055c
Parents: 2d4b918
Author: Bryan Call <bc...@apache.org>
Authored: Wed Oct 28 14:51:56 2015 -0700
Committer: Bryan Call <bc...@apache.org>
Committed: Thu Nov 19 16:42:59 2015 -0800
----------------------------------------------------------------------
proxy/hdrs/MIME.h | 16 ++++++++++++----
proxy/http2/HTTP2.cc | 8 +++++---
proxy/http2/Http2ConnectionState.cc | 4 ++--
3 files changed, 19 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/13190b9e/proxy/hdrs/MIME.h
----------------------------------------------------------------------
diff --git a/proxy/hdrs/MIME.h b/proxy/hdrs/MIME.h
index 5ad5717..903bfc3 100644
--- a/proxy/hdrs/MIME.h
+++ b/proxy/hdrs/MIME.h
@@ -907,6 +907,7 @@ public:
void field_delete(const char *name, int name_length);
MIMEField *iter_get_first(MIMEFieldIter *iter);
+ MIMEField *iter_get(MIMEFieldIter *iter);
MIMEField *iter_get_next(MIMEFieldIter *iter);
uint64_t presence(uint64_t mask);
@@ -1143,17 +1144,17 @@ inline MIMEField *
MIMEHdr::iter_get_first(MIMEFieldIter *iter)
{
iter->m_block = &m_mime->m_first_fblock;
- iter->m_slot = (unsigned int)-1;
- return iter_get_next(iter);
+ iter->m_slot = 0;
+ return iter_get(iter);
}
inline MIMEField *
-MIMEHdr::iter_get_next(MIMEFieldIter *iter)
+MIMEHdr::iter_get(MIMEFieldIter *iter)
{
MIMEField *f;
MIMEFieldBlockImpl *b = iter->m_block;
- int slot = iter->m_slot + 1;
+ int slot = iter->m_slot;
while (b) {
for (; slot < (int)b->m_freetop; slot++) {
@@ -1172,6 +1173,13 @@ MIMEHdr::iter_get_next(MIMEFieldIter *iter)
return NULL;
}
+inline MIMEField *
+MIMEHdr::iter_get_next(MIMEFieldIter *iter)
+{
+ iter->m_slot++;
+ return iter_get(iter);
+}
+
/*-------------------------------------------------------------------------
-------------------------------------------------------------------------*/
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/13190b9e/proxy/http2/HTTP2.cc
----------------------------------------------------------------------
diff --git a/proxy/http2/HTTP2.cc b/proxy/http2/HTTP2.cc
index 0929def..5108685 100644
--- a/proxy/http2/HTTP2.cc
+++ b/proxy/http2/HTTP2.cc
@@ -596,7 +596,7 @@ http2_write_header_fragment(HTTPHdr *in, MIMEFieldIter &field_iter, uint8_t *out
if (!field_iter.m_block) {
field = in->iter_get_first(&field_iter);
} else {
- field = in->iter_get_next(&field_iter);
+ field = in->iter_get(&field_iter);
}
// Set mime headers
@@ -613,13 +613,15 @@ http2_write_header_fragment(HTTPHdr *in, MIMEFieldIter &field_iter, uint8_t *out
continue;
}
- MIMEFieldIter current_iter = field_iter;
MIMEFieldWrapper header(field, in->m_heap, in->m_http->m_fields_impl);
if ((len = encode_literal_header_field(p, end, header, HPACK_FIELD_INDEXED_LITERAL)) == -1) {
+ if (p == out) {
+ // no progress was made, header was too big for the buffer, skipping for now
+ continue;
+ }
if (!cont) {
// Parsing a part of headers is done
cont = true;
- field_iter = current_iter;
return p - out;
} else {
// Parse error
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/13190b9e/proxy/http2/Http2ConnectionState.cc
----------------------------------------------------------------------
diff --git a/proxy/http2/Http2ConnectionState.cc b/proxy/http2/Http2ConnectionState.cc
index a0fff63..634b145 100644
--- a/proxy/http2/Http2ConnectionState.cc
+++ b/proxy/http2/Http2ConnectionState.cc
@@ -34,7 +34,7 @@ typedef Http2Error (*http2_frame_dispatch)(Http2ClientSession &, Http2Connection
static const int buffer_size_index[HTTP2_FRAME_TYPE_MAX] = {
BUFFER_SIZE_INDEX_8K, // HTTP2_FRAME_TYPE_DATA
- BUFFER_SIZE_INDEX_4K, // HTTP2_FRAME_TYPE_HEADERS
+ BUFFER_SIZE_INDEX_16K, // HTTP2_FRAME_TYPE_HEADERS
-1, // HTTP2_FRAME_TYPE_PRIORITY
BUFFER_SIZE_INDEX_128, // HTTP2_FRAME_TYPE_RST_STREAM
BUFFER_SIZE_INDEX_128, // HTTP2_FRAME_TYPE_SETTINGS
@@ -42,7 +42,7 @@ static const int buffer_size_index[HTTP2_FRAME_TYPE_MAX] = {
BUFFER_SIZE_INDEX_128, // HTTP2_FRAME_TYPE_PING
BUFFER_SIZE_INDEX_128, // HTTP2_FRAME_TYPE_GOAWAY
BUFFER_SIZE_INDEX_128, // HTTP2_FRAME_TYPE_WINDOW_UPDATE
- BUFFER_SIZE_INDEX_4K, // HTTP2_FRAME_TYPE_CONTINUATION
+ BUFFER_SIZE_INDEX_16K, // HTTP2_FRAME_TYPE_CONTINUATION
};
inline static unsigned