diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c
index 10d4e9c30a77f80df65d9ab073668968123e925f..4194d9f1bd824d81ba8fa807aa05fc253256b241 100644
--- a/src/core/transport/chttp2_transport.c
+++ b/src/core/transport/chttp2_transport.c
@@ -1767,7 +1767,7 @@ static int process_read(transport *t, gpr_slice slice) {
     /* fallthrough */
     case DTS_FH_5:
       GPR_ASSERT(cur < end);
-      t->incoming_stream_id = (((gpr_uint32)*cur) << 24) & 0x7f;
+      t->incoming_stream_id = (((gpr_uint32)*cur) & 0x7f) << 24;
       if (++cur == end) {
         t->deframe_state = DTS_FH_6;
         return 1;