grpc 0.12.0 → 0.13.0.pre1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
 - data/Makefile +5707 -22222
 - data/include/grpc/byte_buffer.h +2 -83
 - data/include/grpc/census.h +191 -121
 - data/include/grpc/compression.h +14 -38
 - data/include/grpc/grpc.h +88 -434
 - data/include/grpc/grpc_security.h +76 -46
 - data/include/grpc/grpc_zookeeper.h +1 -1
 - data/include/grpc/impl/codegen/alloc.h +74 -0
 - data/include/grpc/impl/codegen/atm.h +92 -0
 - data/include/grpc/impl/codegen/atm_gcc_atomic.h +72 -0
 - data/include/grpc/impl/codegen/atm_gcc_sync.h +87 -0
 - data/include/grpc/impl/codegen/atm_win32.h +125 -0
 - data/include/grpc/impl/codegen/byte_buffer.h +121 -0
 - data/include/grpc/impl/codegen/compression_types.h +73 -0
 - data/include/grpc/impl/codegen/connectivity_state.h +59 -0
 - data/include/grpc/impl/codegen/grpc_types.h +373 -0
 - data/include/grpc/impl/codegen/log.h +110 -0
 - data/include/grpc/impl/codegen/port_platform.h +362 -0
 - data/include/grpc/impl/codegen/propagation_bits.h +67 -0
 - data/include/grpc/impl/codegen/slice.h +182 -0
 - data/include/grpc/impl/codegen/slice_buffer.h +105 -0
 - data/include/grpc/impl/codegen/status.h +163 -0
 - data/include/grpc/impl/codegen/sync.h +316 -0
 - data/include/grpc/impl/codegen/sync_generic.h +55 -0
 - data/{src/core/census/context.h → include/grpc/impl/codegen/sync_posix.h} +11 -11
 - data/include/grpc/impl/codegen/sync_win32.h +49 -0
 - data/include/grpc/impl/codegen/time.h +132 -0
 - data/include/grpc/status.h +2 -126
 - data/include/grpc/support/alloc.h +2 -35
 - data/include/grpc/support/atm.h +2 -55
 - data/include/grpc/support/atm_gcc_atomic.h +5 -38
 - data/include/grpc/support/atm_gcc_sync.h +2 -50
 - data/include/grpc/support/atm_win32.h +2 -88
 - data/include/grpc/support/avl.h +7 -7
 - data/include/grpc/support/cmdline.h +15 -13
 - data/include/grpc/support/cpu.h +5 -3
 - data/include/grpc/support/histogram.h +23 -20
 - data/include/grpc/support/host_port.h +5 -3
 - data/include/grpc/support/log.h +2 -71
 - data/include/grpc/support/log_win32.h +2 -2
 - data/include/grpc/support/port_platform.h +2 -319
 - data/include/grpc/support/slice.h +2 -145
 - data/include/grpc/support/slice_buffer.h +2 -65
 - data/include/grpc/support/string_util.h +3 -3
 - data/include/grpc/support/subprocess.h +8 -6
 - data/include/grpc/support/sync.h +2 -278
 - data/include/grpc/support/sync_generic.h +2 -18
 - data/include/grpc/support/sync_posix.h +2 -10
 - data/include/grpc/support/sync_win32.h +2 -12
 - data/include/grpc/support/thd.h +11 -11
 - data/include/grpc/support/time.h +2 -91
 - data/include/grpc/support/tls.h +1 -1
 - data/include/grpc/support/tls_gcc.h +1 -1
 - data/include/grpc/support/tls_msvc.h +1 -1
 - data/include/grpc/support/tls_pthread.h +2 -2
 - data/src/boringssl/err_data.c +1252 -0
 - data/src/core/census/context.c +492 -8
 - data/src/core/census/grpc_filter.c +3 -3
 - data/src/core/census/initialize.c +4 -7
 - data/src/core/census/operation.c +2 -2
 - data/src/core/census/placeholders.c +109 -0
 - data/src/core/census/rpc_metric_id.h +6 -6
 - data/src/core/census/tracing.c +1 -1
 - data/src/core/channel/channel_args.c +4 -3
 - data/src/core/channel/channel_stack.c +1 -1
 - data/src/core/channel/client_channel.c +18 -14
 - data/src/core/channel/client_uchannel.c +3 -3
 - data/src/core/channel/compress_filter.c +8 -8
 - data/src/core/channel/http_client_filter.c +2 -2
 - data/src/core/channel/http_server_filter.c +9 -9
 - data/src/core/channel/subchannel_call_holder.c +12 -10
 - data/src/core/client_config/lb_policies/pick_first.c +49 -31
 - data/src/core/client_config/lb_policies/round_robin.c +7 -7
 - data/src/core/client_config/resolvers/dns_resolver.c +3 -3
 - data/src/core/client_config/resolvers/sockaddr_resolver.c +5 -5
 - data/src/core/client_config/subchannel.c +36 -25
 - data/src/core/compression/algorithm.c +3 -3
 - data/src/core/httpcli/format_request.c +1 -1
 - data/src/core/httpcli/httpcli.c +5 -5
 - data/src/core/httpcli/httpcli_security_connector.c +2 -3
 - data/src/core/httpcli/parser.c +7 -7
 - data/src/core/httpcli/parser.h +1 -1
 - data/src/core/iomgr/closure.c +7 -7
 - data/src/core/iomgr/closure.h +6 -5
 - data/src/core/iomgr/exec_ctx.c +12 -8
 - data/src/core/iomgr/exec_ctx.h +12 -5
 - data/src/core/iomgr/executor.c +4 -4
 - data/src/core/iomgr/executor.h +2 -2
 - data/src/core/iomgr/fd_posix.c +28 -17
 - data/src/core/iomgr/fd_posix.h +7 -4
 - data/src/core/iomgr/iocp_windows.c +6 -8
 - data/src/core/iomgr/pollset_multipoller_with_epoll.c +70 -5
 - data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +4 -2
 - data/src/core/iomgr/pollset_posix.c +15 -15
 - data/src/core/iomgr/pollset_posix.h +4 -2
 - data/src/core/iomgr/pollset_windows.c +3 -12
 - data/src/core/iomgr/resolve_address_posix.c +2 -2
 - data/src/core/iomgr/resolve_address_windows.c +2 -2
 - data/src/core/iomgr/sockaddr_utils.c +6 -6
 - data/src/core/iomgr/sockaddr_win32.h +1 -6
 - data/src/core/iomgr/tcp_client_posix.c +7 -7
 - data/src/core/iomgr/tcp_client_windows.c +4 -4
 - data/src/core/iomgr/tcp_posix.c +14 -8
 - data/src/core/iomgr/tcp_posix.h +7 -1
 - data/src/core/iomgr/tcp_server.h +40 -20
 - data/src/core/iomgr/tcp_server_posix.c +106 -49
 - data/src/core/iomgr/tcp_server_windows.c +98 -49
 - data/src/core/iomgr/tcp_windows.c +11 -15
 - data/src/core/iomgr/timer.c +8 -8
 - data/src/core/iomgr/timer.h +1 -1
 - data/src/core/iomgr/timer_heap.c +10 -10
 - data/src/core/iomgr/timer_heap.h +2 -2
 - data/src/core/iomgr/udp_server.c +2 -12
 - data/src/core/iomgr/udp_server.h +1 -9
 - data/src/core/iomgr/workqueue.h +2 -4
 - data/src/core/iomgr/workqueue_posix.c +3 -3
 - data/src/core/json/json_reader.c +11 -12
 - data/src/core/json/json_reader.h +4 -4
 - data/src/core/json/json_string.c +19 -19
 - data/src/core/json/json_writer.c +7 -9
 - data/src/core/profiling/basic_timers.c +1 -1
 - data/src/core/security/base64.c +9 -9
 - data/src/core/security/client_auth_filter.c +4 -4
 - data/src/core/security/credentials.c +5 -5
 - data/src/core/security/google_default_credentials.c +3 -3
 - data/src/core/security/handshake.c +6 -5
 - data/src/core/security/json_token.c +13 -7
 - data/src/core/security/jwt_verifier.c +3 -2
 - data/src/core/security/secure_endpoint.c +16 -16
 - data/src/core/security/security_connector.c +47 -17
 - data/src/core/security/security_connector.h +5 -5
 - data/src/core/security/server_auth_filter.c +3 -3
 - data/src/core/security/server_secure_chttp2.c +30 -31
 - data/src/core/statistics/census_interface.h +2 -2
 - data/src/core/statistics/census_rpc_stats.h +3 -3
 - data/src/core/support/alloc.c +1 -1
 - data/src/core/support/cpu_posix.c +2 -2
 - data/src/core/support/env_linux.c +12 -2
 - data/src/core/support/env_win32.c +15 -7
 - data/src/core/support/histogram.c +5 -5
 - data/src/core/support/log_posix.c +1 -1
 - data/src/core/support/log_win32.c +4 -3
 - data/src/core/support/murmur_hash.c +11 -11
 - data/src/core/support/murmur_hash.h +1 -1
 - data/src/core/support/slice.c +11 -11
 - data/src/core/support/slice_buffer.c +6 -6
 - data/src/core/support/stack_lockfree.c +20 -10
 - data/src/core/support/string.c +15 -15
 - data/src/core/support/string.h +5 -5
 - data/src/core/support/string_win32.c +5 -5
 - data/src/core/support/subprocess_windows.c +141 -0
 - data/src/core/support/sync.c +4 -4
 - data/src/core/support/sync_posix.c +2 -2
 - data/src/core/support/sync_win32.c +10 -5
 - data/src/core/support/time.c +29 -29
 - data/src/core/support/time_posix.c +15 -6
 - data/src/core/support/time_precise.c +2 -2
 - data/src/core/support/time_win32.c +18 -9
 - data/src/core/support/tls_pthread.c +1 -1
 - data/src/core/support/wrap_memcpy.c +53 -0
 - data/src/core/surface/alarm.c +83 -0
 - data/src/core/surface/byte_buffer_reader.c +1 -1
 - data/src/core/surface/call.c +78 -69
 - data/src/core/surface/call.h +2 -2
 - data/src/core/surface/call_test_only.h +2 -2
 - data/src/core/surface/channel.c +9 -9
 - data/src/core/surface/channel.h +1 -1
 - data/src/core/surface/channel_connectivity.c +3 -3
 - data/src/core/surface/channel_create.c +3 -3
 - data/src/core/surface/channel_ping.c +2 -2
 - data/src/core/surface/completion_queue.c +11 -12
 - data/src/core/surface/completion_queue.h +1 -1
 - data/src/core/surface/init.c +7 -5
 - data/src/core/surface/lame_client.c +3 -3
 - data/src/core/surface/secure_channel_create.c +3 -3
 - data/src/core/surface/server.c +28 -28
 - data/src/core/surface/server_chttp2.c +8 -8
 - data/src/core/surface/server_create.c +1 -4
 - data/src/core/surface/validate_metadata.c +3 -3
 - data/src/core/surface/version.c +2 -2
 - data/src/core/transport/byte_stream.c +8 -6
 - data/src/core/transport/byte_stream.h +6 -5
 - data/src/core/transport/chttp2/bin_encoder.c +29 -29
 - data/src/core/transport/chttp2/frame_data.c +29 -26
 - data/src/core/transport/chttp2/frame_data.h +6 -6
 - data/src/core/transport/chttp2/frame_goaway.c +30 -30
 - data/src/core/transport/chttp2/frame_goaway.h +6 -6
 - data/src/core/transport/chttp2/frame_ping.c +6 -6
 - data/src/core/transport/chttp2/frame_ping.h +5 -5
 - data/src/core/transport/chttp2/frame_rst_stream.c +18 -19
 - data/src/core/transport/chttp2/frame_rst_stream.h +4 -4
 - data/src/core/transport/chttp2/frame_settings.c +30 -30
 - data/src/core/transport/chttp2/frame_settings.h +13 -13
 - data/src/core/transport/chttp2/frame_window_update.c +17 -18
 - data/src/core/transport/chttp2/frame_window_update.h +5 -7
 - data/src/core/transport/chttp2/hpack_encoder.c +69 -73
 - data/src/core/transport/chttp2/hpack_encoder.h +16 -16
 - data/src/core/transport/chttp2/hpack_parser.c +167 -167
 - data/src/core/transport/chttp2/hpack_parser.h +16 -16
 - data/src/core/transport/chttp2/hpack_table.c +13 -13
 - data/src/core/transport/chttp2/hpack_table.h +11 -11
 - data/src/core/transport/chttp2/internal.h +97 -86
 - data/src/core/transport/chttp2/parsing.c +25 -25
 - data/src/core/transport/chttp2/stream_lists.c +26 -3
 - data/src/core/transport/chttp2/stream_map.c +13 -14
 - data/src/core/transport/chttp2/stream_map.h +6 -7
 - data/src/core/transport/chttp2/timeout_encoding.c +19 -16
 - data/src/core/transport/chttp2/varint.c +8 -9
 - data/src/core/transport/chttp2/varint.h +7 -8
 - data/src/core/transport/chttp2/writing.c +26 -23
 - data/src/core/transport/chttp2_transport.c +133 -92
 - data/src/core/transport/connectivity_state.c +6 -6
 - data/src/core/transport/metadata.c +18 -18
 - data/src/core/transport/metadata.h +5 -5
 - data/src/core/transport/static_metadata.c +15 -16
 - data/src/core/transport/static_metadata.h +5 -5
 - data/src/core/transport/transport.c +5 -5
 - data/src/core/transport/transport.h +14 -1
 - data/src/core/tsi/fake_transport_security.c +7 -7
 - data/src/core/tsi/ssl_transport_security.c +6 -4
 - data/src/core/tsi/ssl_types.h +55 -0
 - data/src/ruby/ext/grpc/extconf.rb +51 -14
 - data/src/ruby/ext/grpc/rb_byte_buffer.c +3 -1
 - data/src/ruby/ext/grpc/rb_call.c +6 -3
 - data/src/ruby/ext/grpc/rb_call_credentials.c +4 -0
 - data/src/ruby/ext/grpc/rb_channel.c +4 -2
 - data/src/ruby/ext/grpc/rb_channel_args.c +3 -1
 - data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -1
 - data/src/ruby/ext/grpc/rb_completion_queue.c +3 -1
 - data/src/ruby/ext/grpc/rb_event_thread.c +5 -0
 - data/src/ruby/ext/grpc/rb_grpc.c +11 -3
 - data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +560 -0
 - data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +843 -0
 - data/src/ruby/ext/grpc/rb_loader.c +72 -0
 - data/src/ruby/ext/grpc/rb_loader.h +40 -0
 - data/src/ruby/ext/grpc/rb_server.c +3 -1
 - data/src/ruby/ext/grpc/rb_server_credentials.c +4 -2
 - data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
 - data/src/ruby/lib/grpc/generic/rpc_desc.rb +1 -1
 - data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
 - data/src/ruby/lib/grpc/grpc.rb +34 -0
 - data/src/ruby/lib/grpc/version.rb +1 -1
 - data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
 - data/third_party/boringssl/crypto/aes/aes.c +1142 -0
 - data/third_party/boringssl/crypto/aes/internal.h +87 -0
 - data/third_party/boringssl/crypto/aes/mode_wrappers.c +108 -0
 - data/third_party/boringssl/crypto/asn1/a_bitstr.c +255 -0
 - data/third_party/boringssl/crypto/asn1/a_bool.c +112 -0
 - data/third_party/boringssl/crypto/asn1/a_bytes.c +317 -0
 - data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +286 -0
 - data/third_party/boringssl/crypto/asn1/a_dup.c +103 -0
 - data/third_party/boringssl/crypto/asn1/a_enum.c +183 -0
 - data/third_party/boringssl/crypto/asn1/a_gentm.c +255 -0
 - data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +154 -0
 - data/third_party/boringssl/crypto/asn1/a_int.c +456 -0
 - data/third_party/boringssl/crypto/asn1/a_mbstr.c +390 -0
 - data/third_party/boringssl/crypto/asn1/a_object.c +412 -0
 - data/third_party/boringssl/crypto/asn1/a_octet.c +70 -0
 - data/third_party/boringssl/crypto/asn1/a_print.c +119 -0
 - data/third_party/boringssl/crypto/asn1/a_strnid.c +286 -0
 - data/third_party/boringssl/crypto/asn1/a_time.c +221 -0
 - data/third_party/boringssl/crypto/asn1/a_type.c +160 -0
 - data/third_party/boringssl/crypto/asn1/a_utctm.c +342 -0
 - data/third_party/boringssl/crypto/asn1/a_utf8.c +210 -0
 - data/third_party/boringssl/crypto/asn1/asn1_lib.c +510 -0
 - data/third_party/boringssl/crypto/asn1/asn1_locl.h +73 -0
 - data/third_party/boringssl/crypto/asn1/asn1_par.c +444 -0
 - data/third_party/boringssl/crypto/asn1/asn_pack.c +104 -0
 - data/third_party/boringssl/crypto/asn1/bio_asn1.c +496 -0
 - data/third_party/boringssl/crypto/asn1/bio_ndef.c +254 -0
 - data/third_party/boringssl/crypto/asn1/f_enum.c +206 -0
 - data/third_party/boringssl/crypto/asn1/f_int.c +210 -0
 - data/third_party/boringssl/crypto/asn1/f_string.c +204 -0
 - data/third_party/boringssl/crypto/asn1/t_bitst.c +102 -0
 - data/third_party/boringssl/crypto/asn1/t_pkey.c +112 -0
 - data/third_party/boringssl/crypto/asn1/tasn_dec.c +1342 -0
 - data/third_party/boringssl/crypto/asn1/tasn_enc.c +695 -0
 - data/third_party/boringssl/crypto/asn1/tasn_fre.c +264 -0
 - data/third_party/boringssl/crypto/asn1/tasn_new.c +398 -0
 - data/third_party/boringssl/crypto/asn1/tasn_prn.c +642 -0
 - data/third_party/boringssl/crypto/asn1/tasn_typ.c +137 -0
 - data/third_party/boringssl/crypto/asn1/tasn_utl.c +266 -0
 - data/third_party/boringssl/crypto/asn1/x_bignum.c +143 -0
 - data/third_party/boringssl/crypto/asn1/x_long.c +182 -0
 - data/third_party/boringssl/crypto/base64/base64.c +478 -0
 - data/third_party/boringssl/crypto/bio/bio.c +608 -0
 - data/third_party/boringssl/crypto/bio/bio_mem.c +327 -0
 - data/third_party/boringssl/crypto/bio/buffer.c +496 -0
 - data/third_party/boringssl/crypto/bio/connect.c +544 -0
 - data/third_party/boringssl/crypto/bio/fd.c +270 -0
 - data/third_party/boringssl/crypto/bio/file.c +349 -0
 - data/third_party/boringssl/crypto/bio/hexdump.c +192 -0
 - data/third_party/boringssl/crypto/bio/internal.h +108 -0
 - data/third_party/boringssl/crypto/bio/pair.c +803 -0
 - data/third_party/boringssl/crypto/bio/printf.c +119 -0
 - data/third_party/boringssl/crypto/bio/socket.c +195 -0
 - data/third_party/boringssl/crypto/bio/socket_helper.c +113 -0
 - data/third_party/boringssl/crypto/bn/add.c +377 -0
 - data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +599 -0
 - data/third_party/boringssl/crypto/bn/bn.c +341 -0
 - data/third_party/boringssl/crypto/bn/bn_asn1.c +93 -0
 - data/third_party/boringssl/crypto/bn/cmp.c +200 -0
 - data/third_party/boringssl/crypto/bn/convert.c +597 -0
 - data/third_party/boringssl/crypto/bn/ctx.c +311 -0
 - data/third_party/boringssl/crypto/bn/div.c +625 -0
 - data/third_party/boringssl/crypto/bn/exponentiation.c +1544 -0
 - data/third_party/boringssl/crypto/bn/gcd.c +711 -0
 - data/third_party/boringssl/crypto/bn/generic.c +1019 -0
 - data/third_party/boringssl/crypto/bn/internal.h +294 -0
 - data/third_party/boringssl/crypto/bn/kronecker.c +175 -0
 - data/third_party/boringssl/crypto/bn/montgomery.c +561 -0
 - data/third_party/boringssl/crypto/bn/mul.c +888 -0
 - data/third_party/boringssl/crypto/bn/prime.c +845 -0
 - data/third_party/boringssl/crypto/bn/random.c +326 -0
 - data/third_party/boringssl/crypto/bn/rsaz_exp.c +326 -0
 - data/third_party/boringssl/crypto/bn/rsaz_exp.h +56 -0
 - data/third_party/boringssl/crypto/bn/shift.c +299 -0
 - data/third_party/boringssl/crypto/bn/sqrt.c +505 -0
 - data/third_party/boringssl/crypto/buf/buf.c +235 -0
 - data/third_party/boringssl/crypto/bytestring/ber.c +221 -0
 - data/third_party/boringssl/crypto/bytestring/cbb.c +411 -0
 - data/third_party/boringssl/crypto/bytestring/cbs.c +415 -0
 - data/third_party/boringssl/crypto/bytestring/internal.h +46 -0
 - data/third_party/boringssl/crypto/chacha/chacha_generic.c +140 -0
 - data/third_party/boringssl/crypto/chacha/chacha_vec.c +323 -0
 - data/third_party/boringssl/crypto/cipher/aead.c +167 -0
 - data/third_party/boringssl/crypto/cipher/cipher.c +652 -0
 - data/third_party/boringssl/crypto/cipher/derive_key.c +154 -0
 - data/third_party/boringssl/crypto/cipher/e_aes.c +1767 -0
 - data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +311 -0
 - data/third_party/boringssl/crypto/cipher/e_des.c +207 -0
 - data/third_party/boringssl/crypto/cipher/e_null.c +85 -0
 - data/third_party/boringssl/crypto/cipher/e_rc2.c +443 -0
 - data/third_party/boringssl/crypto/cipher/e_rc4.c +87 -0
 - data/third_party/boringssl/crypto/cipher/e_ssl3.c +463 -0
 - data/third_party/boringssl/crypto/cipher/e_tls.c +673 -0
 - data/third_party/boringssl/crypto/cipher/internal.h +164 -0
 - data/third_party/boringssl/crypto/cipher/tls_cbc.c +495 -0
 - data/third_party/boringssl/crypto/cmac/cmac.c +239 -0
 - data/third_party/boringssl/crypto/conf/conf.c +778 -0
 - data/third_party/boringssl/crypto/conf/conf_def.h +127 -0
 - data/third_party/boringssl/crypto/conf/internal.h +31 -0
 - data/third_party/boringssl/crypto/cpu-arm.c +199 -0
 - data/third_party/boringssl/crypto/cpu-intel.c +261 -0
 - data/third_party/boringssl/crypto/crypto.c +140 -0
 - data/third_party/boringssl/crypto/curve25519/curve25519.c +4897 -0
 - data/third_party/boringssl/crypto/des/des.c +771 -0
 - data/third_party/boringssl/crypto/des/internal.h +212 -0
 - data/third_party/boringssl/crypto/dh/check.c +180 -0
 - data/third_party/boringssl/crypto/dh/dh.c +463 -0
 - data/third_party/boringssl/crypto/dh/dh_asn1.c +84 -0
 - data/third_party/boringssl/crypto/dh/internal.h +80 -0
 - data/third_party/boringssl/crypto/dh/params.c +301 -0
 - data/third_party/boringssl/crypto/digest/digest.c +248 -0
 - data/third_party/boringssl/crypto/digest/digests.c +321 -0
 - data/third_party/boringssl/crypto/digest/internal.h +112 -0
 - data/third_party/boringssl/crypto/digest/md32_common.h +322 -0
 - data/third_party/boringssl/crypto/directory.h +66 -0
 - data/third_party/boringssl/crypto/directory_posix.c +108 -0
 - data/third_party/boringssl/crypto/directory_win.c +144 -0
 - data/third_party/boringssl/crypto/dsa/dsa.c +908 -0
 - data/third_party/boringssl/crypto/dsa/dsa_asn1.c +150 -0
 - data/third_party/boringssl/crypto/dsa/internal.h +78 -0
 - data/third_party/boringssl/crypto/ec/ec.c +889 -0
 - data/third_party/boringssl/crypto/ec/ec_asn1.c +586 -0
 - data/third_party/boringssl/crypto/ec/ec_key.c +482 -0
 - data/third_party/boringssl/crypto/ec/ec_montgomery.c +280 -0
 - data/third_party/boringssl/crypto/ec/internal.h +318 -0
 - data/third_party/boringssl/crypto/ec/oct.c +416 -0
 - data/third_party/boringssl/crypto/ec/p224-64.c +1305 -0
 - data/third_party/boringssl/crypto/ec/p256-64.c +1878 -0
 - data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +9548 -0
 - data/third_party/boringssl/crypto/ec/p256-x86_64.c +596 -0
 - data/third_party/boringssl/crypto/ec/simple.c +1313 -0
 - data/third_party/boringssl/crypto/ec/util-64.c +183 -0
 - data/third_party/boringssl/crypto/ec/wnaf.c +449 -0
 - data/third_party/boringssl/crypto/ecdh/ecdh.c +153 -0
 - data/third_party/boringssl/crypto/ecdsa/ecdsa.c +496 -0
 - data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +240 -0
 - data/third_party/boringssl/crypto/engine/engine.c +96 -0
 - data/third_party/boringssl/crypto/err/err.c +756 -0
 - data/third_party/boringssl/crypto/evp/algorithm.c +153 -0
 - data/third_party/boringssl/crypto/evp/digestsign.c +159 -0
 - data/third_party/boringssl/crypto/evp/evp.c +411 -0
 - data/third_party/boringssl/crypto/evp/evp_asn1.c +179 -0
 - data/third_party/boringssl/crypto/evp/evp_ctx.c +477 -0
 - data/third_party/boringssl/crypto/evp/internal.h +278 -0
 - data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +588 -0
 - data/third_party/boringssl/crypto/evp/p_ec.c +283 -0
 - data/third_party/boringssl/crypto/evp/p_ec_asn1.c +562 -0
 - data/third_party/boringssl/crypto/evp/p_rsa.c +596 -0
 - data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +737 -0
 - data/third_party/boringssl/crypto/evp/pbkdf.c +151 -0
 - data/third_party/boringssl/crypto/evp/sign.c +151 -0
 - data/third_party/boringssl/crypto/ex_data.c +294 -0
 - data/third_party/boringssl/crypto/hkdf/hkdf.c +89 -0
 - data/third_party/boringssl/crypto/hmac/hmac.c +213 -0
 - data/third_party/boringssl/crypto/internal.h +532 -0
 - data/third_party/boringssl/crypto/lhash/lhash.c +346 -0
 - data/third_party/boringssl/crypto/md4/md4.c +225 -0
 - data/third_party/boringssl/crypto/md5/md5.c +275 -0
 - data/third_party/boringssl/crypto/mem.c +200 -0
 - data/third_party/boringssl/crypto/modes/cbc.c +216 -0
 - data/third_party/boringssl/crypto/modes/cfb.c +231 -0
 - data/third_party/boringssl/crypto/modes/ctr.c +226 -0
 - data/third_party/boringssl/crypto/modes/gcm.c +1252 -0
 - data/third_party/boringssl/crypto/modes/internal.h +370 -0
 - data/third_party/boringssl/crypto/modes/ofb.c +108 -0
 - data/third_party/boringssl/crypto/obj/obj.c +664 -0
 - data/third_party/boringssl/crypto/obj/obj_dat.h +5257 -0
 - data/third_party/boringssl/crypto/obj/obj_xref.c +124 -0
 - data/third_party/boringssl/crypto/obj/obj_xref.h +96 -0
 - data/third_party/boringssl/crypto/pem/pem_all.c +281 -0
 - data/third_party/boringssl/crypto/pem/pem_info.c +404 -0
 - data/third_party/boringssl/crypto/pem/pem_lib.c +835 -0
 - data/third_party/boringssl/crypto/pem/pem_oth.c +89 -0
 - data/third_party/boringssl/crypto/pem/pem_pk8.c +244 -0
 - data/third_party/boringssl/crypto/pem/pem_pkey.c +312 -0
 - data/third_party/boringssl/crypto/pem/pem_x509.c +65 -0
 - data/third_party/boringssl/crypto/pem/pem_xaux.c +66 -0
 - data/third_party/boringssl/crypto/pkcs8/internal.h +83 -0
 - data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +150 -0
 - data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +440 -0
 - data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +85 -0
 - data/third_party/boringssl/crypto/pkcs8/pkcs8.c +1217 -0
 - data/third_party/boringssl/crypto/poly1305/poly1305.c +331 -0
 - data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +301 -0
 - data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +892 -0
 - data/third_party/boringssl/crypto/rand/internal.h +32 -0
 - data/third_party/boringssl/crypto/rand/rand.c +239 -0
 - data/third_party/boringssl/crypto/rand/urandom.c +223 -0
 - data/third_party/boringssl/crypto/rand/windows.c +56 -0
 - data/third_party/boringssl/crypto/rc4/rc4.c +283 -0
 - data/third_party/boringssl/crypto/refcount_c11.c +67 -0
 - data/third_party/boringssl/crypto/refcount_lock.c +53 -0
 - data/third_party/boringssl/crypto/rsa/blinding.c +462 -0
 - data/third_party/boringssl/crypto/rsa/internal.h +164 -0
 - data/third_party/boringssl/crypto/rsa/padding.c +711 -0
 - data/third_party/boringssl/crypto/rsa/rsa.c +808 -0
 - data/third_party/boringssl/crypto/rsa/rsa_asn1.c +473 -0
 - data/third_party/boringssl/crypto/rsa/rsa_impl.c +1138 -0
 - data/third_party/boringssl/crypto/sha/sha1.c +337 -0
 - data/third_party/boringssl/crypto/sha/sha256.c +327 -0
 - data/third_party/boringssl/crypto/sha/sha512.c +607 -0
 - data/third_party/boringssl/crypto/stack/stack.c +386 -0
 - data/third_party/boringssl/crypto/test/scoped_types.h +137 -0
 - data/third_party/boringssl/crypto/test/test_util.h +35 -0
 - data/third_party/boringssl/crypto/thread.c +101 -0
 - data/third_party/boringssl/crypto/thread_none.c +55 -0
 - data/third_party/boringssl/crypto/thread_pthread.c +167 -0
 - data/third_party/boringssl/crypto/thread_win.c +282 -0
 - data/third_party/boringssl/crypto/time_support.c +212 -0
 - data/third_party/boringssl/crypto/x509/a_digest.c +97 -0
 - data/third_party/boringssl/crypto/x509/a_sign.c +136 -0
 - data/third_party/boringssl/crypto/x509/a_strex.c +564 -0
 - data/third_party/boringssl/crypto/x509/a_verify.c +133 -0
 - data/third_party/boringssl/crypto/x509/asn1_gen.c +873 -0
 - data/third_party/boringssl/crypto/x509/by_dir.c +491 -0
 - data/third_party/boringssl/crypto/x509/by_file.c +295 -0
 - data/third_party/boringssl/crypto/x509/charmap.h +15 -0
 - data/third_party/boringssl/crypto/x509/i2d_pr.c +84 -0
 - data/third_party/boringssl/crypto/x509/pkcs7.c +353 -0
 - data/third_party/boringssl/crypto/x509/t_crl.c +129 -0
 - data/third_party/boringssl/crypto/x509/t_req.c +246 -0
 - data/third_party/boringssl/crypto/x509/t_x509.c +500 -0
 - data/third_party/boringssl/crypto/x509/t_x509a.c +109 -0
 - data/third_party/boringssl/crypto/x509/vpm_int.h +70 -0
 - data/third_party/boringssl/crypto/x509/x509.c +152 -0
 - data/third_party/boringssl/crypto/x509/x509_att.c +353 -0
 - data/third_party/boringssl/crypto/x509/x509_cmp.c +490 -0
 - data/third_party/boringssl/crypto/x509/x509_d2.c +105 -0
 - data/third_party/boringssl/crypto/x509/x509_def.c +88 -0
 - data/third_party/boringssl/crypto/x509/x509_ext.c +206 -0
 - data/third_party/boringssl/crypto/x509/x509_lu.c +738 -0
 - data/third_party/boringssl/crypto/x509/x509_obj.c +191 -0
 - data/third_party/boringssl/crypto/x509/x509_r2x.c +113 -0
 - data/third_party/boringssl/crypto/x509/x509_req.c +315 -0
 - data/third_party/boringssl/crypto/x509/x509_set.c +154 -0
 - data/third_party/boringssl/crypto/x509/x509_trs.c +304 -0
 - data/third_party/boringssl/crypto/x509/x509_txt.c +209 -0
 - data/third_party/boringssl/crypto/x509/x509_v3.c +271 -0
 - data/third_party/boringssl/crypto/x509/x509_vfy.c +2456 -0
 - data/third_party/boringssl/crypto/x509/x509_vpm.c +672 -0
 - data/third_party/boringssl/crypto/x509/x509cset.c +172 -0
 - data/third_party/boringssl/crypto/x509/x509name.c +381 -0
 - data/third_party/boringssl/crypto/x509/x509rset.c +80 -0
 - data/third_party/boringssl/crypto/x509/x509spki.c +135 -0
 - data/third_party/boringssl/crypto/x509/x509type.c +128 -0
 - data/third_party/boringssl/crypto/x509/x_algor.c +154 -0
 - data/third_party/boringssl/crypto/x509/x_all.c +547 -0
 - data/third_party/boringssl/crypto/x509/x_attrib.c +117 -0
 - data/third_party/boringssl/crypto/x509/x_crl.c +560 -0
 - data/third_party/boringssl/crypto/x509/x_exten.c +75 -0
 - data/third_party/boringssl/crypto/x509/x_info.c +95 -0
 - data/third_party/boringssl/crypto/x509/x_name.c +538 -0
 - data/third_party/boringssl/crypto/x509/x_pkey.c +100 -0
 - data/third_party/boringssl/crypto/x509/x_pubkey.c +384 -0
 - data/third_party/boringssl/crypto/x509/x_req.c +112 -0
 - data/third_party/boringssl/crypto/x509/x_sig.c +69 -0
 - data/third_party/boringssl/crypto/x509/x_spki.c +78 -0
 - data/third_party/boringssl/crypto/x509/x_val.c +69 -0
 - data/third_party/boringssl/crypto/x509/x_x509.c +227 -0
 - data/third_party/boringssl/crypto/x509/x_x509a.c +197 -0
 - data/third_party/boringssl/crypto/x509v3/ext_dat.h +129 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_cache.c +299 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_data.c +137 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_int.h +212 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_lib.c +165 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_map.c +133 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_node.c +197 -0
 - data/third_party/boringssl/crypto/x509v3/pcy_tree.c +876 -0
 - data/third_party/boringssl/crypto/x509v3/v3_akey.c +212 -0
 - data/third_party/boringssl/crypto/x509v3/v3_akeya.c +71 -0
 - data/third_party/boringssl/crypto/x509v3/v3_alt.c +622 -0
 - data/third_party/boringssl/crypto/x509v3/v3_bcons.c +126 -0
 - data/third_party/boringssl/crypto/x509v3/v3_bitst.c +141 -0
 - data/third_party/boringssl/crypto/x509v3/v3_conf.c +459 -0
 - data/third_party/boringssl/crypto/x509v3/v3_cpols.c +475 -0
 - data/third_party/boringssl/crypto/x509v3/v3_crld.c +616 -0
 - data/third_party/boringssl/crypto/x509v3/v3_enum.c +98 -0
 - data/third_party/boringssl/crypto/x509v3/v3_extku.c +145 -0
 - data/third_party/boringssl/crypto/x509v3/v3_genn.c +252 -0
 - data/third_party/boringssl/crypto/x509v3/v3_ia5.c +117 -0
 - data/third_party/boringssl/crypto/x509v3/v3_info.c +200 -0
 - data/third_party/boringssl/crypto/x509v3/v3_int.c +87 -0
 - data/third_party/boringssl/crypto/x509v3/v3_lib.c +335 -0
 - data/third_party/boringssl/crypto/x509v3/v3_ncons.c +510 -0
 - data/third_party/boringssl/crypto/x509v3/v3_pci.c +335 -0
 - data/third_party/boringssl/crypto/x509v3/v3_pcia.c +56 -0
 - data/third_party/boringssl/crypto/x509v3/v3_pcons.c +142 -0
 - data/third_party/boringssl/crypto/x509v3/v3_pku.c +109 -0
 - data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +156 -0
 - data/third_party/boringssl/crypto/x509v3/v3_prn.c +207 -0
 - data/third_party/boringssl/crypto/x509v3/v3_purp.c +805 -0
 - data/third_party/boringssl/crypto/x509v3/v3_skey.c +148 -0
 - data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +266 -0
 - data/third_party/boringssl/crypto/x509v3/v3_utl.c +1322 -0
 - data/third_party/boringssl/include/openssl/aead.h +346 -0
 - data/third_party/boringssl/include/openssl/aes.h +158 -0
 - data/third_party/boringssl/include/openssl/arm_arch.h +127 -0
 - data/third_party/boringssl/include/openssl/asn1.h +1168 -0
 - data/third_party/boringssl/include/openssl/asn1_mac.h +75 -0
 - data/third_party/boringssl/include/openssl/asn1t.h +906 -0
 - data/third_party/boringssl/include/openssl/base.h +261 -0
 - data/third_party/boringssl/include/openssl/base64.h +184 -0
 - data/third_party/boringssl/include/openssl/bio.h +902 -0
 - data/third_party/boringssl/include/openssl/blowfish.h +93 -0
 - data/third_party/boringssl/include/openssl/bn.h +885 -0
 - data/third_party/boringssl/include/openssl/buf.h +118 -0
 - data/third_party/boringssl/include/openssl/buffer.h +18 -0
 - data/third_party/boringssl/include/openssl/bytestring.h +360 -0
 - data/third_party/boringssl/include/openssl/cast.h +96 -0
 - data/third_party/boringssl/include/openssl/chacha.h +37 -0
 - data/third_party/boringssl/include/openssl/cipher.h +571 -0
 - data/third_party/boringssl/include/openssl/cmac.h +76 -0
 - data/third_party/boringssl/include/openssl/conf.h +145 -0
 - data/third_party/boringssl/include/openssl/cpu.h +184 -0
 - data/third_party/boringssl/include/openssl/crypto.h +68 -0
 - data/third_party/boringssl/include/openssl/curve25519.h +88 -0
 - data/third_party/boringssl/include/openssl/des.h +177 -0
 - data/third_party/boringssl/include/openssl/dh.h +238 -0
 - data/third_party/boringssl/include/openssl/digest.h +258 -0
 - data/third_party/boringssl/include/openssl/dsa.h +343 -0
 - data/third_party/boringssl/include/openssl/dtls1.h +16 -0
 - data/third_party/boringssl/include/openssl/ec.h +355 -0
 - data/third_party/boringssl/include/openssl/ec_key.h +280 -0
 - data/third_party/boringssl/include/openssl/ecdh.h +102 -0
 - data/third_party/boringssl/include/openssl/ecdsa.h +206 -0
 - data/third_party/boringssl/include/openssl/engine.h +98 -0
 - data/third_party/boringssl/include/openssl/err.h +487 -0
 - data/third_party/boringssl/include/openssl/evp.h +750 -0
 - data/third_party/boringssl/include/openssl/ex_data.h +213 -0
 - data/third_party/boringssl/include/openssl/hkdf.h +44 -0
 - data/third_party/boringssl/include/openssl/hmac.h +160 -0
 - data/third_party/boringssl/include/openssl/lhash.h +192 -0
 - data/third_party/boringssl/include/openssl/lhash_macros.h +132 -0
 - data/third_party/boringssl/include/openssl/md4.h +102 -0
 - data/third_party/boringssl/include/openssl/md5.h +107 -0
 - data/third_party/boringssl/include/openssl/mem.h +140 -0
 - data/third_party/boringssl/include/openssl/obj.h +198 -0
 - data/third_party/boringssl/include/openssl/obj_mac.h +4140 -0
 - data/third_party/boringssl/include/openssl/objects.h +18 -0
 - data/third_party/boringssl/include/openssl/opensslfeatures.h +60 -0
 - data/third_party/boringssl/include/openssl/opensslv.h +18 -0
 - data/third_party/boringssl/include/openssl/ossl_typ.h +18 -0
 - data/third_party/boringssl/include/openssl/pem.h +521 -0
 - data/third_party/boringssl/include/openssl/pkcs12.h +18 -0
 - data/third_party/boringssl/include/openssl/pkcs7.h +16 -0
 - data/third_party/boringssl/include/openssl/pkcs8.h +220 -0
 - data/third_party/boringssl/include/openssl/poly1305.h +51 -0
 - data/third_party/boringssl/include/openssl/pqueue.h +146 -0
 - data/third_party/boringssl/include/openssl/rand.h +113 -0
 - data/third_party/boringssl/include/openssl/rc4.h +90 -0
 - data/third_party/boringssl/include/openssl/rsa.h +637 -0
 - data/third_party/boringssl/include/openssl/safestack.h +16 -0
 - data/third_party/boringssl/include/openssl/sha.h +256 -0
 - data/third_party/boringssl/include/openssl/srtp.h +18 -0
 - data/third_party/boringssl/include/openssl/ssl.h +4466 -0
 - data/third_party/boringssl/include/openssl/ssl3.h +441 -0
 - data/third_party/boringssl/include/openssl/stack.h +298 -0
 - data/third_party/boringssl/include/openssl/stack_macros.h +4190 -0
 - data/third_party/boringssl/include/openssl/thread.h +173 -0
 - data/third_party/boringssl/include/openssl/time_support.h +90 -0
 - data/third_party/boringssl/include/openssl/tls1.h +653 -0
 - data/third_party/boringssl/include/openssl/type_check.h +91 -0
 - data/third_party/boringssl/include/openssl/x509.h +1258 -0
 - data/third_party/boringssl/include/openssl/x509_vfy.h +611 -0
 - data/third_party/boringssl/include/openssl/x509v3.h +798 -0
 - data/third_party/boringssl/ssl/custom_extensions.c +257 -0
 - data/third_party/boringssl/ssl/d1_both.c +880 -0
 - data/third_party/boringssl/ssl/d1_clnt.c +566 -0
 - data/third_party/boringssl/ssl/d1_lib.c +340 -0
 - data/third_party/boringssl/ssl/d1_meth.c +130 -0
 - data/third_party/boringssl/ssl/d1_pkt.c +578 -0
 - data/third_party/boringssl/ssl/d1_srtp.c +234 -0
 - data/third_party/boringssl/ssl/d1_srvr.c +485 -0
 - data/third_party/boringssl/ssl/dtls_record.c +308 -0
 - data/third_party/boringssl/ssl/internal.h +1276 -0
 - data/third_party/boringssl/ssl/pqueue/pqueue.c +197 -0
 - data/third_party/boringssl/ssl/s3_both.c +571 -0
 - data/third_party/boringssl/ssl/s3_clnt.c +2241 -0
 - data/third_party/boringssl/ssl/s3_enc.c +494 -0
 - data/third_party/boringssl/ssl/s3_lib.c +587 -0
 - data/third_party/boringssl/ssl/s3_meth.c +166 -0
 - data/third_party/boringssl/ssl/s3_pkt.c +732 -0
 - data/third_party/boringssl/ssl/s3_srvr.c +2536 -0
 - data/third_party/boringssl/ssl/ssl_aead_ctx.c +300 -0
 - data/third_party/boringssl/ssl/ssl_asn1.c +718 -0
 - data/third_party/boringssl/ssl/ssl_buffer.c +319 -0
 - data/third_party/boringssl/ssl/ssl_cert.c +539 -0
 - data/third_party/boringssl/ssl/ssl_cipher.c +2003 -0
 - data/third_party/boringssl/ssl/ssl_file.c +633 -0
 - data/third_party/boringssl/ssl/ssl_lib.c +2653 -0
 - data/third_party/boringssl/ssl/ssl_rsa.c +423 -0
 - data/third_party/boringssl/ssl/ssl_session.c +764 -0
 - data/third_party/boringssl/ssl/ssl_stat.c +591 -0
 - data/third_party/boringssl/ssl/t1_enc.c +708 -0
 - data/third_party/boringssl/ssl/t1_lib.c +2905 -0
 - data/third_party/boringssl/ssl/test/async_bio.h +45 -0
 - data/third_party/boringssl/ssl/test/packeted_bio.h +44 -0
 - data/third_party/boringssl/ssl/test/scoped_types.h +28 -0
 - data/third_party/boringssl/ssl/test/test_config.h +108 -0
 - data/third_party/boringssl/ssl/tls_record.c +342 -0
 - data/third_party/zlib/adler32.c +179 -0
 - data/third_party/zlib/compress.c +80 -0
 - data/third_party/zlib/crc32.c +425 -0
 - data/third_party/zlib/crc32.h +441 -0
 - data/third_party/zlib/deflate.c +1967 -0
 - data/third_party/zlib/deflate.h +346 -0
 - data/third_party/zlib/gzclose.c +25 -0
 - data/third_party/zlib/gzguts.h +209 -0
 - data/third_party/zlib/gzlib.c +634 -0
 - data/third_party/zlib/gzread.c +594 -0
 - data/third_party/zlib/gzwrite.c +577 -0
 - data/third_party/zlib/infback.c +640 -0
 - data/third_party/zlib/inffast.c +340 -0
 - data/third_party/zlib/inffast.h +11 -0
 - data/third_party/zlib/inffixed.h +94 -0
 - data/third_party/zlib/inflate.c +1512 -0
 - data/third_party/zlib/inflate.h +122 -0
 - data/third_party/zlib/inftrees.c +306 -0
 - data/third_party/zlib/inftrees.h +62 -0
 - data/third_party/zlib/trees.c +1226 -0
 - data/third_party/zlib/trees.h +128 -0
 - data/third_party/zlib/uncompr.c +59 -0
 - data/third_party/zlib/zconf.h +511 -0
 - data/third_party/zlib/zlib.h +1768 -0
 - data/third_party/zlib/zutil.c +324 -0
 - data/third_party/zlib/zutil.h +253 -0
 - metadata +492 -25
 - data/Rakefile +0 -63
 - data/src/ruby/lib/grpc/grpc.so +0 -0
 
| 
         @@ -70,39 +70,38 @@ typedef struct { 
     | 
|
| 
       70 
70 
     | 
    
         
             
              /* index (in output) of the header for the current frame */
         
     | 
| 
       71 
71 
     | 
    
         
             
              size_t header_idx;
         
     | 
| 
       72 
72 
     | 
    
         
             
              /* have we seen a regular (non-colon-prefixed) header yet? */
         
     | 
| 
       73 
     | 
    
         
            -
               
     | 
| 
      
 73 
     | 
    
         
            +
              uint8_t seen_regular_header;
         
     | 
| 
       74 
74 
     | 
    
         
             
              /* output stream id */
         
     | 
| 
       75 
     | 
    
         
            -
               
     | 
| 
      
 75 
     | 
    
         
            +
              uint32_t stream_id;
         
     | 
| 
       76 
76 
     | 
    
         
             
              gpr_slice_buffer *output;
         
     | 
| 
       77 
77 
     | 
    
         
             
            } framer_state;
         
     | 
| 
       78 
78 
     | 
    
         | 
| 
       79 
79 
     | 
    
         
             
            /* fills p (which is expected to be 9 bytes long) with a data frame header */
         
     | 
| 
       80 
     | 
    
         
            -
            static void fill_header( 
     | 
| 
       81 
     | 
    
         
            -
                                     
     | 
| 
      
 80 
     | 
    
         
            +
            static void fill_header(uint8_t *p, uint8_t type, uint32_t id, size_t len,
         
     | 
| 
      
 81 
     | 
    
         
            +
                                    uint8_t flags) {
         
     | 
| 
       82 
82 
     | 
    
         
             
              GPR_ASSERT(len < 16777316);
         
     | 
| 
       83 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
       84 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
       85 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
      
 83 
     | 
    
         
            +
              *p++ = (uint8_t)(len >> 16);
         
     | 
| 
      
 84 
     | 
    
         
            +
              *p++ = (uint8_t)(len >> 8);
         
     | 
| 
      
 85 
     | 
    
         
            +
              *p++ = (uint8_t)(len);
         
     | 
| 
       86 
86 
     | 
    
         
             
              *p++ = type;
         
     | 
| 
       87 
87 
     | 
    
         
             
              *p++ = flags;
         
     | 
| 
       88 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
       89 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
       90 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
       91 
     | 
    
         
            -
              *p++ = ( 
     | 
| 
      
 88 
     | 
    
         
            +
              *p++ = (uint8_t)(id >> 24);
         
     | 
| 
      
 89 
     | 
    
         
            +
              *p++ = (uint8_t)(id >> 16);
         
     | 
| 
      
 90 
     | 
    
         
            +
              *p++ = (uint8_t)(id >> 8);
         
     | 
| 
      
 91 
     | 
    
         
            +
              *p++ = (uint8_t)(id);
         
     | 
| 
       92 
92 
     | 
    
         
             
            }
         
     | 
| 
       93 
93 
     | 
    
         | 
| 
       94 
94 
     | 
    
         
             
            /* finish a frame - fill in the previously reserved header */
         
     | 
| 
       95 
95 
     | 
    
         
             
            static void finish_frame(framer_state *st, int is_header_boundary,
         
     | 
| 
       96 
96 
     | 
    
         
             
                                     int is_last_in_stream) {
         
     | 
| 
       97 
     | 
    
         
            -
               
     | 
| 
      
 97 
     | 
    
         
            +
              uint8_t type = 0xff;
         
     | 
| 
       98 
98 
     | 
    
         
             
              type = st->is_first_frame ? GRPC_CHTTP2_FRAME_HEADER
         
     | 
| 
       99 
99 
     | 
    
         
             
                                        : GRPC_CHTTP2_FRAME_CONTINUATION;
         
     | 
| 
       100 
100 
     | 
    
         
             
              fill_header(
         
     | 
| 
       101 
101 
     | 
    
         
             
                  GPR_SLICE_START_PTR(st->output->slices[st->header_idx]), type,
         
     | 
| 
       102 
102 
     | 
    
         
             
                  st->stream_id, st->output->length - st->output_length_at_start_of_frame,
         
     | 
| 
       103 
     | 
    
         
            -
                  ( 
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
     | 
    
         
            -
                      (is_header_boundary ? GRPC_CHTTP2_DATA_FLAG_END_HEADERS : 0)));
         
     | 
| 
      
 103 
     | 
    
         
            +
                  (uint8_t)((is_last_in_stream ? GRPC_CHTTP2_DATA_FLAG_END_STREAM : 0) |
         
     | 
| 
      
 104 
     | 
    
         
            +
                            (is_header_boundary ? GRPC_CHTTP2_DATA_FLAG_END_HEADERS : 0)));
         
     | 
| 
       106 
105 
     | 
    
         
             
              st->is_first_frame = 0;
         
     | 
| 
       107 
106 
     | 
    
         
             
            }
         
     | 
| 
       108 
107 
     | 
    
         | 
| 
         @@ -127,7 +126,7 @@ static void ensure_space(framer_state *st, size_t need_bytes) { 
     | 
|
| 
       127 
126 
     | 
    
         
             
            }
         
     | 
| 
       128 
127 
     | 
    
         | 
| 
       129 
128 
     | 
    
         
             
            /* increment a filter count, halve all counts if one element reaches max */
         
     | 
| 
       130 
     | 
    
         
            -
            static void inc_filter( 
     | 
| 
      
 129 
     | 
    
         
            +
            static void inc_filter(uint8_t idx, uint32_t *sum, uint8_t *elems) {
         
     | 
| 
       131 
130 
     | 
    
         
             
              elems[idx]++;
         
     | 
| 
       132 
131 
     | 
    
         
             
              if (elems[idx] < 255) {
         
     | 
| 
       133 
132 
     | 
    
         
             
                (*sum)++;
         
     | 
| 
         @@ -157,7 +156,7 @@ static void add_header_data(framer_state *st, gpr_slice slice) { 
     | 
|
| 
       157 
156 
     | 
    
         
             
              }
         
     | 
| 
       158 
157 
     | 
    
         
             
            }
         
     | 
| 
       159 
158 
     | 
    
         | 
| 
       160 
     | 
    
         
            -
            static  
     | 
| 
      
 159 
     | 
    
         
            +
            static uint8_t *add_tiny_header_data(framer_state *st, size_t len) {
         
     | 
| 
       161 
160 
     | 
    
         
             
              ensure_space(st, len);
         
     | 
| 
       162 
161 
     | 
    
         
             
              return gpr_slice_buffer_tiny_add(st->output, len);
         
     | 
| 
       163 
162 
     | 
    
         
             
            }
         
     | 
| 
         @@ -168,17 +167,17 @@ static void evict_entry(grpc_chttp2_hpack_compressor *c) { 
     | 
|
| 
       168 
167 
     | 
    
         
             
              GPR_ASSERT(c->table_size >=
         
     | 
| 
       169 
168 
     | 
    
         
             
                         c->table_elem_size[c->tail_remote_index % c->cap_table_elems]);
         
     | 
| 
       170 
169 
     | 
    
         
             
              GPR_ASSERT(c->table_elems > 0);
         
     | 
| 
       171 
     | 
    
         
            -
              c->table_size = 
     | 
| 
       172 
     | 
    
         
            -
                  c->table_size -
         
     | 
| 
       173 
     | 
    
         
            -
             
     | 
| 
      
 170 
     | 
    
         
            +
              c->table_size =
         
     | 
| 
      
 171 
     | 
    
         
            +
                  (uint16_t)(c->table_size -
         
     | 
| 
      
 172 
     | 
    
         
            +
                             c->table_elem_size[c->tail_remote_index % c->cap_table_elems]);
         
     | 
| 
       174 
173 
     | 
    
         
             
              c->table_elems--;
         
     | 
| 
       175 
174 
     | 
    
         
             
            }
         
     | 
| 
       176 
175 
     | 
    
         | 
| 
       177 
176 
     | 
    
         
             
            /* add an element to the decoder table */
         
     | 
| 
       178 
177 
     | 
    
         
             
            static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) {
         
     | 
| 
       179 
     | 
    
         
            -
               
     | 
| 
       180 
     | 
    
         
            -
               
     | 
| 
       181 
     | 
    
         
            -
               
     | 
| 
      
 178 
     | 
    
         
            +
              uint32_t key_hash = elem->key->hash;
         
     | 
| 
      
 179 
     | 
    
         
            +
              uint32_t elem_hash = GRPC_MDSTR_KV_HASH(key_hash, elem->value->hash);
         
     | 
| 
      
 180 
     | 
    
         
            +
              uint32_t new_index = c->tail_remote_index + c->table_elems + 1;
         
     | 
| 
       182 
181 
     | 
    
         
             
              size_t elem_size = 32 + GPR_SLICE_LENGTH(elem->key->slice) +
         
     | 
| 
       183 
182 
     | 
    
         
             
                                 GPR_SLICE_LENGTH(elem->value->slice);
         
     | 
| 
       184 
183 
     | 
    
         | 
| 
         @@ -198,8 +197,8 @@ static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) { 
     | 
|
| 
       198 
197 
     | 
    
         
             
                evict_entry(c);
         
     | 
| 
       199 
198 
     | 
    
         
             
              }
         
     | 
| 
       200 
199 
     | 
    
         
             
              GPR_ASSERT(c->table_elems < c->max_table_size);
         
     | 
| 
       201 
     | 
    
         
            -
              c->table_elem_size[new_index % c->cap_table_elems] = ( 
     | 
| 
       202 
     | 
    
         
            -
              c->table_size = ( 
     | 
| 
      
 200 
     | 
    
         
            +
              c->table_elem_size[new_index % c->cap_table_elems] = (uint16_t)elem_size;
         
     | 
| 
      
 201 
     | 
    
         
            +
              c->table_size = (uint16_t)(c->table_size + elem_size);
         
     | 
| 
       203 
202 
     | 
    
         
             
              c->table_elems++;
         
     | 
| 
       204 
203 
     | 
    
         | 
| 
       205 
204 
     | 
    
         
             
              /* Store this element into {entries,indices}_elem */
         
     | 
| 
         @@ -254,14 +253,14 @@ static void add_elem(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem) { 
     | 
|
| 
       254 
253 
     | 
    
         
             
              }
         
     | 
| 
       255 
254 
     | 
    
         
             
            }
         
     | 
| 
       256 
255 
     | 
    
         | 
| 
       257 
     | 
    
         
            -
            static void emit_indexed(grpc_chttp2_hpack_compressor *c,  
     | 
| 
      
 256 
     | 
    
         
            +
            static void emit_indexed(grpc_chttp2_hpack_compressor *c, uint32_t elem_index,
         
     | 
| 
       258 
257 
     | 
    
         
             
                                     framer_state *st) {
         
     | 
| 
       259 
     | 
    
         
            -
               
     | 
| 
      
 258 
     | 
    
         
            +
              uint32_t len = GRPC_CHTTP2_VARINT_LENGTH(elem_index, 1);
         
     | 
| 
       260 
259 
     | 
    
         
             
              GRPC_CHTTP2_WRITE_VARINT(elem_index, 1, 0x80, add_tiny_header_data(st, len),
         
     | 
| 
       261 
260 
     | 
    
         
             
                                       len);
         
     | 
| 
       262 
261 
     | 
    
         
             
            }
         
     | 
| 
       263 
262 
     | 
    
         | 
| 
       264 
     | 
    
         
            -
            static gpr_slice get_wire_value(grpc_mdelem *elem,  
     | 
| 
      
 263 
     | 
    
         
            +
            static gpr_slice get_wire_value(grpc_mdelem *elem, uint8_t *huffman_prefix) {
         
     | 
| 
       265 
264 
     | 
    
         
             
              if (grpc_is_binary_header((const char *)GPR_SLICE_START_PTR(elem->key->slice),
         
     | 
| 
       266 
265 
     | 
    
         
             
                                        GPR_SLICE_LENGTH(elem->key->slice))) {
         
     | 
| 
       267 
266 
     | 
    
         
             
                *huffman_prefix = 0x80;
         
     | 
| 
         @@ -273,49 +272,49 @@ static gpr_slice get_wire_value(grpc_mdelem *elem, gpr_uint8 *huffman_prefix) { 
     | 
|
| 
       273 
272 
     | 
    
         
             
            }
         
     | 
| 
       274 
273 
     | 
    
         | 
| 
       275 
274 
     | 
    
         
             
            static void emit_lithdr_incidx(grpc_chttp2_hpack_compressor *c,
         
     | 
| 
       276 
     | 
    
         
            -
                                            
     | 
| 
      
 275 
     | 
    
         
            +
                                           uint32_t key_index, grpc_mdelem *elem,
         
     | 
| 
       277 
276 
     | 
    
         
             
                                           framer_state *st) {
         
     | 
| 
       278 
     | 
    
         
            -
               
     | 
| 
       279 
     | 
    
         
            -
               
     | 
| 
      
 277 
     | 
    
         
            +
              uint32_t len_pfx = GRPC_CHTTP2_VARINT_LENGTH(key_index, 2);
         
     | 
| 
      
 278 
     | 
    
         
            +
              uint8_t huffman_prefix;
         
     | 
| 
       280 
279 
     | 
    
         
             
              gpr_slice value_slice = get_wire_value(elem, &huffman_prefix);
         
     | 
| 
       281 
280 
     | 
    
         
             
              size_t len_val = GPR_SLICE_LENGTH(value_slice);
         
     | 
| 
       282 
     | 
    
         
            -
               
     | 
| 
       283 
     | 
    
         
            -
              GPR_ASSERT(len_val <=  
     | 
| 
       284 
     | 
    
         
            -
              len_val_len = GRPC_CHTTP2_VARINT_LENGTH(( 
     | 
| 
      
 281 
     | 
    
         
            +
              uint32_t len_val_len;
         
     | 
| 
      
 282 
     | 
    
         
            +
              GPR_ASSERT(len_val <= UINT32_MAX);
         
     | 
| 
      
 283 
     | 
    
         
            +
              len_val_len = GRPC_CHTTP2_VARINT_LENGTH((uint32_t)len_val, 1);
         
     | 
| 
       285 
284 
     | 
    
         
             
              GRPC_CHTTP2_WRITE_VARINT(key_index, 2, 0x40,
         
     | 
| 
       286 
285 
     | 
    
         
             
                                       add_tiny_header_data(st, len_pfx), len_pfx);
         
     | 
| 
       287 
     | 
    
         
            -
              GRPC_CHTTP2_WRITE_VARINT(( 
     | 
| 
      
 286 
     | 
    
         
            +
              GRPC_CHTTP2_WRITE_VARINT((uint32_t)len_val, 1, huffman_prefix,
         
     | 
| 
       288 
287 
     | 
    
         
             
                                       add_tiny_header_data(st, len_val_len), len_val_len);
         
     | 
| 
       289 
288 
     | 
    
         
             
              add_header_data(st, gpr_slice_ref(value_slice));
         
     | 
| 
       290 
289 
     | 
    
         
             
            }
         
     | 
| 
       291 
290 
     | 
    
         | 
| 
       292 
291 
     | 
    
         
             
            static void emit_lithdr_noidx(grpc_chttp2_hpack_compressor *c,
         
     | 
| 
       293 
     | 
    
         
            -
                                           
     | 
| 
      
 292 
     | 
    
         
            +
                                          uint32_t key_index, grpc_mdelem *elem,
         
     | 
| 
       294 
293 
     | 
    
         
             
                                          framer_state *st) {
         
     | 
| 
       295 
     | 
    
         
            -
               
     | 
| 
       296 
     | 
    
         
            -
               
     | 
| 
      
 294 
     | 
    
         
            +
              uint32_t len_pfx = GRPC_CHTTP2_VARINT_LENGTH(key_index, 4);
         
     | 
| 
      
 295 
     | 
    
         
            +
              uint8_t huffman_prefix;
         
     | 
| 
       297 
296 
     | 
    
         
             
              gpr_slice value_slice = get_wire_value(elem, &huffman_prefix);
         
     | 
| 
       298 
297 
     | 
    
         
             
              size_t len_val = GPR_SLICE_LENGTH(value_slice);
         
     | 
| 
       299 
     | 
    
         
            -
               
     | 
| 
       300 
     | 
    
         
            -
              GPR_ASSERT(len_val <=  
     | 
| 
       301 
     | 
    
         
            -
              len_val_len = GRPC_CHTTP2_VARINT_LENGTH(( 
     | 
| 
      
 298 
     | 
    
         
            +
              uint32_t len_val_len;
         
     | 
| 
      
 299 
     | 
    
         
            +
              GPR_ASSERT(len_val <= UINT32_MAX);
         
     | 
| 
      
 300 
     | 
    
         
            +
              len_val_len = GRPC_CHTTP2_VARINT_LENGTH((uint32_t)len_val, 1);
         
     | 
| 
       302 
301 
     | 
    
         
             
              GRPC_CHTTP2_WRITE_VARINT(key_index, 4, 0x00,
         
     | 
| 
       303 
302 
     | 
    
         
             
                                       add_tiny_header_data(st, len_pfx), len_pfx);
         
     | 
| 
       304 
     | 
    
         
            -
              GRPC_CHTTP2_WRITE_VARINT(( 
     | 
| 
      
 303 
     | 
    
         
            +
              GRPC_CHTTP2_WRITE_VARINT((uint32_t)len_val, 1, huffman_prefix,
         
     | 
| 
       305 
304 
     | 
    
         
             
                                       add_tiny_header_data(st, len_val_len), len_val_len);
         
     | 
| 
       306 
305 
     | 
    
         
             
              add_header_data(st, gpr_slice_ref(value_slice));
         
     | 
| 
       307 
306 
     | 
    
         
             
            }
         
     | 
| 
       308 
307 
     | 
    
         | 
| 
       309 
308 
     | 
    
         
             
            static void emit_lithdr_incidx_v(grpc_chttp2_hpack_compressor *c,
         
     | 
| 
       310 
309 
     | 
    
         
             
                                             grpc_mdelem *elem, framer_state *st) {
         
     | 
| 
       311 
     | 
    
         
            -
               
     | 
| 
       312 
     | 
    
         
            -
               
     | 
| 
      
 310 
     | 
    
         
            +
              uint32_t len_key = (uint32_t)GPR_SLICE_LENGTH(elem->key->slice);
         
     | 
| 
      
 311 
     | 
    
         
            +
              uint8_t huffman_prefix;
         
     | 
| 
       313 
312 
     | 
    
         
             
              gpr_slice value_slice = get_wire_value(elem, &huffman_prefix);
         
     | 
| 
       314 
     | 
    
         
            -
               
     | 
| 
       315 
     | 
    
         
            -
               
     | 
| 
       316 
     | 
    
         
            -
               
     | 
| 
       317 
     | 
    
         
            -
              GPR_ASSERT(len_key <=  
     | 
| 
       318 
     | 
    
         
            -
              GPR_ASSERT(GPR_SLICE_LENGTH(value_slice) <=  
     | 
| 
      
 313 
     | 
    
         
            +
              uint32_t len_val = (uint32_t)GPR_SLICE_LENGTH(value_slice);
         
     | 
| 
      
 314 
     | 
    
         
            +
              uint32_t len_key_len = GRPC_CHTTP2_VARINT_LENGTH(len_key, 1);
         
     | 
| 
      
 315 
     | 
    
         
            +
              uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
         
     | 
| 
      
 316 
     | 
    
         
            +
              GPR_ASSERT(len_key <= UINT32_MAX);
         
     | 
| 
      
 317 
     | 
    
         
            +
              GPR_ASSERT(GPR_SLICE_LENGTH(value_slice) <= UINT32_MAX);
         
     | 
| 
       319 
318 
     | 
    
         
             
              *add_tiny_header_data(st, 1) = 0x40;
         
     | 
| 
       320 
319 
     | 
    
         
             
              GRPC_CHTTP2_WRITE_VARINT(len_key, 1, 0x00,
         
     | 
| 
       321 
320 
     | 
    
         
             
                                       add_tiny_header_data(st, len_key_len), len_key_len);
         
     | 
| 
         @@ -327,14 +326,14 @@ static void emit_lithdr_incidx_v(grpc_chttp2_hpack_compressor *c, 
     | 
|
| 
       327 
326 
     | 
    
         | 
| 
       328 
327 
     | 
    
         
             
            static void emit_lithdr_noidx_v(grpc_chttp2_hpack_compressor *c,
         
     | 
| 
       329 
328 
     | 
    
         
             
                                            grpc_mdelem *elem, framer_state *st) {
         
     | 
| 
       330 
     | 
    
         
            -
               
     | 
| 
       331 
     | 
    
         
            -
               
     | 
| 
      
 329 
     | 
    
         
            +
              uint32_t len_key = (uint32_t)GPR_SLICE_LENGTH(elem->key->slice);
         
     | 
| 
      
 330 
     | 
    
         
            +
              uint8_t huffman_prefix;
         
     | 
| 
       332 
331 
     | 
    
         
             
              gpr_slice value_slice = get_wire_value(elem, &huffman_prefix);
         
     | 
| 
       333 
     | 
    
         
            -
               
     | 
| 
       334 
     | 
    
         
            -
               
     | 
| 
       335 
     | 
    
         
            -
               
     | 
| 
       336 
     | 
    
         
            -
              GPR_ASSERT(len_key <=  
     | 
| 
       337 
     | 
    
         
            -
              GPR_ASSERT(GPR_SLICE_LENGTH(value_slice) <=  
     | 
| 
      
 332 
     | 
    
         
            +
              uint32_t len_val = (uint32_t)GPR_SLICE_LENGTH(value_slice);
         
     | 
| 
      
 333 
     | 
    
         
            +
              uint32_t len_key_len = GRPC_CHTTP2_VARINT_LENGTH(len_key, 1);
         
     | 
| 
      
 334 
     | 
    
         
            +
              uint32_t len_val_len = GRPC_CHTTP2_VARINT_LENGTH(len_val, 1);
         
     | 
| 
      
 335 
     | 
    
         
            +
              GPR_ASSERT(len_key <= UINT32_MAX);
         
     | 
| 
      
 336 
     | 
    
         
            +
              GPR_ASSERT(GPR_SLICE_LENGTH(value_slice) <= UINT32_MAX);
         
     | 
| 
       338 
337 
     | 
    
         
             
              *add_tiny_header_data(st, 1) = 0x00;
         
     | 
| 
       339 
338 
     | 
    
         
             
              GRPC_CHTTP2_WRITE_VARINT(len_key, 1, 0x00,
         
     | 
| 
       340 
339 
     | 
    
         
             
                                       add_tiny_header_data(st, len_key_len), len_key_len);
         
     | 
| 
         @@ -346,14 +345,13 @@ static void emit_lithdr_noidx_v(grpc_chttp2_hpack_compressor *c, 
     | 
|
| 
       346 
345 
     | 
    
         | 
| 
       347 
346 
     | 
    
         
             
            static void emit_advertise_table_size_change(grpc_chttp2_hpack_compressor *c,
         
     | 
| 
       348 
347 
     | 
    
         
             
                                                         framer_state *st) {
         
     | 
| 
       349 
     | 
    
         
            -
               
     | 
| 
      
 348 
     | 
    
         
            +
              uint32_t len = GRPC_CHTTP2_VARINT_LENGTH(c->max_table_size, 3);
         
     | 
| 
       350 
349 
     | 
    
         
             
              GRPC_CHTTP2_WRITE_VARINT(c->max_table_size, 3, 0x20,
         
     | 
| 
       351 
350 
     | 
    
         
             
                                       add_tiny_header_data(st, len), len);
         
     | 
| 
       352 
351 
     | 
    
         
             
              c->advertise_table_size_change = 0;
         
     | 
| 
       353 
352 
     | 
    
         
             
            }
         
     | 
| 
       354 
353 
     | 
    
         | 
| 
       355 
     | 
    
         
            -
            static  
     | 
| 
       356 
     | 
    
         
            -
                                     gpr_uint32 elem_index) {
         
     | 
| 
      
 354 
     | 
    
         
            +
            static uint32_t dynidx(grpc_chttp2_hpack_compressor *c, uint32_t elem_index) {
         
     | 
| 
       357 
355 
     | 
    
         
             
              return 1 + GRPC_CHTTP2_LAST_STATIC_ENTRY + c->tail_remote_index +
         
     | 
| 
       358 
356 
     | 
    
         
             
                     c->table_elems - elem_index;
         
     | 
| 
       359 
357 
     | 
    
         
             
            }
         
     | 
| 
         @@ -361,10 +359,10 @@ static gpr_uint32 dynidx(grpc_chttp2_hpack_compressor *c, 
     | 
|
| 
       361 
359 
     | 
    
         
             
            /* encode an mdelem */
         
     | 
| 
       362 
360 
     | 
    
         
             
            static void hpack_enc(grpc_chttp2_hpack_compressor *c, grpc_mdelem *elem,
         
     | 
| 
       363 
361 
     | 
    
         
             
                                  framer_state *st) {
         
     | 
| 
       364 
     | 
    
         
            -
               
     | 
| 
       365 
     | 
    
         
            -
               
     | 
| 
      
 362 
     | 
    
         
            +
              uint32_t key_hash = elem->key->hash;
         
     | 
| 
      
 363 
     | 
    
         
            +
              uint32_t elem_hash = GRPC_MDSTR_KV_HASH(key_hash, elem->value->hash);
         
     | 
| 
       366 
364 
     | 
    
         
             
              size_t decoder_space_usage;
         
     | 
| 
       367 
     | 
    
         
            -
               
     | 
| 
      
 365 
     | 
    
         
            +
              uint32_t indices_key;
         
     | 
| 
       368 
366 
     | 
    
         
             
              int should_add_elem;
         
     | 
| 
       369 
367 
     | 
    
         | 
| 
       370 
368 
     | 
    
         
             
              GPR_ASSERT(GPR_SLICE_LENGTH(elem->key->slice) > 0);
         
     | 
| 
         @@ -463,9 +461,7 @@ static void deadline_enc(grpc_chttp2_hpack_compressor *c, gpr_timespec deadline, 
     | 
|
| 
       463 
461 
     | 
    
         
             
              GRPC_MDELEM_UNREF(mdelem);
         
     | 
| 
       464 
462 
     | 
    
         
             
            }
         
     | 
| 
       465 
463 
     | 
    
         | 
| 
       466 
     | 
    
         
            -
            static  
     | 
| 
       467 
     | 
    
         
            -
              return (bytes + 31) / 32;
         
     | 
| 
       468 
     | 
    
         
            -
            }
         
     | 
| 
      
 464 
     | 
    
         
            +
            static uint32_t elems_for_bytes(uint32_t bytes) { return (bytes + 31) / 32; }
         
     | 
| 
       469 
465 
     | 
    
         | 
| 
       470 
466 
     | 
    
         
             
            void grpc_chttp2_hpack_compressor_init(grpc_chttp2_hpack_compressor *c) {
         
     | 
| 
       471 
467 
     | 
    
         
             
              memset(c, 0, sizeof(*c));
         
     | 
| 
         @@ -489,21 +485,21 @@ void grpc_chttp2_hpack_compressor_destroy(grpc_chttp2_hpack_compressor *c) { 
     | 
|
| 
       489 
485 
     | 
    
         
             
            }
         
     | 
| 
       490 
486 
     | 
    
         | 
| 
       491 
487 
     | 
    
         
             
            void grpc_chttp2_hpack_compressor_set_max_usable_size(
         
     | 
| 
       492 
     | 
    
         
            -
                grpc_chttp2_hpack_compressor *c,  
     | 
| 
      
 488 
     | 
    
         
            +
                grpc_chttp2_hpack_compressor *c, uint32_t max_table_size) {
         
     | 
| 
       493 
489 
     | 
    
         
             
              c->max_usable_size = max_table_size;
         
     | 
| 
       494 
490 
     | 
    
         
             
              grpc_chttp2_hpack_compressor_set_max_table_size(
         
     | 
| 
       495 
491 
     | 
    
         
             
                  c, GPR_MIN(c->max_table_size, max_table_size));
         
     | 
| 
       496 
492 
     | 
    
         
             
            }
         
     | 
| 
       497 
493 
     | 
    
         | 
| 
       498 
     | 
    
         
            -
            static void rebuild_elems(grpc_chttp2_hpack_compressor *c,  
     | 
| 
       499 
     | 
    
         
            -
               
     | 
| 
       500 
     | 
    
         
            -
               
     | 
| 
      
 494 
     | 
    
         
            +
            static void rebuild_elems(grpc_chttp2_hpack_compressor *c, uint32_t new_cap) {
         
     | 
| 
      
 495 
     | 
    
         
            +
              uint16_t *table_elem_size = gpr_malloc(sizeof(*table_elem_size) * new_cap);
         
     | 
| 
      
 496 
     | 
    
         
            +
              uint32_t i;
         
     | 
| 
       501 
497 
     | 
    
         | 
| 
       502 
498 
     | 
    
         
             
              memset(table_elem_size, 0, sizeof(*table_elem_size) * new_cap);
         
     | 
| 
       503 
499 
     | 
    
         
             
              GPR_ASSERT(c->table_elems <= new_cap);
         
     | 
| 
       504 
500 
     | 
    
         | 
| 
       505 
501 
     | 
    
         
             
              for (i = 0; i < c->table_elems; i++) {
         
     | 
| 
       506 
     | 
    
         
            -
                 
     | 
| 
      
 502 
     | 
    
         
            +
                uint32_t ofs = c->tail_remote_index + i + 1;
         
     | 
| 
       507 
503 
     | 
    
         
             
                table_elem_size[ofs % new_cap] =
         
     | 
| 
       508 
504 
     | 
    
         
             
                    c->table_elem_size[ofs % c->cap_table_elems];
         
     | 
| 
       509 
505 
     | 
    
         
             
              }
         
     | 
| 
         @@ -514,7 +510,7 @@ static void rebuild_elems(grpc_chttp2_hpack_compressor *c, gpr_uint32 new_cap) { 
     | 
|
| 
       514 
510 
     | 
    
         
             
            }
         
     | 
| 
       515 
511 
     | 
    
         | 
| 
       516 
512 
     | 
    
         
             
            void grpc_chttp2_hpack_compressor_set_max_table_size(
         
     | 
| 
       517 
     | 
    
         
            -
                grpc_chttp2_hpack_compressor *c,  
     | 
| 
      
 513 
     | 
    
         
            +
                grpc_chttp2_hpack_compressor *c, uint32_t max_table_size) {
         
     | 
| 
       518 
514 
     | 
    
         
             
              max_table_size = GPR_MIN(max_table_size, c->max_usable_size);
         
     | 
| 
       519 
515 
     | 
    
         
             
              if (max_table_size == c->max_table_size) {
         
     | 
| 
       520 
516 
     | 
    
         
             
                return;
         
     | 
| 
         @@ -527,7 +523,7 @@ void grpc_chttp2_hpack_compressor_set_max_table_size( 
     | 
|
| 
       527 
523 
     | 
    
         
             
              if (c->max_table_elems > c->cap_table_elems) {
         
     | 
| 
       528 
524 
     | 
    
         
             
                rebuild_elems(c, GPR_MAX(c->max_table_elems, 2 * c->cap_table_elems));
         
     | 
| 
       529 
525 
     | 
    
         
             
              } else if (c->max_table_elems < c->cap_table_elems / 3) {
         
     | 
| 
       530 
     | 
    
         
            -
                 
     | 
| 
      
 526 
     | 
    
         
            +
                uint32_t new_cap = GPR_MAX(c->max_table_elems, 16);
         
     | 
| 
       531 
527 
     | 
    
         
             
                if (new_cap != c->cap_table_elems) {
         
     | 
| 
       532 
528 
     | 
    
         
             
                  rebuild_elems(c, new_cap);
         
     | 
| 
       533 
529 
     | 
    
         
             
                }
         
     | 
| 
         @@ -537,7 +533,7 @@ void grpc_chttp2_hpack_compressor_set_max_table_size( 
     | 
|
| 
       537 
533 
     | 
    
         
             
            }
         
     | 
| 
       538 
534 
     | 
    
         | 
| 
       539 
535 
     | 
    
         
             
            void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor *c,
         
     | 
| 
       540 
     | 
    
         
            -
                                            
     | 
| 
      
 536 
     | 
    
         
            +
                                           uint32_t stream_id,
         
     | 
| 
       541 
537 
     | 
    
         
             
                                           grpc_metadata_batch *metadata, int is_eof,
         
     | 
| 
       542 
538 
     | 
    
         
             
                                           gpr_slice_buffer *outbuf) {
         
     | 
| 
       543 
539 
     | 
    
         
             
              framer_state st;
         
     | 
| 
         @@ -49,46 +49,46 @@ 
     | 
|
| 
       49 
49 
     | 
    
         
             
            #define GRPC_CHTTP2_HPACKC_MAX_TABLE_SIZE (1024 * 1024)
         
     | 
| 
       50 
50 
     | 
    
         | 
| 
       51 
51 
     | 
    
         
             
            typedef struct {
         
     | 
| 
       52 
     | 
    
         
            -
               
     | 
| 
       53 
     | 
    
         
            -
               
     | 
| 
       54 
     | 
    
         
            -
               
     | 
| 
       55 
     | 
    
         
            -
               
     | 
| 
      
 52 
     | 
    
         
            +
              uint32_t filter_elems_sum;
         
     | 
| 
      
 53 
     | 
    
         
            +
              uint32_t max_table_size;
         
     | 
| 
      
 54 
     | 
    
         
            +
              uint32_t max_table_elems;
         
     | 
| 
      
 55 
     | 
    
         
            +
              uint32_t cap_table_elems;
         
     | 
| 
       56 
56 
     | 
    
         
             
              /** if non-zero, advertise to the decoder that we'll start using a table
         
     | 
| 
       57 
57 
     | 
    
         
             
                  of this size */
         
     | 
| 
       58 
     | 
    
         
            -
               
     | 
| 
      
 58 
     | 
    
         
            +
              uint8_t advertise_table_size_change;
         
     | 
| 
       59 
59 
     | 
    
         
             
              /** maximum number of bytes we'll use for the decode table (to guard against
         
     | 
| 
       60 
60 
     | 
    
         
             
                  peers ooming us by setting decode table size high) */
         
     | 
| 
       61 
     | 
    
         
            -
               
     | 
| 
      
 61 
     | 
    
         
            +
              uint32_t max_usable_size;
         
     | 
| 
       62 
62 
     | 
    
         
             
              /* one before the lowest usable table index */
         
     | 
| 
       63 
     | 
    
         
            -
               
     | 
| 
       64 
     | 
    
         
            -
               
     | 
| 
       65 
     | 
    
         
            -
               
     | 
| 
      
 63 
     | 
    
         
            +
              uint32_t tail_remote_index;
         
     | 
| 
      
 64 
     | 
    
         
            +
              uint32_t table_size;
         
     | 
| 
      
 65 
     | 
    
         
            +
              uint32_t table_elems;
         
     | 
| 
       66 
66 
     | 
    
         | 
| 
       67 
67 
     | 
    
         
             
              /* filter tables for elems: this tables provides an approximate
         
     | 
| 
       68 
68 
     | 
    
         
             
                 popularity count for particular hashes, and are used to determine whether
         
     | 
| 
       69 
69 
     | 
    
         
             
                 a new literal should be added to the compression table or not.
         
     | 
| 
       70 
70 
     | 
    
         
             
                 They track a single integer that counts how often a particular value has
         
     | 
| 
       71 
71 
     | 
    
         
             
                 been seen. When that count reaches max (255), all values are halved. */
         
     | 
| 
       72 
     | 
    
         
            -
               
     | 
| 
      
 72 
     | 
    
         
            +
              uint8_t filter_elems[GRPC_CHTTP2_HPACKC_NUM_FILTERS];
         
     | 
| 
       73 
73 
     | 
    
         | 
| 
       74 
74 
     | 
    
         
             
              /* entry tables for keys & elems: these tables track values that have been
         
     | 
| 
       75 
75 
     | 
    
         
             
                 seen and *may* be in the decompressor table */
         
     | 
| 
       76 
76 
     | 
    
         
             
              grpc_mdstr *entries_keys[GRPC_CHTTP2_HPACKC_NUM_VALUES];
         
     | 
| 
       77 
77 
     | 
    
         
             
              grpc_mdelem *entries_elems[GRPC_CHTTP2_HPACKC_NUM_VALUES];
         
     | 
| 
       78 
     | 
    
         
            -
               
     | 
| 
       79 
     | 
    
         
            -
               
     | 
| 
      
 78 
     | 
    
         
            +
              uint32_t indices_keys[GRPC_CHTTP2_HPACKC_NUM_VALUES];
         
     | 
| 
      
 79 
     | 
    
         
            +
              uint32_t indices_elems[GRPC_CHTTP2_HPACKC_NUM_VALUES];
         
     | 
| 
       80 
80 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
               
     | 
| 
      
 81 
     | 
    
         
            +
              uint16_t *table_elem_size;
         
     | 
| 
       82 
82 
     | 
    
         
             
            } grpc_chttp2_hpack_compressor;
         
     | 
| 
       83 
83 
     | 
    
         | 
| 
       84 
84 
     | 
    
         
             
            void grpc_chttp2_hpack_compressor_init(grpc_chttp2_hpack_compressor *c);
         
     | 
| 
       85 
85 
     | 
    
         
             
            void grpc_chttp2_hpack_compressor_destroy(grpc_chttp2_hpack_compressor *c);
         
     | 
| 
       86 
86 
     | 
    
         
             
            void grpc_chttp2_hpack_compressor_set_max_table_size(
         
     | 
| 
       87 
     | 
    
         
            -
                grpc_chttp2_hpack_compressor *c,  
     | 
| 
      
 87 
     | 
    
         
            +
                grpc_chttp2_hpack_compressor *c, uint32_t max_table_size);
         
     | 
| 
       88 
88 
     | 
    
         
             
            void grpc_chttp2_hpack_compressor_set_max_usable_size(
         
     | 
| 
       89 
     | 
    
         
            -
                grpc_chttp2_hpack_compressor *c,  
     | 
| 
      
 89 
     | 
    
         
            +
                grpc_chttp2_hpack_compressor *c, uint32_t max_table_size);
         
     | 
| 
       90 
90 
     | 
    
         | 
| 
       91 
     | 
    
         
            -
            void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor *c,  
     | 
| 
      
 91 
     | 
    
         
            +
            void grpc_chttp2_encode_header(grpc_chttp2_hpack_compressor *c, uint32_t id,
         
     | 
| 
       92 
92 
     | 
    
         
             
                                           grpc_metadata_batch *metadata, int is_eof,
         
     | 
| 
       93 
93 
     | 
    
         
             
                                           gpr_slice_buffer *outbuf);
         
     | 
| 
       94 
94 
     | 
    
         | 
| 
         @@ -75,63 +75,63 @@ typedef enum { 
     | 
|
| 
       75 
75 
     | 
    
         
             
               a set of indirect jumps, and so not waste stack space. */
         
     | 
| 
       76 
76 
     | 
    
         | 
| 
       77 
77 
     | 
    
         
             
            /* forward declarations for parsing states */
         
     | 
| 
       78 
     | 
    
         
            -
            static int parse_begin(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       79 
     | 
    
         
            -
                                   const  
     | 
| 
       80 
     | 
    
         
            -
            static int parse_error(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       81 
     | 
    
         
            -
                                   const  
     | 
| 
       82 
     | 
    
         
            -
            static int parse_illegal_op(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       83 
     | 
    
         
            -
                                        const  
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
            static int parse_string_prefix(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       86 
     | 
    
         
            -
                                           const  
     | 
| 
       87 
     | 
    
         
            -
            static int parse_key_string(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       88 
     | 
    
         
            -
                                        const  
     | 
| 
      
 78 
     | 
    
         
            +
            static int parse_begin(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 79 
     | 
    
         
            +
                                   const uint8_t *end);
         
     | 
| 
      
 80 
     | 
    
         
            +
            static int parse_error(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 81 
     | 
    
         
            +
                                   const uint8_t *end);
         
     | 
| 
      
 82 
     | 
    
         
            +
            static int parse_illegal_op(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 83 
     | 
    
         
            +
                                        const uint8_t *end);
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            static int parse_string_prefix(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 86 
     | 
    
         
            +
                                           const uint8_t *end);
         
     | 
| 
      
 87 
     | 
    
         
            +
            static int parse_key_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 88 
     | 
    
         
            +
                                        const uint8_t *end);
         
     | 
| 
       89 
89 
     | 
    
         
             
            static int parse_value_string_with_indexed_key(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       90 
     | 
    
         
            -
                                                           const  
     | 
| 
       91 
     | 
    
         
            -
                                                           const  
     | 
| 
      
 90 
     | 
    
         
            +
                                                           const uint8_t *cur,
         
     | 
| 
      
 91 
     | 
    
         
            +
                                                           const uint8_t *end);
         
     | 
| 
       92 
92 
     | 
    
         
             
            static int parse_value_string_with_literal_key(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       93 
     | 
    
         
            -
                                                           const  
     | 
| 
       94 
     | 
    
         
            -
                                                           const  
     | 
| 
       95 
     | 
    
         
            -
             
     | 
| 
       96 
     | 
    
         
            -
            static int parse_value0(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       97 
     | 
    
         
            -
                                    const  
     | 
| 
       98 
     | 
    
         
            -
            static int parse_value1(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       99 
     | 
    
         
            -
                                    const  
     | 
| 
       100 
     | 
    
         
            -
            static int parse_value2(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       101 
     | 
    
         
            -
                                    const  
     | 
| 
       102 
     | 
    
         
            -
            static int parse_value3(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       103 
     | 
    
         
            -
                                    const  
     | 
| 
       104 
     | 
    
         
            -
            static int parse_value4(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       105 
     | 
    
         
            -
                                    const  
     | 
| 
       106 
     | 
    
         
            -
            static int parse_value5up(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       107 
     | 
    
         
            -
                                      const  
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
            static int parse_indexed_field(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       110 
     | 
    
         
            -
                                           const  
     | 
| 
      
 93 
     | 
    
         
            +
                                                           const uint8_t *cur,
         
     | 
| 
      
 94 
     | 
    
         
            +
                                                           const uint8_t *end);
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
            static int parse_value0(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 97 
     | 
    
         
            +
                                    const uint8_t *end);
         
     | 
| 
      
 98 
     | 
    
         
            +
            static int parse_value1(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 99 
     | 
    
         
            +
                                    const uint8_t *end);
         
     | 
| 
      
 100 
     | 
    
         
            +
            static int parse_value2(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 101 
     | 
    
         
            +
                                    const uint8_t *end);
         
     | 
| 
      
 102 
     | 
    
         
            +
            static int parse_value3(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 103 
     | 
    
         
            +
                                    const uint8_t *end);
         
     | 
| 
      
 104 
     | 
    
         
            +
            static int parse_value4(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 105 
     | 
    
         
            +
                                    const uint8_t *end);
         
     | 
| 
      
 106 
     | 
    
         
            +
            static int parse_value5up(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 107 
     | 
    
         
            +
                                      const uint8_t *end);
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
            static int parse_indexed_field(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 110 
     | 
    
         
            +
                                           const uint8_t *end);
         
     | 
| 
       111 
111 
     | 
    
         
             
            static int parse_indexed_field_x(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       112 
     | 
    
         
            -
                                             const  
     | 
| 
       113 
     | 
    
         
            -
            static int parse_lithdr_incidx(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       114 
     | 
    
         
            -
                                           const  
     | 
| 
      
 112 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end);
         
     | 
| 
      
 113 
     | 
    
         
            +
            static int parse_lithdr_incidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 114 
     | 
    
         
            +
                                           const uint8_t *end);
         
     | 
| 
       115 
115 
     | 
    
         
             
            static int parse_lithdr_incidx_x(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       116 
     | 
    
         
            -
                                             const  
     | 
| 
      
 116 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end);
         
     | 
| 
       117 
117 
     | 
    
         
             
            static int parse_lithdr_incidx_v(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       118 
     | 
    
         
            -
                                             const  
     | 
| 
       119 
     | 
    
         
            -
            static int parse_lithdr_notidx(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       120 
     | 
    
         
            -
                                           const  
     | 
| 
      
 118 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end);
         
     | 
| 
      
 119 
     | 
    
         
            +
            static int parse_lithdr_notidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 120 
     | 
    
         
            +
                                           const uint8_t *end);
         
     | 
| 
       121 
121 
     | 
    
         
             
            static int parse_lithdr_notidx_x(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       122 
     | 
    
         
            -
                                             const  
     | 
| 
      
 122 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end);
         
     | 
| 
       123 
123 
     | 
    
         
             
            static int parse_lithdr_notidx_v(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       124 
     | 
    
         
            -
                                             const  
     | 
| 
       125 
     | 
    
         
            -
            static int parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       126 
     | 
    
         
            -
                                           const  
     | 
| 
      
 124 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end);
         
     | 
| 
      
 125 
     | 
    
         
            +
            static int parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 126 
     | 
    
         
            +
                                           const uint8_t *end);
         
     | 
| 
       127 
127 
     | 
    
         
             
            static int parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       128 
     | 
    
         
            -
                                             const  
     | 
| 
      
 128 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end);
         
     | 
| 
       129 
129 
     | 
    
         
             
            static int parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       130 
     | 
    
         
            -
                                             const  
     | 
| 
       131 
     | 
    
         
            -
            static int parse_max_tbl_size(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       132 
     | 
    
         
            -
                                          const  
     | 
| 
       133 
     | 
    
         
            -
            static int parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       134 
     | 
    
         
            -
                                            const  
     | 
| 
      
 130 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end);
         
     | 
| 
      
 131 
     | 
    
         
            +
            static int parse_max_tbl_size(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 132 
     | 
    
         
            +
                                          const uint8_t *end);
         
     | 
| 
      
 133 
     | 
    
         
            +
            static int parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 134 
     | 
    
         
            +
                                            const uint8_t *end);
         
     | 
| 
       135 
135 
     | 
    
         | 
| 
       136 
136 
     | 
    
         
             
            /* we translate the first byte of a hpack field into one of these decoding
         
     | 
| 
       137 
137 
     | 
    
         
             
               cases, then use a lookup table to jump directly to the appropriate parser.
         
     | 
| 
         @@ -167,7 +167,7 @@ static const grpc_chttp2_hpack_parser_state first_byte_action[] = { 
     | 
|
| 
       167 
167 
     | 
    
         | 
| 
       168 
168 
     | 
    
         
             
            /* indexes the first byte to a parse state function - generated by
         
     | 
| 
       169 
169 
     | 
    
         
             
               gen_hpack_tables.c */
         
     | 
| 
       170 
     | 
    
         
            -
            static const  
     | 
| 
      
 170 
     | 
    
         
            +
            static const uint8_t first_byte_lut[256] = {
         
     | 
| 
       171 
171 
     | 
    
         
             
                LITHDR_NOTIDX_V, LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX,
         
     | 
| 
       172 
172 
     | 
    
         
             
                LITHDR_NOTIDX,   LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX,
         
     | 
| 
       173 
173 
     | 
    
         
             
                LITHDR_NOTIDX,   LITHDR_NOTIDX, LITHDR_NOTIDX, LITHDR_NOTIDX,
         
     | 
| 
         @@ -239,7 +239,7 @@ static const gpr_uint8 first_byte_lut[256] = { 
     | 
|
| 
       239 
239 
     | 
    
         
             
               considered returns the next state.
         
     | 
| 
       240 
240 
     | 
    
         | 
| 
       241 
241 
     | 
    
         
             
               generated by gen_hpack_tables.c */
         
     | 
| 
       242 
     | 
    
         
            -
            static const  
     | 
| 
      
 242 
     | 
    
         
            +
            static const uint8_t next_tbl[256] = {
         
     | 
| 
       243 
243 
     | 
    
         
             
                0,  1,  2,  3,  4,  1,  2, 5,  6,  1, 7,  8,  1,  3,  3,  9,  10, 11, 1,  1,
         
     | 
| 
       244 
244 
     | 
    
         
             
                1,  12, 1,  2,  13, 1,  1, 1,  1,  1, 1,  1,  1,  1,  1,  1,  1,  1,  1,  2,
         
     | 
| 
       245 
245 
     | 
    
         
             
                14, 1,  15, 16, 1,  17, 1, 15, 2,  7, 3,  18, 19, 1,  1,  1,  1,  20, 1,  1,
         
     | 
| 
         @@ -257,7 +257,7 @@ static const gpr_uint8 next_tbl[256] = { 
     | 
|
| 
       257 
257 
     | 
    
         | 
| 
       258 
258 
     | 
    
         
             
            /* next state, based upon current state and the current nibble: see above.
         
     | 
| 
       259 
259 
     | 
    
         
             
               generated by gen_hpack_tables.c */
         
     | 
| 
       260 
     | 
    
         
            -
            static const  
     | 
| 
      
 260 
     | 
    
         
            +
            static const int16_t next_sub_tbl[48 * 16] = {
         
     | 
| 
       261 
261 
     | 
    
         
             
                1,   204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
         
     | 
| 
       262 
262 
     | 
    
         
             
                218, 2,   6,   10,  13,  14,  15,  16,  17,  2,   6,   10,  13,  14,  15,
         
     | 
| 
       263 
263 
     | 
    
         
             
                16,  17,  3,   7,   11,  24,  3,   7,   11,  24,  3,   7,   11,  24,  3,
         
     | 
| 
         @@ -316,7 +316,7 @@ static const gpr_int16 next_sub_tbl[48 * 16] = { 
     | 
|
| 
       316 
316 
     | 
    
         
             
               emitted, or -1 for no byte, or 256 for end of stream
         
     | 
| 
       317 
317 
     | 
    
         | 
| 
       318 
318 
     | 
    
         
             
               generated by gen_hpack_tables.c */
         
     | 
| 
       319 
     | 
    
         
            -
            static const  
     | 
| 
      
 319 
     | 
    
         
            +
            static const uint16_t emit_tbl[256] = {
         
     | 
| 
       320 
320 
     | 
    
         
             
                0,   1,   2,   3,   4,   5,   6,   7,   0,   8,   9,   10,  11,  12,  13,
         
     | 
| 
       321 
321 
     | 
    
         
             
                14,  15,  16,  17,  18,  19,  20,  21,  22,  0,   23,  24,  25,  26,  27,
         
     | 
| 
       322 
322 
     | 
    
         
             
                28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,  42,
         
     | 
| 
         @@ -338,7 +338,7 @@ static const gpr_uint16 emit_tbl[256] = { 
     | 
|
| 
       338 
338 
     | 
    
         
             
            };
         
     | 
| 
       339 
339 
     | 
    
         | 
| 
       340 
340 
     | 
    
         
             
            /* generated by gen_hpack_tables.c */
         
     | 
| 
       341 
     | 
    
         
            -
            static const  
     | 
| 
      
 341 
     | 
    
         
            +
            static const int16_t emit_sub_tbl[249 * 16] = {
         
     | 
| 
       342 
342 
     | 
    
         
             
                -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
         
     | 
| 
       343 
343 
     | 
    
         
             
                -1,  48,  48,  48,  48,  48,  48,  48,  48,  49,  49,  49,  49,  49,  49,
         
     | 
| 
       344 
344 
     | 
    
         
             
                49,  49,  48,  48,  48,  48,  49,  49,  49,  49,  50,  50,  50,  50,  97,
         
     | 
| 
         @@ -607,7 +607,7 @@ static const gpr_int16 emit_sub_tbl[249 * 16] = { 
     | 
|
| 
       607 
607 
     | 
    
         
             
                13,  22,  22,  22,  22,  256, 256, 256, 256,
         
     | 
| 
       608 
608 
     | 
    
         
             
            };
         
     | 
| 
       609 
609 
     | 
    
         | 
| 
       610 
     | 
    
         
            -
            static const  
     | 
| 
      
 610 
     | 
    
         
            +
            static const uint8_t inverse_base64[256] = {
         
     | 
| 
       611 
611 
     | 
    
         
             
                255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
         
     | 
| 
       612 
612 
     | 
    
         
             
                255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255,
         
     | 
| 
       613 
613 
     | 
    
         
             
                255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62,  255,
         
     | 
| 
         @@ -642,22 +642,22 @@ static int on_hdr(grpc_chttp2_hpack_parser *p, grpc_mdelem *md, 
     | 
|
| 
       642 
642 
     | 
    
         | 
| 
       643 
643 
     | 
    
         
             
            static grpc_mdstr *take_string(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       644 
644 
     | 
    
         
             
                                           grpc_chttp2_hpack_parser_string *str) {
         
     | 
| 
       645 
     | 
    
         
            -
              grpc_mdstr *s = grpc_mdstr_from_buffer(( 
     | 
| 
      
 645 
     | 
    
         
            +
              grpc_mdstr *s = grpc_mdstr_from_buffer((uint8_t *)str->str, str->length);
         
     | 
| 
       646 
646 
     | 
    
         
             
              str->length = 0;
         
     | 
| 
       647 
647 
     | 
    
         
             
              return s;
         
     | 
| 
       648 
648 
     | 
    
         
             
            }
         
     | 
| 
       649 
649 
     | 
    
         | 
| 
       650 
650 
     | 
    
         
             
            /* jump to the next state */
         
     | 
| 
       651 
     | 
    
         
            -
            static int parse_next(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       652 
     | 
    
         
            -
                                  const  
     | 
| 
      
 651 
     | 
    
         
            +
            static int parse_next(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 652 
     | 
    
         
            +
                                  const uint8_t *end) {
         
     | 
| 
       653 
653 
     | 
    
         
             
              p->state = *p->next_state++;
         
     | 
| 
       654 
654 
     | 
    
         
             
              return p->state(p, cur, end);
         
     | 
| 
       655 
655 
     | 
    
         
             
            }
         
     | 
| 
       656 
656 
     | 
    
         | 
| 
       657 
657 
     | 
    
         
             
            /* begin parsing a header: all functionality is encoded into lookup tables
         
     | 
| 
       658 
658 
     | 
    
         
             
               above */
         
     | 
| 
       659 
     | 
    
         
            -
            static int parse_begin(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       660 
     | 
    
         
            -
                                   const  
     | 
| 
      
 659 
     | 
    
         
            +
            static int parse_begin(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 660 
     | 
    
         
            +
                                   const uint8_t *end) {
         
     | 
| 
       661 
661 
     | 
    
         
             
              if (cur == end) {
         
     | 
| 
       662 
662 
     | 
    
         
             
                p->state = parse_begin;
         
     | 
| 
       663 
663 
     | 
    
         
             
                return 1;
         
     | 
| 
         @@ -667,8 +667,8 @@ static int parse_begin(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       667 
667 
     | 
    
         
             
            }
         
     | 
| 
       668 
668 
     | 
    
         | 
| 
       669 
669 
     | 
    
         
             
            /* stream dependency and prioritization data: we just skip it */
         
     | 
| 
       670 
     | 
    
         
            -
            static int parse_stream_weight(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       671 
     | 
    
         
            -
                                           const  
     | 
| 
      
 670 
     | 
    
         
            +
            static int parse_stream_weight(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 671 
     | 
    
         
            +
                                           const uint8_t *end) {
         
     | 
| 
       672 
672 
     | 
    
         
             
              if (cur == end) {
         
     | 
| 
       673 
673 
     | 
    
         
             
                p->state = parse_stream_weight;
         
     | 
| 
       674 
674 
     | 
    
         
             
                return 1;
         
     | 
| 
         @@ -677,8 +677,8 @@ static int parse_stream_weight(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       677 
677 
     | 
    
         
             
              return p->after_prioritization(p, cur + 1, end);
         
     | 
| 
       678 
678 
     | 
    
         
             
            }
         
     | 
| 
       679 
679 
     | 
    
         | 
| 
       680 
     | 
    
         
            -
            static int parse_stream_dep3(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       681 
     | 
    
         
            -
                                         const  
     | 
| 
      
 680 
     | 
    
         
            +
            static int parse_stream_dep3(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 681 
     | 
    
         
            +
                                         const uint8_t *end) {
         
     | 
| 
       682 
682 
     | 
    
         
             
              if (cur == end) {
         
     | 
| 
       683 
683 
     | 
    
         
             
                p->state = parse_stream_dep3;
         
     | 
| 
       684 
684 
     | 
    
         
             
                return 1;
         
     | 
| 
         @@ -687,8 +687,8 @@ static int parse_stream_dep3(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       687 
687 
     | 
    
         
             
              return parse_stream_weight(p, cur + 1, end);
         
     | 
| 
       688 
688 
     | 
    
         
             
            }
         
     | 
| 
       689 
689 
     | 
    
         | 
| 
       690 
     | 
    
         
            -
            static int parse_stream_dep2(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       691 
     | 
    
         
            -
                                         const  
     | 
| 
      
 690 
     | 
    
         
            +
            static int parse_stream_dep2(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 691 
     | 
    
         
            +
                                         const uint8_t *end) {
         
     | 
| 
       692 
692 
     | 
    
         
             
              if (cur == end) {
         
     | 
| 
       693 
693 
     | 
    
         
             
                p->state = parse_stream_dep2;
         
     | 
| 
       694 
694 
     | 
    
         
             
                return 1;
         
     | 
| 
         @@ -697,8 +697,8 @@ static int parse_stream_dep2(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       697 
697 
     | 
    
         
             
              return parse_stream_dep3(p, cur + 1, end);
         
     | 
| 
       698 
698 
     | 
    
         
             
            }
         
     | 
| 
       699 
699 
     | 
    
         | 
| 
       700 
     | 
    
         
            -
            static int parse_stream_dep1(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       701 
     | 
    
         
            -
                                         const  
     | 
| 
      
 700 
     | 
    
         
            +
            static int parse_stream_dep1(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 701 
     | 
    
         
            +
                                         const uint8_t *end) {
         
     | 
| 
       702 
702 
     | 
    
         
             
              if (cur == end) {
         
     | 
| 
       703 
703 
     | 
    
         
             
                p->state = parse_stream_dep1;
         
     | 
| 
       704 
704 
     | 
    
         
             
                return 1;
         
     | 
| 
         @@ -707,8 +707,8 @@ static int parse_stream_dep1(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       707 
707 
     | 
    
         
             
              return parse_stream_dep2(p, cur + 1, end);
         
     | 
| 
       708 
708 
     | 
    
         
             
            }
         
     | 
| 
       709 
709 
     | 
    
         | 
| 
       710 
     | 
    
         
            -
            static int parse_stream_dep0(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       711 
     | 
    
         
            -
                                         const  
     | 
| 
      
 710 
     | 
    
         
            +
            static int parse_stream_dep0(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 711 
     | 
    
         
            +
                                         const uint8_t *end) {
         
     | 
| 
       712 
712 
     | 
    
         
             
              if (cur == end) {
         
     | 
| 
       713 
713 
     | 
    
         
             
                p->state = parse_stream_dep0;
         
     | 
| 
       714 
714 
     | 
    
         
             
                return 1;
         
     | 
| 
         @@ -719,8 +719,8 @@ static int parse_stream_dep0(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       719 
719 
     | 
    
         | 
| 
       720 
720 
     | 
    
         
             
            /* emit an indexed field; for now just logs it to console; jumps to
         
     | 
| 
       721 
721 
     | 
    
         
             
               begin the next field on completion */
         
     | 
| 
       722 
     | 
    
         
            -
            static int finish_indexed_field(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       723 
     | 
    
         
            -
                                            const  
     | 
| 
      
 722 
     | 
    
         
            +
            static int finish_indexed_field(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 723 
     | 
    
         
            +
                                            const uint8_t *end) {
         
     | 
| 
       724 
724 
     | 
    
         
             
              grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index);
         
     | 
| 
       725 
725 
     | 
    
         
             
              if (md == NULL) {
         
     | 
| 
       726 
726 
     | 
    
         
             
                gpr_log(GPR_ERROR, "Invalid HPACK index received: %d", p->index);
         
     | 
| 
         @@ -731,8 +731,8 @@ static int finish_indexed_field(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       731 
731 
     | 
    
         
             
            }
         
     | 
| 
       732 
732 
     | 
    
         | 
| 
       733 
733 
     | 
    
         
             
            /* parse an indexed field with index < 127 */
         
     | 
| 
       734 
     | 
    
         
            -
            static int parse_indexed_field(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       735 
     | 
    
         
            -
                                           const  
     | 
| 
      
 734 
     | 
    
         
            +
            static int parse_indexed_field(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 735 
     | 
    
         
            +
                                           const uint8_t *end) {
         
     | 
| 
       736 
736 
     | 
    
         
             
              p->dynamic_table_update_allowed = 0;
         
     | 
| 
       737 
737 
     | 
    
         
             
              p->index = (*cur) & 0x7f;
         
     | 
| 
       738 
738 
     | 
    
         
             
              return finish_indexed_field(p, cur + 1, end);
         
     | 
| 
         @@ -740,7 +740,7 @@ static int parse_indexed_field(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       740 
740 
     | 
    
         | 
| 
       741 
741 
     | 
    
         
             
            /* parse an indexed field with index >= 127 */
         
     | 
| 
       742 
742 
     | 
    
         
             
            static int parse_indexed_field_x(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       743 
     | 
    
         
            -
                                             const  
     | 
| 
      
 743 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end) {
         
     | 
| 
       744 
744 
     | 
    
         
             
              static const grpc_chttp2_hpack_parser_state and_then[] = {
         
     | 
| 
       745 
745 
     | 
    
         
             
                  finish_indexed_field};
         
     | 
| 
       746 
746 
     | 
    
         
             
              p->dynamic_table_update_allowed = 0;
         
     | 
| 
         @@ -752,8 +752,8 @@ static int parse_indexed_field_x(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       752 
752 
     | 
    
         | 
| 
       753 
753 
     | 
    
         
             
            /* finish a literal header with incremental indexing: just log, and jump to '
         
     | 
| 
       754 
754 
     | 
    
         
             
               begin */
         
     | 
| 
       755 
     | 
    
         
            -
            static int finish_lithdr_incidx(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       756 
     | 
    
         
            -
                                            const  
     | 
| 
      
 755 
     | 
    
         
            +
            static int finish_lithdr_incidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 756 
     | 
    
         
            +
                                            const uint8_t *end) {
         
     | 
| 
       757 
757 
     | 
    
         
             
              grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index);
         
     | 
| 
       758 
758 
     | 
    
         
             
              GPR_ASSERT(md != NULL); /* handled in string parsing */
         
     | 
| 
       759 
759 
     | 
    
         
             
              return on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key),
         
     | 
| 
         @@ -764,7 +764,7 @@ static int finish_lithdr_incidx(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       764 
764 
     | 
    
         | 
| 
       765 
765 
     | 
    
         
             
            /* finish a literal header with incremental indexing with no index */
         
     | 
| 
       766 
766 
     | 
    
         
             
            static int finish_lithdr_incidx_v(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       767 
     | 
    
         
            -
                                              const  
     | 
| 
      
 767 
     | 
    
         
            +
                                              const uint8_t *cur, const uint8_t *end) {
         
     | 
| 
       768 
768 
     | 
    
         
             
              return on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key),
         
     | 
| 
       769 
769 
     | 
    
         
             
                                                                 take_string(p, &p->value)),
         
     | 
| 
       770 
770 
     | 
    
         
             
                            1) &&
         
     | 
| 
         @@ -772,8 +772,8 @@ static int finish_lithdr_incidx_v(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       772 
772 
     | 
    
         
             
            }
         
     | 
| 
       773 
773 
     | 
    
         | 
| 
       774 
774 
     | 
    
         
             
            /* parse a literal header with incremental indexing; index < 63 */
         
     | 
| 
       775 
     | 
    
         
            -
            static int parse_lithdr_incidx(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       776 
     | 
    
         
            -
                                           const  
     | 
| 
      
 775 
     | 
    
         
            +
            static int parse_lithdr_incidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 776 
     | 
    
         
            +
                                           const uint8_t *end) {
         
     | 
| 
       777 
777 
     | 
    
         
             
              static const grpc_chttp2_hpack_parser_state and_then[] = {
         
     | 
| 
       778 
778 
     | 
    
         
             
                  parse_value_string_with_indexed_key, finish_lithdr_incidx};
         
     | 
| 
       779 
779 
     | 
    
         
             
              p->dynamic_table_update_allowed = 0;
         
     | 
| 
         @@ -784,7 +784,7 @@ static int parse_lithdr_incidx(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       784 
784 
     | 
    
         | 
| 
       785 
785 
     | 
    
         
             
            /* parse a literal header with incremental indexing; index >= 63 */
         
     | 
| 
       786 
786 
     | 
    
         
             
            static int parse_lithdr_incidx_x(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       787 
     | 
    
         
            -
                                             const  
     | 
| 
      
 787 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end) {
         
     | 
| 
       788 
788 
     | 
    
         
             
              static const grpc_chttp2_hpack_parser_state and_then[] = {
         
     | 
| 
       789 
789 
     | 
    
         
             
                  parse_string_prefix, parse_value_string_with_indexed_key,
         
     | 
| 
       790 
790 
     | 
    
         
             
                  finish_lithdr_incidx};
         
     | 
| 
         @@ -797,7 +797,7 @@ static int parse_lithdr_incidx_x(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       797 
797 
     | 
    
         | 
| 
       798 
798 
     | 
    
         
             
            /* parse a literal header with incremental indexing; index = 0 */
         
     | 
| 
       799 
799 
     | 
    
         
             
            static int parse_lithdr_incidx_v(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       800 
     | 
    
         
            -
                                             const  
     | 
| 
      
 800 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end) {
         
     | 
| 
       801 
801 
     | 
    
         
             
              static const grpc_chttp2_hpack_parser_state and_then[] = {
         
     | 
| 
       802 
802 
     | 
    
         
             
                  parse_key_string, parse_string_prefix,
         
     | 
| 
       803 
803 
     | 
    
         
             
                  parse_value_string_with_literal_key, finish_lithdr_incidx_v};
         
     | 
| 
         @@ -807,8 +807,8 @@ static int parse_lithdr_incidx_v(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       807 
807 
     | 
    
         
             
            }
         
     | 
| 
       808 
808 
     | 
    
         | 
| 
       809 
809 
     | 
    
         
             
            /* finish a literal header without incremental indexing */
         
     | 
| 
       810 
     | 
    
         
            -
            static int finish_lithdr_notidx(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       811 
     | 
    
         
            -
                                            const  
     | 
| 
      
 810 
     | 
    
         
            +
            static int finish_lithdr_notidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 811 
     | 
    
         
            +
                                            const uint8_t *end) {
         
     | 
| 
       812 
812 
     | 
    
         
             
              grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index);
         
     | 
| 
       813 
813 
     | 
    
         
             
              GPR_ASSERT(md != NULL); /* handled in string parsing */
         
     | 
| 
       814 
814 
     | 
    
         
             
              return on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key),
         
     | 
| 
         @@ -819,7 +819,7 @@ static int finish_lithdr_notidx(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       819 
819 
     | 
    
         | 
| 
       820 
820 
     | 
    
         
             
            /* finish a literal header without incremental indexing with index = 0 */
         
     | 
| 
       821 
821 
     | 
    
         
             
            static int finish_lithdr_notidx_v(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       822 
     | 
    
         
            -
                                              const  
     | 
| 
      
 822 
     | 
    
         
            +
                                              const uint8_t *cur, const uint8_t *end) {
         
     | 
| 
       823 
823 
     | 
    
         
             
              return on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key),
         
     | 
| 
       824 
824 
     | 
    
         
             
                                                                 take_string(p, &p->value)),
         
     | 
| 
       825 
825 
     | 
    
         
             
                            0) &&
         
     | 
| 
         @@ -827,8 +827,8 @@ static int finish_lithdr_notidx_v(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       827 
827 
     | 
    
         
             
            }
         
     | 
| 
       828 
828 
     | 
    
         | 
| 
       829 
829 
     | 
    
         
             
            /* parse a literal header without incremental indexing; index < 15 */
         
     | 
| 
       830 
     | 
    
         
            -
            static int parse_lithdr_notidx(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       831 
     | 
    
         
            -
                                           const  
     | 
| 
      
 830 
     | 
    
         
            +
            static int parse_lithdr_notidx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 831 
     | 
    
         
            +
                                           const uint8_t *end) {
         
     | 
| 
       832 
832 
     | 
    
         
             
              static const grpc_chttp2_hpack_parser_state and_then[] = {
         
     | 
| 
       833 
833 
     | 
    
         
             
                  parse_value_string_with_indexed_key, finish_lithdr_notidx};
         
     | 
| 
       834 
834 
     | 
    
         
             
              p->dynamic_table_update_allowed = 0;
         
     | 
| 
         @@ -839,7 +839,7 @@ static int parse_lithdr_notidx(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       839 
839 
     | 
    
         | 
| 
       840 
840 
     | 
    
         
             
            /* parse a literal header without incremental indexing; index >= 15 */
         
     | 
| 
       841 
841 
     | 
    
         
             
            static int parse_lithdr_notidx_x(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       842 
     | 
    
         
            -
                                             const  
     | 
| 
      
 842 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end) {
         
     | 
| 
       843 
843 
     | 
    
         
             
              static const grpc_chttp2_hpack_parser_state and_then[] = {
         
     | 
| 
       844 
844 
     | 
    
         
             
                  parse_string_prefix, parse_value_string_with_indexed_key,
         
     | 
| 
       845 
845 
     | 
    
         
             
                  finish_lithdr_notidx};
         
     | 
| 
         @@ -852,7 +852,7 @@ static int parse_lithdr_notidx_x(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       852 
852 
     | 
    
         | 
| 
       853 
853 
     | 
    
         
             
            /* parse a literal header without incremental indexing; index == 0 */
         
     | 
| 
       854 
854 
     | 
    
         
             
            static int parse_lithdr_notidx_v(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       855 
     | 
    
         
            -
                                             const  
     | 
| 
      
 855 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end) {
         
     | 
| 
       856 
856 
     | 
    
         
             
              static const grpc_chttp2_hpack_parser_state and_then[] = {
         
     | 
| 
       857 
857 
     | 
    
         
             
                  parse_key_string, parse_string_prefix,
         
     | 
| 
       858 
858 
     | 
    
         
             
                  parse_value_string_with_literal_key, finish_lithdr_notidx_v};
         
     | 
| 
         @@ -862,8 +862,8 @@ static int parse_lithdr_notidx_v(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       862 
862 
     | 
    
         
             
            }
         
     | 
| 
       863 
863 
     | 
    
         | 
| 
       864 
864 
     | 
    
         
             
            /* finish a literal header that is never indexed */
         
     | 
| 
       865 
     | 
    
         
            -
            static int finish_lithdr_nvridx(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       866 
     | 
    
         
            -
                                            const  
     | 
| 
      
 865 
     | 
    
         
            +
            static int finish_lithdr_nvridx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 866 
     | 
    
         
            +
                                            const uint8_t *end) {
         
     | 
| 
       867 
867 
     | 
    
         
             
              grpc_mdelem *md = grpc_chttp2_hptbl_lookup(&p->table, p->index);
         
     | 
| 
       868 
868 
     | 
    
         
             
              GPR_ASSERT(md != NULL); /* handled in string parsing */
         
     | 
| 
       869 
869 
     | 
    
         
             
              return on_hdr(p, grpc_mdelem_from_metadata_strings(GRPC_MDSTR_REF(md->key),
         
     | 
| 
         @@ -874,7 +874,7 @@ static int finish_lithdr_nvridx(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       874 
874 
     | 
    
         | 
| 
       875 
875 
     | 
    
         
             
            /* finish a literal header that is never indexed with an extra value */
         
     | 
| 
       876 
876 
     | 
    
         
             
            static int finish_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       877 
     | 
    
         
            -
                                              const  
     | 
| 
      
 877 
     | 
    
         
            +
                                              const uint8_t *cur, const uint8_t *end) {
         
     | 
| 
       878 
878 
     | 
    
         
             
              return on_hdr(p, grpc_mdelem_from_metadata_strings(take_string(p, &p->key),
         
     | 
| 
       879 
879 
     | 
    
         
             
                                                                 take_string(p, &p->value)),
         
     | 
| 
       880 
880 
     | 
    
         
             
                            0) &&
         
     | 
| 
         @@ -882,8 +882,8 @@ static int finish_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       882 
882 
     | 
    
         
             
            }
         
     | 
| 
       883 
883 
     | 
    
         | 
| 
       884 
884 
     | 
    
         
             
            /* parse a literal header that is never indexed; index < 15 */
         
     | 
| 
       885 
     | 
    
         
            -
            static int parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       886 
     | 
    
         
            -
                                           const  
     | 
| 
      
 885 
     | 
    
         
            +
            static int parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 886 
     | 
    
         
            +
                                           const uint8_t *end) {
         
     | 
| 
       887 
887 
     | 
    
         
             
              static const grpc_chttp2_hpack_parser_state and_then[] = {
         
     | 
| 
       888 
888 
     | 
    
         
             
                  parse_value_string_with_indexed_key, finish_lithdr_nvridx};
         
     | 
| 
       889 
889 
     | 
    
         
             
              p->dynamic_table_update_allowed = 0;
         
     | 
| 
         @@ -894,7 +894,7 @@ static int parse_lithdr_nvridx(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       894 
894 
     | 
    
         | 
| 
       895 
895 
     | 
    
         
             
            /* parse a literal header that is never indexed; index >= 15 */
         
     | 
| 
       896 
896 
     | 
    
         
             
            static int parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       897 
     | 
    
         
            -
                                             const  
     | 
| 
      
 897 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end) {
         
     | 
| 
       898 
898 
     | 
    
         
             
              static const grpc_chttp2_hpack_parser_state and_then[] = {
         
     | 
| 
       899 
899 
     | 
    
         
             
                  parse_string_prefix, parse_value_string_with_indexed_key,
         
     | 
| 
       900 
900 
     | 
    
         
             
                  finish_lithdr_nvridx};
         
     | 
| 
         @@ -907,7 +907,7 @@ static int parse_lithdr_nvridx_x(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       907 
907 
     | 
    
         | 
| 
       908 
908 
     | 
    
         
             
            /* parse a literal header that is never indexed; index == 0 */
         
     | 
| 
       909 
909 
     | 
    
         
             
            static int parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       910 
     | 
    
         
            -
                                             const  
     | 
| 
      
 910 
     | 
    
         
            +
                                             const uint8_t *cur, const uint8_t *end) {
         
     | 
| 
       911 
911 
     | 
    
         
             
              static const grpc_chttp2_hpack_parser_state and_then[] = {
         
     | 
| 
       912 
912 
     | 
    
         
             
                  parse_key_string, parse_string_prefix,
         
     | 
| 
       913 
913 
     | 
    
         
             
                  parse_value_string_with_literal_key, finish_lithdr_nvridx_v};
         
     | 
| 
         @@ -917,16 +917,16 @@ static int parse_lithdr_nvridx_v(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       917 
917 
     | 
    
         
             
            }
         
     | 
| 
       918 
918 
     | 
    
         | 
| 
       919 
919 
     | 
    
         
             
            /* finish parsing a max table size change */
         
     | 
| 
       920 
     | 
    
         
            -
            static int finish_max_tbl_size(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       921 
     | 
    
         
            -
                                           const  
     | 
| 
      
 920 
     | 
    
         
            +
            static int finish_max_tbl_size(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 921 
     | 
    
         
            +
                                           const uint8_t *end) {
         
     | 
| 
       922 
922 
     | 
    
         
             
              gpr_log(GPR_INFO, "MAX TABLE SIZE: %d", p->index);
         
     | 
| 
       923 
923 
     | 
    
         
             
              return grpc_chttp2_hptbl_set_current_table_size(&p->table, p->index) &&
         
     | 
| 
       924 
924 
     | 
    
         
             
                     parse_begin(p, cur, end);
         
     | 
| 
       925 
925 
     | 
    
         
             
            }
         
     | 
| 
       926 
926 
     | 
    
         | 
| 
       927 
927 
     | 
    
         
             
            /* parse a max table size change, max size < 15 */
         
     | 
| 
       928 
     | 
    
         
            -
            static int parse_max_tbl_size(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       929 
     | 
    
         
            -
                                          const  
     | 
| 
      
 928 
     | 
    
         
            +
            static int parse_max_tbl_size(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 929 
     | 
    
         
            +
                                          const uint8_t *end) {
         
     | 
| 
       930 
930 
     | 
    
         
             
              if (p->dynamic_table_update_allowed == 0) {
         
     | 
| 
       931 
931 
     | 
    
         
             
                return 0;
         
     | 
| 
       932 
932 
     | 
    
         
             
              }
         
     | 
| 
         @@ -936,8 +936,8 @@ static int parse_max_tbl_size(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       936 
936 
     | 
    
         
             
            }
         
     | 
| 
       937 
937 
     | 
    
         | 
| 
       938 
938 
     | 
    
         
             
            /* parse a max table size change, max size >= 15 */
         
     | 
| 
       939 
     | 
    
         
            -
            static int parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       940 
     | 
    
         
            -
                                            const  
     | 
| 
      
 939 
     | 
    
         
            +
            static int parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 940 
     | 
    
         
            +
                                            const uint8_t *end) {
         
     | 
| 
       941 
941 
     | 
    
         
             
              static const grpc_chttp2_hpack_parser_state and_then[] = {
         
     | 
| 
       942 
942 
     | 
    
         
             
                  finish_max_tbl_size};
         
     | 
| 
       943 
943 
     | 
    
         
             
              if (p->dynamic_table_update_allowed == 0) {
         
     | 
| 
         @@ -951,14 +951,14 @@ static int parse_max_tbl_size_x(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       951 
951 
     | 
    
         
             
            }
         
     | 
| 
       952 
952 
     | 
    
         | 
| 
       953 
953 
     | 
    
         
             
            /* a parse error: jam the parse state into parse_error, and return error */
         
     | 
| 
       954 
     | 
    
         
            -
            static int parse_error(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       955 
     | 
    
         
            -
                                   const  
     | 
| 
      
 954 
     | 
    
         
            +
            static int parse_error(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 955 
     | 
    
         
            +
                                   const uint8_t *end) {
         
     | 
| 
       956 
956 
     | 
    
         
             
              p->state = parse_error;
         
     | 
| 
       957 
957 
     | 
    
         
             
              return 0;
         
     | 
| 
       958 
958 
     | 
    
         
             
            }
         
     | 
| 
       959 
959 
     | 
    
         | 
| 
       960 
     | 
    
         
            -
            static int parse_illegal_op(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       961 
     | 
    
         
            -
                                        const  
     | 
| 
      
 960 
     | 
    
         
            +
            static int parse_illegal_op(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 961 
     | 
    
         
            +
                                        const uint8_t *end) {
         
     | 
| 
       962 
962 
     | 
    
         
             
              GPR_ASSERT(cur != end);
         
     | 
| 
       963 
963 
     | 
    
         
             
              gpr_log(GPR_DEBUG, "Illegal hpack op code %d", *cur);
         
     | 
| 
       964 
964 
     | 
    
         
             
              return parse_error(p, cur, end);
         
     | 
| 
         @@ -966,8 +966,8 @@ static int parse_illegal_op(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       966 
966 
     | 
    
         | 
| 
       967 
967 
     | 
    
         
             
            /* parse the 1st byte of a varint into p->parsing.value
         
     | 
| 
       968 
968 
     | 
    
         
             
               no overflow is possible */
         
     | 
| 
       969 
     | 
    
         
            -
            static int parse_value0(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       970 
     | 
    
         
            -
                                    const  
     | 
| 
      
 969 
     | 
    
         
            +
            static int parse_value0(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 970 
     | 
    
         
            +
                                    const uint8_t *end) {
         
     | 
| 
       971 
971 
     | 
    
         
             
              if (cur == end) {
         
     | 
| 
       972 
972 
     | 
    
         
             
                p->state = parse_value0;
         
     | 
| 
       973 
973 
     | 
    
         
             
                return 1;
         
     | 
| 
         @@ -984,14 +984,14 @@ static int parse_value0(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       984 
984 
     | 
    
         | 
| 
       985 
985 
     | 
    
         
             
            /* parse the 2nd byte of a varint into p->parsing.value
         
     | 
| 
       986 
986 
     | 
    
         
             
               no overflow is possible */
         
     | 
| 
       987 
     | 
    
         
            -
            static int parse_value1(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       988 
     | 
    
         
            -
                                    const  
     | 
| 
      
 987 
     | 
    
         
            +
            static int parse_value1(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 988 
     | 
    
         
            +
                                    const uint8_t *end) {
         
     | 
| 
       989 
989 
     | 
    
         
             
              if (cur == end) {
         
     | 
| 
       990 
990 
     | 
    
         
             
                p->state = parse_value1;
         
     | 
| 
       991 
991 
     | 
    
         
             
                return 1;
         
     | 
| 
       992 
992 
     | 
    
         
             
              }
         
     | 
| 
       993 
993 
     | 
    
         | 
| 
       994 
     | 
    
         
            -
              *p->parsing.value += ((( 
     | 
| 
      
 994 
     | 
    
         
            +
              *p->parsing.value += (((uint32_t)*cur) & 0x7f) << 7;
         
     | 
| 
       995 
995 
     | 
    
         | 
| 
       996 
996 
     | 
    
         
             
              if ((*cur) & 0x80) {
         
     | 
| 
       997 
997 
     | 
    
         
             
                return parse_value2(p, cur + 1, end);
         
     | 
| 
         @@ -1002,14 +1002,14 @@ static int parse_value1(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       1002 
1002 
     | 
    
         | 
| 
       1003 
1003 
     | 
    
         
             
            /* parse the 3rd byte of a varint into p->parsing.value
         
     | 
| 
       1004 
1004 
     | 
    
         
             
               no overflow is possible */
         
     | 
| 
       1005 
     | 
    
         
            -
            static int parse_value2(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       1006 
     | 
    
         
            -
                                    const  
     | 
| 
      
 1005 
     | 
    
         
            +
            static int parse_value2(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 1006 
     | 
    
         
            +
                                    const uint8_t *end) {
         
     | 
| 
       1007 
1007 
     | 
    
         
             
              if (cur == end) {
         
     | 
| 
       1008 
1008 
     | 
    
         
             
                p->state = parse_value2;
         
     | 
| 
       1009 
1009 
     | 
    
         
             
                return 1;
         
     | 
| 
       1010 
1010 
     | 
    
         
             
              }
         
     | 
| 
       1011 
1011 
     | 
    
         | 
| 
       1012 
     | 
    
         
            -
              *p->parsing.value += ((( 
     | 
| 
      
 1012 
     | 
    
         
            +
              *p->parsing.value += (((uint32_t)*cur) & 0x7f) << 14;
         
     | 
| 
       1013 
1013 
     | 
    
         | 
| 
       1014 
1014 
     | 
    
         
             
              if ((*cur) & 0x80) {
         
     | 
| 
       1015 
1015 
     | 
    
         
             
                return parse_value3(p, cur + 1, end);
         
     | 
| 
         @@ -1020,14 +1020,14 @@ static int parse_value2(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       1020 
1020 
     | 
    
         | 
| 
       1021 
1021 
     | 
    
         
             
            /* parse the 4th byte of a varint into p->parsing.value
         
     | 
| 
       1022 
1022 
     | 
    
         
             
               no overflow is possible */
         
     | 
| 
       1023 
     | 
    
         
            -
            static int parse_value3(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       1024 
     | 
    
         
            -
                                    const  
     | 
| 
      
 1023 
     | 
    
         
            +
            static int parse_value3(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 1024 
     | 
    
         
            +
                                    const uint8_t *end) {
         
     | 
| 
       1025 
1025 
     | 
    
         
             
              if (cur == end) {
         
     | 
| 
       1026 
1026 
     | 
    
         
             
                p->state = parse_value3;
         
     | 
| 
       1027 
1027 
     | 
    
         
             
                return 1;
         
     | 
| 
       1028 
1028 
     | 
    
         
             
              }
         
     | 
| 
       1029 
1029 
     | 
    
         | 
| 
       1030 
     | 
    
         
            -
              *p->parsing.value += ((( 
     | 
| 
      
 1030 
     | 
    
         
            +
              *p->parsing.value += (((uint32_t)*cur) & 0x7f) << 21;
         
     | 
| 
       1031 
1031 
     | 
    
         | 
| 
       1032 
1032 
     | 
    
         
             
              if ((*cur) & 0x80) {
         
     | 
| 
       1033 
1033 
     | 
    
         
             
                return parse_value4(p, cur + 1, end);
         
     | 
| 
         @@ -1038,11 +1038,11 @@ static int parse_value3(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       1038 
1038 
     | 
    
         | 
| 
       1039 
1039 
     | 
    
         
             
            /* parse the 5th byte of a varint into p->parsing.value
         
     | 
| 
       1040 
1040 
     | 
    
         
             
               depending on the byte, we may overflow, and care must be taken */
         
     | 
| 
       1041 
     | 
    
         
            -
            static int parse_value4(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       1042 
     | 
    
         
            -
                                    const  
     | 
| 
       1043 
     | 
    
         
            -
               
     | 
| 
       1044 
     | 
    
         
            -
               
     | 
| 
       1045 
     | 
    
         
            -
               
     | 
| 
      
 1041 
     | 
    
         
            +
            static int parse_value4(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 1042 
     | 
    
         
            +
                                    const uint8_t *end) {
         
     | 
| 
      
 1043 
     | 
    
         
            +
              uint8_t c;
         
     | 
| 
      
 1044 
     | 
    
         
            +
              uint32_t cur_value;
         
     | 
| 
      
 1045 
     | 
    
         
            +
              uint32_t add_value;
         
     | 
| 
       1046 
1046 
     | 
    
         | 
| 
       1047 
1047 
     | 
    
         
             
              if (cur == end) {
         
     | 
| 
       1048 
1048 
     | 
    
         
             
                p->state = parse_value4;
         
     | 
| 
         @@ -1055,7 +1055,7 @@ static int parse_value4(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       1055 
1055 
     | 
    
         
             
              }
         
     | 
| 
       1056 
1056 
     | 
    
         | 
| 
       1057 
1057 
     | 
    
         
             
              cur_value = *p->parsing.value;
         
     | 
| 
       1058 
     | 
    
         
            -
              add_value = (( 
     | 
| 
      
 1058 
     | 
    
         
            +
              add_value = ((uint32_t)c) << 28;
         
     | 
| 
       1059 
1059 
     | 
    
         
             
              if (add_value > 0xffffffffu - cur_value) {
         
     | 
| 
       1060 
1060 
     | 
    
         
             
                goto error;
         
     | 
| 
       1061 
1061 
     | 
    
         
             
              }
         
     | 
| 
         @@ -1079,8 +1079,8 @@ error: 
     | 
|
| 
       1079 
1079 
     | 
    
         
             
            /* parse any trailing bytes in a varint: it's possible to append an arbitrary
         
     | 
| 
       1080 
1080 
     | 
    
         
             
               number of 0x80's and not affect the value - a zero will terminate - and
         
     | 
| 
       1081 
1081 
     | 
    
         
             
               anything else will overflow */
         
     | 
| 
       1082 
     | 
    
         
            -
            static int parse_value5up(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       1083 
     | 
    
         
            -
                                      const  
     | 
| 
      
 1082 
     | 
    
         
            +
            static int parse_value5up(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 1083 
     | 
    
         
            +
                                      const uint8_t *end) {
         
     | 
| 
       1084 
1084 
     | 
    
         
             
              while (cur != end && *cur == 0x80) {
         
     | 
| 
       1085 
1085 
     | 
    
         
             
                ++cur;
         
     | 
| 
       1086 
1086 
     | 
    
         
             
              }
         
     | 
| 
         @@ -1102,8 +1102,8 @@ static int parse_value5up(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       1102 
1102 
     | 
    
         
             
            }
         
     | 
| 
       1103 
1103 
     | 
    
         | 
| 
       1104 
1104 
     | 
    
         
             
            /* parse a string prefix */
         
     | 
| 
       1105 
     | 
    
         
            -
            static int parse_string_prefix(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       1106 
     | 
    
         
            -
                                           const  
     | 
| 
      
 1105 
     | 
    
         
            +
            static int parse_string_prefix(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 1106 
     | 
    
         
            +
                                           const uint8_t *end) {
         
     | 
| 
       1107 
1107 
     | 
    
         
             
              if (cur == end) {
         
     | 
| 
       1108 
1108 
     | 
    
         
             
                p->state = parse_string_prefix;
         
     | 
| 
       1109 
1109 
     | 
    
         
             
                return 1;
         
     | 
| 
         @@ -1121,22 +1121,22 @@ static int parse_string_prefix(grpc_chttp2_hpack_parser *p, 
     | 
|
| 
       1121 
1121 
     | 
    
         | 
| 
       1122 
1122 
     | 
    
         
             
            /* append some bytes to a string */
         
     | 
| 
       1123 
1123 
     | 
    
         
             
            static void append_bytes(grpc_chttp2_hpack_parser_string *str,
         
     | 
| 
       1124 
     | 
    
         
            -
                                     const  
     | 
| 
      
 1124 
     | 
    
         
            +
                                     const uint8_t *data, size_t length) {
         
     | 
| 
       1125 
1125 
     | 
    
         
             
              if (length + str->length > str->capacity) {
         
     | 
| 
       1126 
     | 
    
         
            -
                GPR_ASSERT(str->length + length <=  
     | 
| 
       1127 
     | 
    
         
            -
                str->capacity = ( 
     | 
| 
      
 1126 
     | 
    
         
            +
                GPR_ASSERT(str->length + length <= UINT32_MAX);
         
     | 
| 
      
 1127 
     | 
    
         
            +
                str->capacity = (uint32_t)(str->length + length);
         
     | 
| 
       1128 
1128 
     | 
    
         
             
                str->str = gpr_realloc(str->str, str->capacity);
         
     | 
| 
       1129 
1129 
     | 
    
         
             
              }
         
     | 
| 
       1130 
1130 
     | 
    
         
             
              memcpy(str->str + str->length, data, length);
         
     | 
| 
       1131 
     | 
    
         
            -
              GPR_ASSERT(length <=  
     | 
| 
       1132 
     | 
    
         
            -
              str->length += ( 
     | 
| 
      
 1131 
     | 
    
         
            +
              GPR_ASSERT(length <= UINT32_MAX - str->length);
         
     | 
| 
      
 1132 
     | 
    
         
            +
              str->length += (uint32_t)length;
         
     | 
| 
       1133 
1133 
     | 
    
         
             
            }
         
     | 
| 
       1134 
1134 
     | 
    
         | 
| 
       1135 
     | 
    
         
            -
            static int append_string(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       1136 
     | 
    
         
            -
                                     const  
     | 
| 
      
 1135 
     | 
    
         
            +
            static int append_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 1136 
     | 
    
         
            +
                                     const uint8_t *end) {
         
     | 
| 
       1137 
1137 
     | 
    
         
             
              grpc_chttp2_hpack_parser_string *str = p->parsing.str;
         
     | 
| 
       1138 
     | 
    
         
            -
               
     | 
| 
       1139 
     | 
    
         
            -
               
     | 
| 
      
 1138 
     | 
    
         
            +
              uint32_t bits;
         
     | 
| 
      
 1139 
     | 
    
         
            +
              uint8_t decoded[3];
         
     | 
| 
       1140 
1140 
     | 
    
         
             
              switch ((binary_state)p->binary) {
         
     | 
| 
       1141 
1141 
     | 
    
         
             
                case NOT_BINARY:
         
     | 
| 
       1142 
1142 
     | 
    
         
             
                  append_bytes(str, cur, (size_t)(end - cur));
         
     | 
| 
         @@ -1197,9 +1197,9 @@ static int append_string(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       1197 
1197 
     | 
    
         
             
                    goto b64_byte3;
         
     | 
| 
       1198 
1198 
     | 
    
         
             
                  p->base64_buffer |= bits;
         
     | 
| 
       1199 
1199 
     | 
    
         
             
                  bits = p->base64_buffer;
         
     | 
| 
       1200 
     | 
    
         
            -
                  decoded[0] = ( 
     | 
| 
       1201 
     | 
    
         
            -
                  decoded[1] = ( 
     | 
| 
       1202 
     | 
    
         
            -
                  decoded[2] = ( 
     | 
| 
      
 1200 
     | 
    
         
            +
                  decoded[0] = (uint8_t)(bits >> 16);
         
     | 
| 
      
 1201 
     | 
    
         
            +
                  decoded[1] = (uint8_t)(bits >> 8);
         
     | 
| 
      
 1202 
     | 
    
         
            +
                  decoded[2] = (uint8_t)(bits);
         
     | 
| 
       1203 
1203 
     | 
    
         
             
                  append_bytes(str, decoded, 3);
         
     | 
| 
       1204 
1204 
     | 
    
         
             
                  goto b64_byte0;
         
     | 
| 
       1205 
1205 
     | 
    
         
             
              }
         
     | 
| 
         @@ -1208,9 +1208,9 @@ static int append_string(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       1208 
1208 
     | 
    
         | 
| 
       1209 
1209 
     | 
    
         
             
            /* append a null terminator to a string */
         
     | 
| 
       1210 
1210 
     | 
    
         
             
            static int finish_str(grpc_chttp2_hpack_parser *p) {
         
     | 
| 
       1211 
     | 
    
         
            -
               
     | 
| 
       1212 
     | 
    
         
            -
               
     | 
| 
       1213 
     | 
    
         
            -
               
     | 
| 
      
 1211 
     | 
    
         
            +
              uint8_t terminator = 0;
         
     | 
| 
      
 1212 
     | 
    
         
            +
              uint8_t decoded[2];
         
     | 
| 
      
 1213 
     | 
    
         
            +
              uint32_t bits;
         
     | 
| 
       1214 
1214 
     | 
    
         
             
              grpc_chttp2_hpack_parser_string *str = p->parsing.str;
         
     | 
| 
       1215 
1215 
     | 
    
         
             
              switch ((binary_state)p->binary) {
         
     | 
| 
       1216 
1216 
     | 
    
         
             
                case NOT_BINARY:
         
     | 
| 
         @@ -1227,7 +1227,7 @@ static int finish_str(grpc_chttp2_hpack_parser *p) { 
     | 
|
| 
       1227 
1227 
     | 
    
         
             
                            bits & 0xffff);
         
     | 
| 
       1228 
1228 
     | 
    
         
             
                    return 0;
         
     | 
| 
       1229 
1229 
     | 
    
         
             
                  }
         
     | 
| 
       1230 
     | 
    
         
            -
                  decoded[0] = ( 
     | 
| 
      
 1230 
     | 
    
         
            +
                  decoded[0] = (uint8_t)(bits >> 16);
         
     | 
| 
       1231 
1231 
     | 
    
         
             
                  append_bytes(str, decoded, 1);
         
     | 
| 
       1232 
1232 
     | 
    
         
             
                  break;
         
     | 
| 
       1233 
1233 
     | 
    
         
             
                case B64_BYTE3:
         
     | 
| 
         @@ -1237,8 +1237,8 @@ static int finish_str(grpc_chttp2_hpack_parser *p) { 
     | 
|
| 
       1237 
1237 
     | 
    
         
             
                            bits & 0xff);
         
     | 
| 
       1238 
1238 
     | 
    
         
             
                    return 0;
         
     | 
| 
       1239 
1239 
     | 
    
         
             
                  }
         
     | 
| 
       1240 
     | 
    
         
            -
                  decoded[0] = ( 
     | 
| 
       1241 
     | 
    
         
            -
                  decoded[1] = ( 
     | 
| 
      
 1240 
     | 
    
         
            +
                  decoded[0] = (uint8_t)(bits >> 16);
         
     | 
| 
      
 1241 
     | 
    
         
            +
                  decoded[1] = (uint8_t)(bits >> 8);
         
     | 
| 
       1242 
1242 
     | 
    
         
             
                  append_bytes(str, decoded, 2);
         
     | 
| 
       1243 
1243 
     | 
    
         
             
                  break;
         
     | 
| 
       1244 
1244 
     | 
    
         
             
              }
         
     | 
| 
         @@ -1248,12 +1248,12 @@ static int finish_str(grpc_chttp2_hpack_parser *p) { 
     | 
|
| 
       1248 
1248 
     | 
    
         
             
            }
         
     | 
| 
       1249 
1249 
     | 
    
         | 
| 
       1250 
1250 
     | 
    
         
             
            /* decode a nibble from a huffman encoded stream */
         
     | 
| 
       1251 
     | 
    
         
            -
            static int huff_nibble(grpc_chttp2_hpack_parser *p,  
     | 
| 
       1252 
     | 
    
         
            -
               
     | 
| 
       1253 
     | 
    
         
            -
               
     | 
| 
      
 1251 
     | 
    
         
            +
            static int huff_nibble(grpc_chttp2_hpack_parser *p, uint8_t nibble) {
         
     | 
| 
      
 1252 
     | 
    
         
            +
              int16_t emit = emit_sub_tbl[16 * emit_tbl[p->huff_state] + nibble];
         
     | 
| 
      
 1253 
     | 
    
         
            +
              int16_t next = next_sub_tbl[16 * next_tbl[p->huff_state] + nibble];
         
     | 
| 
       1254 
1254 
     | 
    
         
             
              if (emit != -1) {
         
     | 
| 
       1255 
1255 
     | 
    
         
             
                if (emit >= 0 && emit < 256) {
         
     | 
| 
       1256 
     | 
    
         
            -
                   
     | 
| 
      
 1256 
     | 
    
         
            +
                  uint8_t c = (uint8_t)emit;
         
     | 
| 
       1257 
1257 
     | 
    
         
             
                  if (!append_string(p, &c, (&c) + 1)) return 0;
         
     | 
| 
       1258 
1258 
     | 
    
         
             
                } else {
         
     | 
| 
       1259 
1259 
     | 
    
         
             
                  assert(emit == 256);
         
     | 
| 
         @@ -1264,8 +1264,8 @@ static int huff_nibble(grpc_chttp2_hpack_parser *p, gpr_uint8 nibble) { 
     | 
|
| 
       1264 
1264 
     | 
    
         
             
            }
         
     | 
| 
       1265 
1265 
     | 
    
         | 
| 
       1266 
1266 
     | 
    
         
             
            /* decode full bytes from a huffman encoded stream */
         
     | 
| 
       1267 
     | 
    
         
            -
            static int add_huff_bytes(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       1268 
     | 
    
         
            -
                                      const  
     | 
| 
      
 1267 
     | 
    
         
            +
            static int add_huff_bytes(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 1268 
     | 
    
         
            +
                                      const uint8_t *end) {
         
     | 
| 
       1269 
1269 
     | 
    
         
             
              for (; cur != end; ++cur) {
         
     | 
| 
       1270 
1270 
     | 
    
         
             
                if (!huff_nibble(p, *cur >> 4) || !huff_nibble(p, *cur & 0xf)) return 0;
         
     | 
| 
       1271 
1271 
     | 
    
         
             
              }
         
     | 
| 
         @@ -1274,8 +1274,8 @@ static int add_huff_bytes(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       1274 
1274 
     | 
    
         | 
| 
       1275 
1275 
     | 
    
         
             
            /* decode some string bytes based on the current decoding mode
         
     | 
| 
       1276 
1276 
     | 
    
         
             
               (huffman or not) */
         
     | 
| 
       1277 
     | 
    
         
            -
            static int add_str_bytes(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       1278 
     | 
    
         
            -
                                     const  
     | 
| 
      
 1277 
     | 
    
         
            +
            static int add_str_bytes(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 1278 
     | 
    
         
            +
                                     const uint8_t *end) {
         
     | 
| 
       1279 
1279 
     | 
    
         
             
              if (p->huff) {
         
     | 
| 
       1280 
1280 
     | 
    
         
             
                return add_huff_bytes(p, cur, end);
         
     | 
| 
       1281 
1281 
     | 
    
         
             
              } else {
         
     | 
| 
         @@ -1284,8 +1284,8 @@ static int add_str_bytes(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       1284 
1284 
     | 
    
         
             
            }
         
     | 
| 
       1285 
1285 
     | 
    
         | 
| 
       1286 
1286 
     | 
    
         
             
            /* parse a string - tries to do large chunks at a time */
         
     | 
| 
       1287 
     | 
    
         
            -
            static int parse_string(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       1288 
     | 
    
         
            -
                                    const  
     | 
| 
      
 1287 
     | 
    
         
            +
            static int parse_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 1288 
     | 
    
         
            +
                                    const uint8_t *end) {
         
     | 
| 
       1289 
1289 
     | 
    
         
             
              size_t remaining = p->strlen - p->strgot;
         
     | 
| 
       1290 
1290 
     | 
    
         
             
              size_t given = (size_t)(end - cur);
         
     | 
| 
       1291 
1291 
     | 
    
         
             
              if (remaining <= given) {
         
     | 
| 
         @@ -1293,16 +1293,16 @@ static int parse_string(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       1293 
1293 
     | 
    
         
             
                       parse_next(p, cur + remaining, end);
         
     | 
| 
       1294 
1294 
     | 
    
         
             
              } else {
         
     | 
| 
       1295 
1295 
     | 
    
         
             
                if (!add_str_bytes(p, cur, cur + given)) return 0;
         
     | 
| 
       1296 
     | 
    
         
            -
                GPR_ASSERT(given <=  
     | 
| 
       1297 
     | 
    
         
            -
                p->strgot += ( 
     | 
| 
      
 1296 
     | 
    
         
            +
                GPR_ASSERT(given <= UINT32_MAX - p->strgot);
         
     | 
| 
      
 1297 
     | 
    
         
            +
                p->strgot += (uint32_t)given;
         
     | 
| 
       1298 
1298 
     | 
    
         
             
                p->state = parse_string;
         
     | 
| 
       1299 
1299 
     | 
    
         
             
                return 1;
         
     | 
| 
       1300 
1300 
     | 
    
         
             
              }
         
     | 
| 
       1301 
1301 
     | 
    
         
             
            }
         
     | 
| 
       1302 
1302 
     | 
    
         | 
| 
       1303 
1303 
     | 
    
         
             
            /* begin parsing a string - performs setup, calls parse_string */
         
     | 
| 
       1304 
     | 
    
         
            -
            static int begin_parse_string(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       1305 
     | 
    
         
            -
                                          const  
     | 
| 
      
 1304 
     | 
    
         
            +
            static int begin_parse_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 1305 
     | 
    
         
            +
                                          const uint8_t *end, uint8_t binary,
         
     | 
| 
       1306 
1306 
     | 
    
         
             
                                          grpc_chttp2_hpack_parser_string *str) {
         
     | 
| 
       1307 
1307 
     | 
    
         
             
              p->strgot = 0;
         
     | 
| 
       1308 
1308 
     | 
    
         
             
              str->length = 0;
         
     | 
| 
         @@ -1313,8 +1313,8 @@ static int begin_parse_string(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       1313 
1313 
     | 
    
         
             
            }
         
     | 
| 
       1314 
1314 
     | 
    
         | 
| 
       1315 
1315 
     | 
    
         
             
            /* parse the key string */
         
     | 
| 
       1316 
     | 
    
         
            -
            static int parse_key_string(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       1317 
     | 
    
         
            -
                                        const  
     | 
| 
      
 1316 
     | 
    
         
            +
            static int parse_key_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 1317 
     | 
    
         
            +
                                        const uint8_t *end) {
         
     | 
| 
       1318 
1318 
     | 
    
         
             
              return begin_parse_string(p, cur, end, NOT_BINARY, &p->key);
         
     | 
| 
       1319 
1319 
     | 
    
         
             
            }
         
     | 
| 
       1320 
1320 
     | 
    
         | 
| 
         @@ -1340,8 +1340,8 @@ static is_binary_header is_binary_indexed_header(grpc_chttp2_hpack_parser *p) { 
     | 
|
| 
       1340 
1340 
     | 
    
         
             
            }
         
     | 
| 
       1341 
1341 
     | 
    
         | 
| 
       1342 
1342 
     | 
    
         
             
            /* parse the value string */
         
     | 
| 
       1343 
     | 
    
         
            -
            static int parse_value_string(grpc_chttp2_hpack_parser *p, const  
     | 
| 
       1344 
     | 
    
         
            -
                                          const  
     | 
| 
      
 1343 
     | 
    
         
            +
            static int parse_value_string(grpc_chttp2_hpack_parser *p, const uint8_t *cur,
         
     | 
| 
      
 1344 
     | 
    
         
            +
                                          const uint8_t *end, is_binary_header type) {
         
     | 
| 
       1345 
1345 
     | 
    
         
             
              switch (type) {
         
     | 
| 
       1346 
1346 
     | 
    
         
             
                case BINARY_HEADER:
         
     | 
| 
       1347 
1347 
     | 
    
         
             
                  return begin_parse_string(p, cur, end, B64_BYTE0, &p->value);
         
     | 
| 
         @@ -1355,14 +1355,14 @@ static int parse_value_string(grpc_chttp2_hpack_parser *p, const gpr_uint8 *cur, 
     | 
|
| 
       1355 
1355 
     | 
    
         
             
            }
         
     | 
| 
       1356 
1356 
     | 
    
         | 
| 
       1357 
1357 
     | 
    
         
             
            static int parse_value_string_with_indexed_key(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       1358 
     | 
    
         
            -
                                                           const  
     | 
| 
       1359 
     | 
    
         
            -
                                                           const  
     | 
| 
      
 1358 
     | 
    
         
            +
                                                           const uint8_t *cur,
         
     | 
| 
      
 1359 
     | 
    
         
            +
                                                           const uint8_t *end) {
         
     | 
| 
       1360 
1360 
     | 
    
         
             
              return parse_value_string(p, cur, end, is_binary_indexed_header(p));
         
     | 
| 
       1361 
1361 
     | 
    
         
             
            }
         
     | 
| 
       1362 
1362 
     | 
    
         | 
| 
       1363 
1363 
     | 
    
         
             
            static int parse_value_string_with_literal_key(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       1364 
     | 
    
         
            -
                                                           const  
     | 
| 
       1365 
     | 
    
         
            -
                                                           const  
     | 
| 
      
 1364 
     | 
    
         
            +
                                                           const uint8_t *cur,
         
     | 
| 
      
 1365 
     | 
    
         
            +
                                                           const uint8_t *end) {
         
     | 
| 
       1366 
1366 
     | 
    
         
             
              return parse_value_string(p, cur, end, is_binary_literal_header(p));
         
     | 
| 
       1367 
1367 
     | 
    
         
             
            }
         
     | 
| 
       1368 
1368 
     | 
    
         | 
| 
         @@ -1398,7 +1398,7 @@ void grpc_chttp2_hpack_parser_destroy(grpc_chttp2_hpack_parser *p) { 
     | 
|
| 
       1398 
1398 
     | 
    
         
             
            }
         
     | 
| 
       1399 
1399 
     | 
    
         | 
| 
       1400 
1400 
     | 
    
         
             
            int grpc_chttp2_hpack_parser_parse(grpc_chttp2_hpack_parser *p,
         
     | 
| 
       1401 
     | 
    
         
            -
                                               const  
     | 
| 
      
 1401 
     | 
    
         
            +
                                               const uint8_t *beg, const uint8_t *end) {
         
     | 
| 
       1402 
1402 
     | 
    
         
             
              /* TODO(ctiller): limit the distance of end from beg, and perform multiple
         
     | 
| 
       1403 
1403 
     | 
    
         
             
                 steps in the event of a large chunk of data to limit
         
     | 
| 
       1404 
1404 
     | 
    
         
             
                 stack space usage when no tail call optimization is
         
     |