Have std/cbor reject nested indefinite-len strings
diff --git a/release/c/wuffs-unsupported-snapshot.c b/release/c/wuffs-unsupported-snapshot.c
index 933982d..4cc25ce 100644
--- a/release/c/wuffs-unsupported-snapshot.c
+++ b/release/c/wuffs-unsupported-snapshot.c
@@ -16598,6 +16598,9 @@
(((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
(((uint64_t)(((uint32_t)(WUFFS_CBOR__TOKEN_LENGTHS[v_c_minor])))) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
} else if (v_c_minor == 31) {
+ if (v_indefinite_string_major_type != 0) {
+ goto label__goto_fail__break;
+ }
v_indefinite_string_major_type = 2;
*iop_a_dst++ = wuffs_base__make_token(
(((uint64_t)(4194560)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
@@ -16660,6 +16663,9 @@
(((uint64_t)(1)) << WUFFS_BASE__TOKEN__CONTINUED__SHIFT) |
(((uint64_t)(((uint32_t)(WUFFS_CBOR__TOKEN_LENGTHS[v_c_minor])))) << WUFFS_BASE__TOKEN__LENGTH__SHIFT));
} else if (v_c_minor == 31) {
+ if (v_indefinite_string_major_type != 0) {
+ goto label__goto_fail__break;
+ }
v_indefinite_string_major_type = 3;
*iop_a_dst++ = wuffs_base__make_token(
(((uint64_t)(4194579)) << WUFFS_BASE__TOKEN__VALUE_MINOR__SHIFT) |
diff --git a/std/cbor/decode_cbor.wuffs b/std/cbor/decode_cbor.wuffs
index 7601d50..a839644 100644
--- a/std/cbor/decode_cbor.wuffs
+++ b/std/cbor/decode_cbor.wuffs
@@ -248,6 +248,9 @@
continued: 1,
length: TOKEN_LENGTHS[c_minor] as base.u32)
} else if c_minor == 0x1F {
+ if indefinite_string_major_type <> 0 {
+ break.goto_fail
+ }
indefinite_string_major_type = 2
args.dst.write_simple_token_fast!(
value_major: 0,
@@ -324,6 +327,9 @@
continued: 1,
length: TOKEN_LENGTHS[c_minor] as base.u32)
} else if c_minor == 0x1F {
+ if indefinite_string_major_type <> 0 {
+ break.goto_fail
+ }
indefinite_string_major_type = 3
args.dst.write_simple_token_fast!(
value_major: 0,