aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2015-02-10 09:36:08 -0800
committerGravatar Craig Tiller <ctiller@google.com>2015-02-10 09:36:08 -0800
commit9d972e4628d0331954eea2387c099ae736c73b58 (patch)
tree29450fa23e3b13813813c7a5901dda760a7b5cd5 /src/core
parent8ed7311e994b387208a4fbcdd4a11899d1115f93 (diff)
parentb2ec6afd08cb789b44b8fb1d90faa5f72e8cce75 (diff)
Merge github.com:grpc/grpc into c++api
Diffstat (limited to 'src/core')
-rw-r--r--src/core/transport/chttp2/hpack_table.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/core/transport/chttp2/hpack_table.c b/src/core/transport/chttp2/hpack_table.c
index 1b944232d8..f5c10f934b 100644
--- a/src/core/transport/chttp2/hpack_table.c
+++ b/src/core/transport/chttp2/hpack_table.c
@@ -164,7 +164,21 @@ void grpc_chttp2_hptbl_add(grpc_chttp2_hptbl *tbl, grpc_mdelem *md) {
GRPC_CHTTP2_HPACK_ENTRY_OVERHEAD;
/* we can't add elements bigger than the max table size */
- assert(elem_bytes <= tbl->max_bytes);
+ if (elem_bytes > tbl->max_bytes) {
+ /* HPACK draft 10 section 4.4 states:
+ * If the size of the new entry is less than or equal to the maximum
+ * size, that entry is added to the table. It is not an error to
+ * attempt to add an entry that is larger than the maximum size; an
+ * attempt to add an entry larger than the entire table causes
+ * the table
+ * to be emptied of all existing entries, and results in an
+ * empty table.
+ */
+ while (tbl->num_ents) {
+ evict1(tbl);
+ }
+ return;
+ }
/* evict entries to ensure no overflow */
while (elem_bytes > tbl->max_bytes - tbl->mem_used) {