diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index d4afcc9..7c75d22 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -6995,7 +6995,7 @@
 
 #define WUFFS_JSON__DECODER_DST_TOKEN_BUFFER_LENGTH_MIN_INCL 1
 
-#define WUFFS_JSON__DECODER_SRC_IO_BUFFER_LENGTH_MIN_INCL 2048
+#define WUFFS_JSON__DECODER_SRC_IO_BUFFER_LENGTH_MIN_INCL 100
 
 #define WUFFS_JSON__QUIRK_ALLOW_ASCII_CONTROL_CODES 1225364480
 
@@ -23250,7 +23250,7 @@
 
 // ---------------- Private Consts
 
-#define WUFFS_JSON__DECODER_NUMBER_LENGTH_MAX_INCL 2047
+#define WUFFS_JSON__DECODER_NUMBER_LENGTH_MAX_INCL 99
 
 static const uint8_t
 WUFFS_JSON__LUT_BACKSLASHES[256]WUFFS_BASE__POTENTIALLY_UNUSED = {
@@ -24375,12 +24375,12 @@
             if (a_src) {
               iop_a_src = a_src->data.ptr + a_src->meta.ri;
             }
-            v_number_status = (v_number_length >> 12);
+            v_number_status = (v_number_length >> 8);
             v_vminor = 10486787;
-            if ((v_number_length & 2048) != 0) {
+            if ((v_number_length & 128) != 0) {
               v_vminor = 10486785;
             }
-            v_number_length = (v_number_length & 2047);
+            v_number_length = (v_number_length & 127);
             if (v_number_status == 0) {
               *iop_a_dst++ = wuffs_base__make_token(
                   (((uint64_t)(v_vminor)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
@@ -24707,7 +24707,7 @@
     v_n = 0;
     if (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
       if ( ! (a_src && a_src->meta.closed)) {
-        v_n |= 12288;
+        v_n |= 768;
       }
       goto label__goto_done__break;
     }
@@ -24718,9 +24718,9 @@
       (iop_a_src += 1, wuffs_base__make_empty_struct());
       if (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
         if ( ! (a_src && a_src->meta.closed)) {
-          v_n |= 12288;
+          v_n |= 768;
         }
-        v_n |= 4096;
+        v_n |= 256;
         goto label__goto_done__break;
       }
       v_c = wuffs_base__load_u8be__no_bounds_check(iop_a_src);
@@ -24736,26 +24736,26 @@
       if (a_src) {
         iop_a_src = a_src->data.ptr + a_src->meta.ri;
       }
-      if (v_n > 2047) {
+      if (v_n > 99) {
         goto label__goto_done__break;
       }
     }
     if (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
       if ( ! (a_src && a_src->meta.closed)) {
-        v_n |= 12288;
+        v_n |= 768;
       }
       goto label__goto_done__break;
     }
     v_c = wuffs_base__load_u8be__no_bounds_check(iop_a_src);
     if (v_c != 46) {
     } else {
-      if (v_n >= 2047) {
-        v_n |= 8192;
+      if (v_n >= 99) {
+        v_n |= 512;
         goto label__goto_done__break;
       }
       v_n += 1;
       (iop_a_src += 1, wuffs_base__make_empty_struct());
-      v_floating_point = 2048;
+      v_floating_point = 128;
       if (a_src) {
         a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
       }
@@ -24763,12 +24763,12 @@
       if (a_src) {
         iop_a_src = a_src->data.ptr + a_src->meta.ri;
       }
-      if (v_n > 2047) {
+      if (v_n > 99) {
         goto label__goto_done__break;
       }
       if (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
         if ( ! (a_src && a_src->meta.closed)) {
-          v_n |= 12288;
+          v_n |= 768;
         }
         goto label__goto_done__break;
       }
@@ -24777,25 +24777,25 @@
     if ((v_c != 69) && (v_c != 101)) {
       goto label__goto_done__break;
     }
-    if (v_n >= 2047) {
-      v_n |= 8192;
+    if (v_n >= 99) {
+      v_n |= 512;
       goto label__goto_done__break;
     }
     v_n += 1;
     (iop_a_src += 1, wuffs_base__make_empty_struct());
-    v_floating_point = 2048;
+    v_floating_point = 128;
     if (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
       if ( ! (a_src && a_src->meta.closed)) {
-        v_n |= 12288;
+        v_n |= 768;
       }
-      v_n |= 4096;
+      v_n |= 256;
       goto label__goto_done__break;
     }
     v_c = wuffs_base__load_u8be__no_bounds_check(iop_a_src);
     if ((v_c != 43) && (v_c != 45)) {
     } else {
-      if (v_n >= 2047) {
-        v_n |= 8192;
+      if (v_n >= 99) {
+        v_n |= 512;
         goto label__goto_done__break;
       }
       v_n += 1;
@@ -24842,7 +24842,7 @@
   while (true) {
     if (((uint64_t)(io2_a_src - iop_a_src)) <= 0) {
       if ( ! (a_src && a_src->meta.closed)) {
-        v_n |= 12288;
+        v_n |= 768;
       }
       goto label__0__break;
     }
@@ -24850,8 +24850,8 @@
     if (0 == WUFFS_JSON__LUT_DECIMAL_DIGITS[v_c]) {
       goto label__0__break;
     }
-    if (v_n >= 2047) {
-      v_n |= 8192;
+    if (v_n >= 99) {
+      v_n |= 512;
       goto label__0__break;
     }
     v_n += 1;
@@ -24859,7 +24859,7 @@
   }
   label__0__break:;
   if (v_n == a_n) {
-    v_n |= 4096;
+    v_n |= 256;
   }
   if (a_src) {
     a_src->meta.ri = ((size_t)(iop_a_src - a_src->data.ptr));
diff --git a/std/json/common_consts.wuffs b/std/json/common_consts.wuffs
index 31787fc..7c5b445 100644
--- a/std/json/common_consts.wuffs
+++ b/std/json/common_consts.wuffs
@@ -41,8 +41,8 @@
 // maximum possible src.meta.ri and src.meta.wi values). It is a property of
 // the backing array's length, not the length of the JSON-formatted input per
 // se. It is perfectly valid to decode "[1,2]" (of length 5) as JSON, as long
-// as that content is placed in an io_buffer whose data.len is at least 2048.
-pub const DECODER_SRC_IO_BUFFER_LENGTH_MIN_INCL : base.u64 = 2048
+// as that content is placed in an io_buffer whose data.len is at least 100.
+pub const DECODER_SRC_IO_BUFFER_LENGTH_MIN_INCL : base.u64 = 100
 
 // DECODER_NUMBER_LENGTH_MAX_INCL is the longest supported byte length for a
 // JSON number. Unlike JSON strings, this package's tokenizer never splits a
@@ -52,7 +52,7 @@
 //
 // The JSON spec itself does not define a limit, but allows implementations to
 // set their own limits.
-pri const DECODER_NUMBER_LENGTH_MAX_INCL : base.u64 = 2047
+pri const DECODER_NUMBER_LENGTH_MAX_INCL : base.u64 = 99
 
 // --------
 
diff --git a/std/json/decode_json.wuffs b/std/json/decode_json.wuffs
index 0ac652c..7407994 100644
--- a/std/json/decode_json.wuffs
+++ b/std/json/decode_json.wuffs
@@ -75,7 +75,7 @@
 	// https://github.com/google/wuffs/commit/86d3b89f9a6578d964a4b6d71e21dfc9bb702b44
 
 	var vminor            : base.u32[..= 0xFF_FFFF]
-	var number_length     : base.u32[..= 0x3FFF]
+	var number_length     : base.u32[..= 0x3FF]
 	var number_status     : base.u32[..= 0x3]
 	var string_length     : base.u32[..= 0xFFFB]
 	var whitespace_length : base.u32[..= 0xFFFE]
@@ -905,17 +905,17 @@
 				pre args.dst.available() > 0,
 			{
 				number_length = this.decode_number!(src: args.src)
-				number_status = number_length >> 12
+				number_status = number_length >> 8
 				vminor = (base.TOKEN__VBC__NUMBER << 21) |
 					base.TOKEN__VBD__NUMBER__CONTENT_FLOATING_POINT |
 					base.TOKEN__VBD__NUMBER__CONTENT_INTEGER_SIGNED |
 					base.TOKEN__VBD__NUMBER__FORMAT_TEXT
-				if (number_length & 0x800) <> 0 {
+				if (number_length & 0x80) <> 0 {
 					vminor = (base.TOKEN__VBC__NUMBER << 21) |
 						base.TOKEN__VBD__NUMBER__CONTENT_FLOATING_POINT |
 						base.TOKEN__VBD__NUMBER__FORMAT_TEXT
 				}
-				number_length = number_length & 0x7FF
+				number_length = number_length & 0x7F
 				if number_status == 0 {
 					args.dst.write_simple_token_fast!(
 						value_major: 0,
@@ -1196,10 +1196,10 @@
 	this.end_of_data = true
 }
 
-pri func decoder.decode_number!(src: base.io_reader) base.u32[..= 0x3FFF] {
+pri func decoder.decode_number!(src: base.io_reader) base.u32[..= 0x3FF] {
 	var c              : base.u8
-	var n              : base.u32[..= 0x3FFF]
-	var floating_point : base.u32[..= 0x800]
+	var n              : base.u32[..= 0x3FF]
+	var floating_point : base.u32[..= 0x80]
 
 	while.goto_done true {{
 	n = 0
@@ -1207,7 +1207,7 @@
 	// Peek.
 	if args.src.available() <= 0 {
 		if not args.src.is_closed() {
-			n |= 0x3000
+			n |= 0x300
 		}
 		break.goto_done
 	}
@@ -1224,9 +1224,9 @@
 		// Peek.
 		if args.src.available() <= 0 {
 			if not args.src.is_closed() {
-				n |= 0x3000
+				n |= 0x300
 			}
-			n |= 0x1000  // A '-' without digits is invalid.
+			n |= 0x100  // A '-' without digits is invalid.
 			break.goto_done
 		}
 		c = args.src.peek_u8()
@@ -1239,19 +1239,19 @@
 	if c == '0' {
 		n += 1
 		args.src.skip_u32_fast!(actual: 1, worst_case: 1)
-		assert n <= 2047
+		assert n <= 99
 	} else {
 		n = this.decode_digits!(src: args.src, n: n)
-		if n > 2047 {
+		if n > 99 {
 			break.goto_done
 		}
-		assert n <= 2047
+		assert n <= 99
 	}
 
 	// Peek.
 	if args.src.available() <= 0 {
 		if not args.src.is_closed() {
-			n |= 0x3000
+			n |= 0x300
 		}
 		break.goto_done
 	}
@@ -1260,68 +1260,68 @@
 	// Scan the optional fraction.
 	if c <> '.' {
 		assert args.src.available() > 0
-		assert n <= 2047
+		assert n <= 99
 	} else {
-		if n >= 2047 {
-			n |= 0x2000
+		if n >= 99 {
+			n |= 0x200
 			break.goto_done
 		}
 		n += 1
 		args.src.skip_u32_fast!(actual: 1, worst_case: 1)
-		floating_point = 0x800
+		floating_point = 0x80
 
 		n = this.decode_digits!(src: args.src, n: n)
-		if n > 2047 {
+		if n > 99 {
 			break.goto_done
 		}
 
 		// Peek.
 		if args.src.available() <= 0 {
 			if not args.src.is_closed() {
-				n |= 0x3000
+				n |= 0x300
 			}
 			break.goto_done
 		}
 		c = args.src.peek_u8()
 
 		assert args.src.available() > 0
-		assert n <= 2047
+		assert n <= 99
 	}
 
 	// Scan the optional 'E' or 'e'.
 	if (c <> 'E') and (c <> 'e') {
 		break.goto_done
 	}
-	if n >= 2047 {
-		n |= 0x2000
+	if n >= 99 {
+		n |= 0x200
 		break.goto_done
 	}
 	n += 1
 	args.src.skip_u32_fast!(actual: 1, worst_case: 1)
-	floating_point = 0x800
-	assert n <= 2047
+	floating_point = 0x80
+	assert n <= 99
 
 	// Peek.
 	if args.src.available() <= 0 {
 		if not args.src.is_closed() {
-			n |= 0x3000
+			n |= 0x300
 		}
-		n |= 0x1000  // An 'E' or 'e' without digits is invalid.
+		n |= 0x100  // An 'E' or 'e' without digits is invalid.
 		break.goto_done
 	}
 	c = args.src.peek_u8()
 
 	// Scan the optional '+' or '-'.
 	if (c <> '+') and (c <> '-') {
-		assert n <= 2047
+		assert n <= 99
 	} else {
-		if n >= 2047 {
-			n |= 0x2000
+		if n >= 99 {
+			n |= 0x200
 			break.goto_done
 		}
 		n += 1
 		args.src.skip_u32_fast!(actual: 1, worst_case: 1)
-		assert n <= 2047
+		assert n <= 99
 	}
 
 	// Scan the exponent digits.
@@ -1333,15 +1333,15 @@
 	return n | floating_point
 }
 
-pri func decoder.decode_digits!(src: base.io_reader, n: base.u32[..= 2047]) base.u32[..= 0x3FFF] {
+pri func decoder.decode_digits!(src: base.io_reader, n: base.u32[..= 99]) base.u32[..= 0x3FF] {
 	var c : base.u8
-	var n : base.u32[..= 0x3FFF]
+	var n : base.u32[..= 0x3FF]
 
 	n = args.n
 	while true {
 		if args.src.available() <= 0 {
 			if not args.src.is_closed() {
-				n |= 0x3000
+				n |= 0x300
 			}
 			break
 		}
@@ -1349,27 +1349,24 @@
 		if 0x00 == LUT_DECIMAL_DIGITS[c] {
 			break
 		}
-		// Cap DECODER_NUMBER_LENGTH_MAX_INCL at an arbitrary value, 2047. The
-		// caller's src.data.len should therefore be at least 2048, also known
+		// Cap DECODER_NUMBER_LENGTH_MAX_INCL at an arbitrary value, 99. The
+		// caller's src.data.len should therefore be at least 100, also known
 		// as DECODER_SRC_IO_BUFFER_LENGTH_MIN_INCL.
 		//
 		// An example of a JSON number that is 81 bytes long is:
 		// https://github.com/nst/JSONTestSuite/blob/master/test_parsing/y_number_double_close_to_zero.json
 		//
-		// A exact rendering (in printf's "%f" format) of 5e-324 can run to
-		// almost 1100 bytes.
-		//
-		// Note that 2047 (in hex, 0x7FF) is less than 0x800, so we can use
-		// 0x800 as a flag bit in func decoder.decode_number.
-		if n >= 2047 {
-			n |= 0x2000
+		// Note that 99 (in hex, 0x63) is less than 0x80, so we can use 0x80 as
+		// a flag bit in func decoder.decode_number.
+		if n >= 99 {
+			n |= 0x200
 			break
 		}
 		n += 1
 		args.src.skip_u32_fast!(actual: 1, worst_case: 1)
 	} endwhile
 	if n == args.n {
-		n |= 0x1000
+		n |= 0x100
 	}
 	return n
 }
diff --git a/test/c/std/json.c b/test/c/std/json.c
index 9371eaf..5884997 100644
--- a/test/c/std/json.c
+++ b/test/c/std/json.c
@@ -1982,14 +1982,14 @@
       {.valid = true, .suffix = ".2e-5678 "},
   };
 
-  // src_array holds the overall test string. 2090 is arbitrary but long
-  // enough. See the "if (suffix_length > etc)" check below. 2060 is also
-  // arbitrary but larger than WUFFS_JSON__DECODER_NUMBER_LENGTH_MAX_INCL.
+  // src_array holds the overall test string. 119 is arbitrary but long enough.
+  // See the "if (suffix_length > etc)" check below. 102 is also arbitrary but
+  // larger than WUFFS_JSON__DECODER_NUMBER_LENGTH_MAX_INCL.
   //
   // See also test_wuffs_json_decode_src_io_buffer_length.
-  uint8_t src_array[2090];
-  memset(&src_array[0], '9', 2060);
-  if (2060 <= WUFFS_JSON__DECODER_NUMBER_LENGTH_MAX_INCL) {
+  uint8_t src_array[119];
+  memset(&src_array[0], '9', 102);
+  if (102 <= WUFFS_JSON__DECODER_NUMBER_LENGTH_MAX_INCL) {
     RETURN_FAIL("insufficient number_length test case coverage");
   }
 
@@ -1998,7 +1998,7 @@
   int tc;
   for (tc = 0; tc < WUFFS_TESTLIB_ARRAY_SIZE(test_cases); tc++) {
     size_t suffix_length = strlen(test_cases[tc].suffix);
-    if ((suffix_length + 1) > (2090 - 2060)) {  // +1 for the terminal NUL.
+    if ((suffix_length + 1) > (119 - 102)) {  // +1 for the terminal NUL.
       RETURN_FAIL("tc=%d: src_array is too short", tc);
     }
     bool ends_with_space = (suffix_length > 0) &&
@@ -2007,12 +2007,12 @@
     // Copying the terminal NUL isn't necessary for Wuffs' slices (which are a
     // pointer-length pair), but this backstop can help debugging with printf
     // where "%s" takes a C string (a bare pointer).
-    memcpy(&src_array[2060], test_cases[tc].suffix, suffix_length + 1);
+    memcpy(&src_array[102], test_cases[tc].suffix, suffix_length + 1);
 
     size_t nines_length;
-    for (nines_length = 2037; nines_length < 2050; nines_length++) {
+    for (nines_length = 90; nines_length < 102; nines_length++) {
       wuffs_base__slice_u8 src_data = ((wuffs_base__slice_u8){
-          .ptr = &src_array[2060 - nines_length],
+          .ptr = &src_array[102 - nines_length],
           .len = nines_length + suffix_length,
       });
       size_t number_length = src_data.len - (ends_with_space ? 1 : 0);
@@ -3019,10 +3019,10 @@
         "WUFFS_JSON__DECODER_SRC_IO_BUFFER_LENGTH_MIN_INCL");
   }
 
-  // src_array holds the test string of repeated '7's. 2050 is arbitrary but
+  // src_array holds the test string of repeated '7's. 107 is arbitrary but
   // long enough for the loop below.
-  uint8_t src_array[2050];
-  memset(&src_array[0], '7', 2050);
+  uint8_t src_array[107];
+  memset(&src_array[0], '7', 107);
 
   wuffs_json__decoder dec;
 
@@ -3031,7 +3031,7 @@
        i <= WUFFS_JSON__DECODER_NUMBER_LENGTH_MAX_INCL + 2; i++) {
     if (i < 0) {
       RETURN_FAIL("invalid test case: i=%d", i);
-    } else if (i > 2050) {
+    } else if (i > 107) {
       RETURN_FAIL("invalid test case: i=%d", i);
     }
 
