aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/lib/transport/static_metadata.c
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2016-11-18 08:10:46 -0800
committerGravatar Craig Tiller <ctiller@google.com>2016-11-18 08:10:46 -0800
commitb2348ba1db688751056faed43fb6235762feab6b (patch)
tree78f66cce973f6e818a47f94d4b5395c57bb8050c /src/core/lib/transport/static_metadata.c
parent1ad51e021f710e9cda1ceaf7038b3bc72e9a55c1 (diff)
Check length as well as start when determining static metadata id
Diffstat (limited to 'src/core/lib/transport/static_metadata.c')
-rw-r--r--src/core/lib/transport/static_metadata.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/core/lib/transport/static_metadata.c b/src/core/lib/transport/static_metadata.c
index b065af73f9..a28873b921 100644
--- a/src/core/lib/transport/static_metadata.c
+++ b/src/core/lib/transport/static_metadata.c
@@ -396,10 +396,14 @@ static const uint8_t g_revmap[] = {
int grpc_static_metadata_index(grpc_slice slice) {
if (GRPC_SLICE_LENGTH(slice) == 0) return 33;
- size_t ofs = (size_t)(GRPC_SLICE_START_PTR(slice) - g_raw_bytes);
+ if (slice.refcount != &g_refcnt) return -1;
+ size_t ofs = (size_t)(slice.data.refcounted.bytes - g_raw_bytes);
if (ofs > sizeof(g_revmap)) return -1;
uint8_t id = g_revmap[ofs];
- return id == 255 ? -1 : id;
+ return id == 255 ? -1 : (grpc_static_slice_table[id].data.refcounted.length ==
+ slice.data.refcounted.length
+ ? id
+ : -1);
}
uintptr_t grpc_static_mdelem_user_data[GRPC_STATIC_MDELEM_COUNT] = {