diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 41a0196..9d2b4cd 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -5616,8 +5616,6 @@
   struct {
     struct {
       uint32_t v_depth;
-      uint32_t v_token_length;
-      uint8_t v_c;
     } s_decode_tokens[1];
   } private_data;
 
@@ -16396,8 +16394,6 @@
   uint32_t coro_susp_point = self->private_impl.p_decode_tokens[0];
   if (coro_susp_point) {
     v_depth = self->private_data.s_decode_tokens[0].v_depth;
-    v_token_length = self->private_data.s_decode_tokens[0].v_token_length;
-    v_c = self->private_data.s_decode_tokens[0].v_c;
   }
   switch (coro_susp_point) {
     WUFFS_BASE__COROUTINE_SUSPENSION_POINT_0;
@@ -16426,16 +16422,17 @@
         v_c = wuffs_base__load_u8be__no_bounds_check(iop_a_src);
         if ((24 <= (v_c & 31)) && ((v_c & 31) <= 27)) {
           v_token_length = (1 + (((uint32_t)(1)) << (v_c & 3)));
-          if (((uint64_t)(io2_a_src - iop_a_src)) < ((uint64_t)(v_token_length))) {
-            if (a_src && a_src->meta.closed) {
-              status = wuffs_base__make_status(wuffs_cbor__error__bad_input);
-              goto exit;
-            }
+          if (((uint64_t)(io2_a_src - iop_a_src)) >= ((uint64_t)(v_token_length))) {
+            (iop_a_src += v_token_length, wuffs_base__make_empty_struct());
+          } else if (a_src && a_src->meta.closed) {
+            status = wuffs_base__make_status(wuffs_cbor__error__bad_input);
+            goto exit;
+          } else {
             status = wuffs_base__make_status(wuffs_base__suspension__short_read);
             WUFFS_BASE__COROUTINE_SUSPENSION_POINT_MAYBE_SUSPEND(3);
+            v_c = 0;
             goto label__outer__continue;
           }
-          (iop_a_src += v_token_length, wuffs_base__make_empty_struct());
         } else {
           (iop_a_src += 1, wuffs_base__make_empty_struct());
         }
@@ -16480,8 +16477,6 @@
   self->private_impl.p_decode_tokens[0] = wuffs_base__status__is_suspension(&status) ? coro_susp_point : 0;
   self->private_impl.active_coroutine = wuffs_base__status__is_suspension(&status) ? 1 : 0;
   self->private_data.s_decode_tokens[0].v_depth = v_depth;
-  self->private_data.s_decode_tokens[0].v_token_length = v_token_length;
-  self->private_data.s_decode_tokens[0].v_c = v_c;
 
   goto exit;
   exit:
diff --git a/std/cbor/decode_cbor.wuffs b/std/cbor/decode_cbor.wuffs
index 90d89b8..fefdb5c 100644
--- a/std/cbor/decode_cbor.wuffs
+++ b/std/cbor/decode_cbor.wuffs
@@ -55,14 +55,15 @@
 		c = args.src.peek_u8()
 		if (0x18 <= (c & 0x1F)) and ((c & 0x1F) <= 0x1B) {
 			token_length = 1 + ((1 as base.u32) << (c & 0x03))
-			if args.src.available() < (token_length as base.u64) {
-				if args.src.is_closed() {
-					return "#bad input"
-				}
+			if args.src.available() >= (token_length as base.u64) {
+				args.src.skip_u32_fast!(actual: token_length, worst_case: token_length)
+			} else if args.src.is_closed() {
+				return "#bad input"
+			} else {
 				yield? base."$short read"
+				c = 0
 				continue.outer
 			}
-			args.src.skip_u32_fast!(actual: token_length, worst_case: token_length)
 		} else {
 			args.src.skip_u32_fast!(actual: 1, worst_case: 1)
 		}
