| // Copyright 2021 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Tests tables whose fields are inlined into the envelope in the wire |
| // format. |
| success("TableFieldInlined") { |
| value = TableFieldInlinedStruct{ |
| t: TableFieldInlined{ |
| f: 123, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| num(123):4, num(0):2, num(1):2, |
| ], |
| }, |
| } |
| |
| // Tests a table whose handle field is inlined into the envelope in the wire |
| // format. |
| success("TableFieldInlinedHandle") { |
| handle_defs = { |
| #0 = channel(), |
| }, |
| value = TableFieldInlinedHandleStruct{ |
| t: TableFieldInlinedHandle{ |
| f: #0, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| repeat(0xff):4, num(1):2, num(1):2, |
| ], |
| }, |
| handles = { |
| v2 = [#0], |
| }, |
| } |
| |
| // A field that would normally be inlined is empty. |
| // This tests logic checking that values are inlined in the correct situations. |
| success("TableFieldInlinedReservedStored") { |
| // TODO(https://fxbug.dev/42166276): Remove in favor of TableFieldInlinedReservedDropped. |
| bindings_allowlist = [dart, go], |
| value = TableFieldInlinedStruct{ |
| t: TableFieldInlined{ |
| 2: { |
| bytes = [num(123):8], |
| }, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| num(2):8, |
| repeat(0xff):8, |
| |
| num(0):4, num(0):2, num(0):2, |
| num(8):4, num(0):2, num(0):2, |
| num(123):8, |
| ], |
| }, |
| } |
| |
| decode_success("TableFieldInlinedReservedDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| bindings_denylist = [dart, go], |
| value = TableFieldInlinedStruct{ |
| t: TableFieldInlined{}, |
| }, |
| bytes = { |
| v2 = [ |
| num(2):8, |
| repeat(0xff):8, |
| |
| num(0):4, num(0):2, num(0):2, |
| num(8):4, num(0):2, num(0):2, |
| num(123):8, |
| ], |
| }, |
| } |
| |
| encode_success("TableFieldInlinedReservedDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| // TODO(https://fxbug.dev/42067496): Implement the decode function in all backends. |
| bindings_allowlist = [rust], |
| value = TableFieldInlinedStruct{ |
| t: decode({ |
| type = TableFieldInlined, |
| bytes = { |
| v2 = [ |
| num(2):8, |
| repeat(0xff):8, |
| |
| num(0):4, num(0):2, num(0):2, |
| num(8):4, num(0):2, num(0):2, |
| num(123):8, |
| ], |
| }, |
| }), |
| }, |
| bytes = { |
| v2 = [ |
| num(0):8, repeat(0xff):8, |
| ], |
| }, |
| } |
| |
| // Unlike other inline-able table fields, the value portion of an unset flexible enum field is not |
| // necessarily zero on instantiation, as either the compiler or the user (with an `@unknown` |
| // override) is responible for picking a value to serve as a stand-in for the "default" case. |
| // Because this kind of field is not zeroed by default, binding backends (especially wire-based |
| // ones) need to take extra care during encoding when checking whether the field is unset. |
| // |
| // See https://fxbug.dev/42065395 for a detailed description of this error case. |
| success("TableFieldUnsetFlexibleEnumInlinedSigned") { |
| value = TableFieldUnsetFlexibleEnumInlinedStruct{ |
| t: TableFieldUnsetFlexibleEnumInlined{ |
| // `signed_enum` is purposely unset to test that it is properly zeroed in all cases. |
| unsigned_enum: 0x01, |
| always_set: false, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| num(3):8, // max ordinal |
| repeat(0xff):8, // alloc present |
| |
| num(0):8, // unset inlined `signed_enum` |
| num(1):6, num(1):2, // default inlined `unsigned_enum` |
| num(0):6, num(1):2, // inlined `always_set` bool, set to false |
| ], |
| }, |
| } |
| |
| // The same test as above, except this time it's the `unsigned_enum` field that is unset. |
| success("TableFieldUnsetFlexibleEnumInlinedUnsigned") { |
| value = TableFieldUnsetFlexibleEnumInlinedStruct{ |
| t: TableFieldUnsetFlexibleEnumInlined{ |
| signed_enum: 0x01, |
| // `unsigned_enum` is purposely unset to test that it is properly zeroed in all cases. |
| always_set: false, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| num(3):8, // max ordinal |
| repeat(0xff):8, // alloc present |
| |
| num(1):6, num(1):2, // default inlined `signed_enum` |
| num(0):8, // unset inlined unsigned_enum |
| num(0):6, num(1):2, // inlined `always_set` bool, set to false |
| ], |
| }, |
| } |
| |
| // Tests tables whose fields are stored out of line in the wire format. |
| success("TableFieldOutOfLine") { |
| value = TableFieldOutOfLineStruct{ |
| t: TableFieldOutOfLine{ |
| f: 123, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| num(8):4, num(0):2, num(0):2, |
| |
| num(123):8, |
| ], |
| }, |
| } |
| |
| decode_failure("TableFieldBadInlineMarkerLower") { |
| type = TableFieldInlinedStruct, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| num(123):4, num(0):2, 0xff, 0x00, |
| ], |
| }, |
| err = INVALID_INLINE_MARKER_IN_ENVELOPE, |
| } |
| |
| decode_failure("TableFieldBadInlineMarkerUpper") { |
| type = TableFieldInlinedStruct, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| num(123):4, num(0):2, 0x01, 0xee, |
| ], |
| }, |
| err = INVALID_INLINE_MARKER_IN_ENVELOPE, |
| } |
| |
| decode_failure("TableFieldOutOfLineBadOutlinedMarker") { |
| type = TableFieldOutOfLineStruct, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| // 0xfe, 0xff is an inline marker with only the inline bit unset. |
| num(8):4, num(0):2, 0xfe, 0xff, |
| |
| num(123):8, |
| ], |
| }, |
| err = INVALID_INLINE_MARKER_IN_ENVELOPE, |
| } |
| |
| // Tests a table in which a value is inlined into an unknown field. |
| success("TableFieldUnknownInlinedStored") { |
| // TODO(https://fxbug.dev/42166276): Remove in favor of TableFieldUnknownInlinedDropped. |
| bindings_allowlist = [dart, go], |
| value = TableFieldUnknownStruct{ |
| t: TableFieldUnknown{ |
| 1: { |
| bytes = [num(123):4], |
| }, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| num(123):4, num(0):2, num(1):2, |
| ], |
| }, |
| } |
| |
| // Tests a table in which a value is inlined into an unknown field. |
| decode_success("TableFieldUnknownInlinedDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| bindings_denylist = [dart, go], |
| value = TableFieldUnknownStruct{ |
| t: TableFieldUnknown{}, |
| }, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| num(123):4, num(0):2, num(1):2, |
| ], |
| }, |
| } |
| |
| // Tests a table in which a value is inlined into an unknown field. |
| encode_success("TableFieldUnknownInlinedDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| // TODO(https://fxbug.dev/42067496): Implement the decode function in all backends. |
| bindings_allowlist = [rust], |
| value = TableFieldUnknownStruct{ |
| t: decode({ |
| type = TableFieldUnknown, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| num(123):4, num(0):2, num(1):2, |
| ], |
| }, |
| }), |
| }, |
| bytes = { |
| v2 = [ |
| num(0):8, repeat(0xff):8, |
| ], |
| }, |
| } |
| |
| // Tests a table in which a handle value is inlined into an unknown field. |
| success("TableFieldUnknownInlinedHandleStored") { |
| // TODO(https://fxbug.dev/42166276): Remove in favor of TableFieldUnknownInlinedHandleDropped. |
| bindings_allowlist = [dart, go], |
| handle_defs = { |
| #0 = channel(), |
| }, |
| value = TableFieldUnknownResourceStruct{ |
| t: TableFieldUnknownResource{ |
| 1: { |
| bytes = [repeat(0xff):4], |
| handles = [#0], |
| }, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| repeat(0xff):4, num(1):2, num(1):2, |
| ], |
| }, |
| handles = { |
| v2 = [#0], |
| }, |
| } |
| |
| // Tests a table in which a handle value is inlined into an unknown field. |
| decode_success("TableFieldUnknownInlinedHandleDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| bindings_denylist = [dart, go], |
| handle_defs = { |
| #0 = channel(), |
| }, |
| value = TableFieldUnknownResourceStruct{ |
| t: TableFieldUnknownResource{}, |
| }, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| repeat(0xff):4, num(1):2, num(1):2, |
| ], |
| }, |
| handles = { |
| v2 = [#0], |
| }, |
| } |
| |
| // Tests a table in which a handle value is inlined into an unknown field. |
| encode_success("TableFieldUnknownInlinedHandleDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| // TODO(https://fxbug.dev/42067496): Implement the decode function in all backends. |
| bindings_allowlist = [rust], |
| handle_defs = { |
| #0 = channel(), |
| }, |
| value = TableFieldUnknownResourceStruct{ |
| t: decode({ |
| type = TableFieldUnknownResource, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| repeat(0xff):4, num(1):2, num(1):2, |
| ], |
| }, |
| handles = { |
| v2 = [#0], |
| }, |
| }), |
| }, |
| bytes = { |
| v2 = [ |
| num(0):8, repeat(0xff):8, |
| ], |
| }, |
| } |
| |
| // Tests a table in which a value is stored out of line in an unknown field. |
| success("TableFieldUnknownOutOfLineStored") { |
| // TODO(https://fxbug.dev/42166276): Remove in favor of TableFieldUnknownOutOfLineDropped. |
| bindings_allowlist = [dart, go], |
| value = TableFieldUnknownStruct{ |
| t: TableFieldUnknown{ |
| 1: { |
| bytes = [num(123):8], |
| }, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| num(8):4, num(0):2, num(0):2, |
| |
| num(123):8, |
| ], |
| }, |
| } |
| |
| // Tests a table in which a value is stored out of line in an unknown field. |
| decode_success("TableFieldUnknownOutOfLineDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| bindings_denylist = [dart, go], |
| value = TableFieldUnknownStruct{ |
| t: TableFieldUnknown{}, |
| }, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| num(8):4, num(0):2, num(0):2, |
| |
| num(123):8, |
| ], |
| }, |
| } |
| |
| encode_success("TableFieldUnknownOutOfLineDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| // TODO(https://fxbug.dev/42067496): Implement the decode function in all backends. |
| bindings_allowlist = [rust], |
| value = TableFieldUnknownStruct{ |
| t: decode({ |
| type = TableFieldUnknown, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| num(8):4, num(0):2, num(0):2, |
| |
| num(123):8, |
| ], |
| }, |
| }), |
| }, |
| bytes = { |
| v2 = [ |
| num(0):8, repeat(0xff):8, |
| ], |
| }, |
| } |
| |
| // Tests decode of a value in a table that can be represented inline in the |
| // envelope but is incorrectly using the out of line representation. |
| decode_failure("TableOutOfLineEnvelopeWhenInlineRequired") { |
| type = TableFieldInlinedStruct, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| num(8):4, num(0):2, num(0):2, |
| |
| num(123):8, |
| ], |
| }, |
| err = INVALID_INLINE_BIT_IN_ENVELOPE, |
| } |
| |
| // Tests decode of a value in a table that can be represented out of line in |
| // the envelope but is incorrectly using the inline representation. |
| decode_failure("TableInlineEnvelopeWhenOutOfLineRequired") { |
| type = TableFieldOutOfLineStruct, |
| bytes = { |
| v2 = [ |
| num(1):8, |
| repeat(0xff):8, |
| |
| num(8):4, num(0):2, num(1):2, |
| ], |
| }, |
| err = INVALID_INLINE_BIT_IN_ENVELOPE, |
| } |
| |
| // Test table with a 2^64-1 count, exceeding the 32-bit limit from RFC-0059. |
| decode_failure("TableCountExceedsLimitByALot") { |
| type = StructOfEmptyTable, |
| bytes = { |
| v2 = [ |
| num(0xffffffffffffffff):8, // table field count |
| repeat(0xff):8, // presence marker |
| ], |
| }, |
| err = TABLE_COUNT_EXCEEDS_32_BIT_LIMIT, |
| } |
| |
| // Test table with a 2^32 count, exceeding the 32-bit limit from RFC-0059. |
| decode_failure("TableCountExceedsLimitByOne") { |
| type = StructOfEmptyTable, |
| bytes = { |
| v2 = [ |
| num(0x100000000):8, // table field count |
| repeat(0xff):8, // presence marker |
| ], |
| }, |
| err = TABLE_COUNT_EXCEEDS_32_BIT_LIMIT, |
| } |
| |
| // Test table with count that exceeds the total message size. Bindings should |
| // explicitly check for this to avoid allocating huge tables before failing. |
| decode_failure("TableCountExceedsTotalMessageSize") { |
| type = StructOfEmptyTable, |
| bytes = { |
| v2 = [ |
| num(25):8, // table field count (invalid, should be 8) |
| repeat(0xff):8, // presence marker |
| repeat(0xab):8, // table data |
| ], |
| }, |
| err = TOO_FEW_BYTES, |
| } |
| |
| // Test table with count that exceeds the remainder of the message size. |
| // Bindings should not explicitly check for this, but it should still fail. |
| decode_failure("TableCountExceedsRemainingMessageSize") { |
| type = StructOfEmptyTable, |
| bytes = { |
| v2 = [ |
| num(9):8, // table field count (invalid, should be 8) |
| repeat(0xff):8, // presence marker |
| repeat(0xab):8, // table data |
| ], |
| }, |
| err = TOO_FEW_BYTES, |
| } |
| |
| success("EmptyTable") { |
| value = StructOfEmptyTable{ |
| table: EmptyTable{}, |
| }, |
| bytes = { |
| v2 = [ |
| 0, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| ], |
| }, |
| } |
| |
| decode_failure("TableWithAbsentAlloc") { |
| type = StructOfEmptyTable, |
| bytes = { |
| v2 = [ |
| num(0):8, // max ordinal |
| repeat(0x00):8, // alloc absent |
| ], |
| }, |
| err = NON_NULLABLE_TYPE_WITH_NULL_VALUE, |
| } |
| |
| decode_failure("TableWithInvalidAlloc") { |
| type = StructOfEmptyTable, |
| bytes = { |
| v2 = [ |
| num(0):8, // max ordinal |
| repeat(0xab):8, // alloc absent |
| ], |
| }, |
| err = INVALID_PRESENCE_INDICATOR, |
| } |
| |
| success("SimpleTableEmpty") { |
| value = StructOfSimpleTable{ |
| table: SimpleTable{}, |
| }, |
| bytes = { |
| v2 = [ |
| 0, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| ], |
| }, |
| } |
| |
| success("SimpleTableXAndY") { |
| value = StructOfSimpleTable{ |
| table: SimpleTable{ |
| x: 42, |
| y: 67, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| 5, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num_bytes / num handles / not inlined |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: zero envelope |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 3: zero envelope |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: zero envelope |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles / not inlined |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| ], |
| }, |
| } |
| |
| success("SimpleTableJustX") { |
| value = StructOfSimpleTable{ |
| table: SimpleTable{ |
| x: 42, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| 1, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: value / num handles / not inlined |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| ], |
| }, |
| } |
| |
| success("SimpleTableJustY") { |
| value = StructOfSimpleTable{ |
| table: SimpleTable{ |
| y: 67, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| 5, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: value / num handles / not inlined |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| ], |
| }, |
| } |
| |
| success("TableWithStringAndVectorNoVectorContent") { |
| value = StructOfTableWithStringAndVector{ |
| table: TableWithStringAndVector{ |
| foo: "hello", |
| bar: 27, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| 2, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 24, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 27, 0, 0, 0, 0, 0, 1, 0, // envelope 2: num bytes / num handles / inlined |
| 5, 0, 0, 0, 0, 0, 0, 0, // element 1: length |
| 255, 255, 255, 255, 255, 255, 255, 255, // element 1: alloc present |
| 104, 101, 108, 108, 111, 0, 0, 0, // element 1: hello |
| ], |
| }, |
| } |
| |
| // TODO(https://fxbug.dev/42159720): Create test with TableWithStringAndVectorHasVectorContent. |
| |
| success("SimpleTableThenUint64") { |
| value = SimpleTableThenUint64{ |
| table: SimpleTable{ |
| x: 42, |
| y: 67, |
| }, |
| number: 0xdeadbeefdeadbeef, |
| }, |
| bytes = { |
| v2 = [ |
| 5, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 0xef, 0xbe, 0xad, 0xde, 0xef, 0xbe, 0xad, 0xde, // uint64 number |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles / not inlined |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: zero envelope |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 3: zero envelope |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: zero envelope |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles / not inlined |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| ], |
| }, |
| } |
| |
| success("ReverseOrdinalTable") { |
| value = StructOfReverseOrdinalTable{ |
| table: ReverseOrdinalTable{ |
| x: 0xaa, |
| y: 0xbb, |
| z: 0xcc, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| // table |
| 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // max ordinal 4 |
| 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // present |
| // z envelope (ordinal 1) |
| 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 8 bytes, 0 handles, not inlined |
| // y envelope (ordinal 2) |
| 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 8 bytes, 0 handles, not inlined |
| // empty envelope (reserved ordinal 3) |
| 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // zero envelope |
| // x envelope (ordinal 4) |
| 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 8 bytes, 0 handles, not inlined |
| |
| 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // z |
| 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // y |
| 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // x |
| ], |
| }, |
| } |
| |
| success("TableWithGaps") { |
| value = StructOfTableWithGaps{ |
| table: TableWithGaps{ |
| second: 1, |
| fourth: 2, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| num(4):8, repeat(0xff):8, // max ordinal, present |
| num(0):4, num(0):2, num(0):2, // envelope #1: empty |
| num(1):4, num(0):2, num(1):2, // envelope #2: second (inlined) |
| num(0):4, num(0):2, num(0):2, // envelope #3: empty |
| num(2):4, num(0):2, num(1):2, // envelope #2: fourth (inlined) |
| ], |
| }, |
| } |
| |
| decode_success("ValueTableUnknownReservedDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| bindings_denylist = [dart, go], |
| bytes = { |
| v2 = [ |
| 5, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 1, 2, 3, 4, 5, 6, 7, 8, // 8 unknown bytes for envelope 3 |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| ], |
| }, |
| value = StructOfSimpleTable{ |
| table: SimpleTable{ |
| x: 42, |
| y: 67, |
| }, |
| }, |
| } |
| |
| encode_success("ValueTableUnknownReservedDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| // TODO(https://fxbug.dev/42067496): Implement the decode function in all backends. |
| bindings_allowlist = [rust], |
| value = StructOfSimpleTable{ |
| table: decode({ |
| type = SimpleTable, |
| bytes = { |
| v2 = [ |
| 5, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 1, 2, 3, 4, 5, 6, 7, 8, // 8 unknown bytes for envelope 3 |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| ], |
| }, |
| }), |
| }, |
| bytes = { |
| v2 = [ |
| 5, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| ], |
| }, |
| } |
| |
| decode_success("ResourceTableUnknownReservedDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| bindings_denylist = [dart, go], |
| bytes = { |
| v2 = [ |
| 5, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 1, 2, 3, 4, 5, 6, 7, 8, // 8 unknown bytes for envelope 3 |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| ], |
| }, |
| value = StructOfSimpleResourceTable{ |
| table: SimpleResourceTable{ |
| x: 42, |
| y: 67, |
| }, |
| }, |
| } |
| |
| encode_success("ResourceTableUnknownReservedDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| // TODO(https://fxbug.dev/42067496): Implement the decode function in all backends. |
| bindings_allowlist = [rust], |
| value = StructOfSimpleResourceTable{ |
| table: decode({ |
| type = SimpleResourceTable, |
| bytes = { |
| v2 = [ |
| 5, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 1, 2, 3, 4, 5, 6, 7, 8, // 8 unknown bytes for envelope 3 |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| ], |
| }, |
| }), |
| }, |
| bytes = { |
| v2 = [ |
| 5, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| ], |
| }, |
| } |
| |
| success("ValueTableUnknownReservedStored") { |
| // TODO(https://fxbug.dev/42166276): Remove in favor of ValueTableUnknownReservedDropped. |
| bindings_allowlist = [dart, go], |
| bytes = { |
| v2 = [ |
| 5, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 1, 2, 3, 4, 5, 6, 7, 8, // 8 unknown bytes for envelope 3 |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| ], |
| }, |
| value = StructOfSimpleTable{ |
| table: SimpleTable{ |
| x: 42, |
| y: 67, |
| 3: { |
| bytes = [1, 2, 3, 4, 5, 6, 7, 8], |
| }, |
| }, |
| }, |
| } |
| |
| success("ResourceTableUnknownReservedStored") { |
| // TODO(https://fxbug.dev/42166276): Remove in favor of ResourceTableUnknownReservedDropped. |
| bindings_allowlist = [dart, go], |
| bytes = { |
| v2 = [ |
| 5, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 1, 2, 3, 4, 5, 6, 7, 8, // 8 unknown bytes for envelope 3 |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| ], |
| }, |
| value = StructOfSimpleResourceTable{ |
| table: SimpleResourceTable{ |
| x: 42, |
| y: 67, |
| 3: { |
| bytes = [1, 2, 3, 4, 5, 6, 7, 8], |
| }, |
| }, |
| }, |
| } |
| |
| decode_success("ValueTableUnknownTrailingDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| bindings_denylist = [dart, go], |
| bytes = { |
| v2 = [ |
| 6, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 6: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| 1, 2, 3, 4, 5, 6, 7, 8, // 8 unknown bytes for envelope 6 |
| ], |
| }, |
| value = StructOfSimpleTable{ |
| table: SimpleTable{ |
| x: 42, |
| y: 67, |
| }, |
| }, |
| } |
| |
| encode_success("ValueTableUnknownTrailingDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| // TODO(https://fxbug.dev/42067496): Implement the decode function in all backends. |
| bindings_allowlist = [rust], |
| value = StructOfSimpleTable{ |
| table: decode({ |
| type = SimpleTable, |
| bytes = { |
| v2 = [ |
| 6, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 6: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| 1, 2, 3, 4, 5, 6, 7, 8, // 8 unknown bytes for envelope 6 |
| ], |
| }, |
| }), |
| }, |
| bytes = { |
| v2 = [ |
| 5, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| ], |
| }, |
| } |
| |
| decode_success("ResourceTableUnknownTrailingDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| bindings_denylist = [dart, go], |
| bytes = { |
| v2 = [ |
| 6, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 6: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| 1, 2, 3, 4, 5, 6, 7, 8, // 8 unknown bytes for envelope 6 |
| ], |
| }, |
| value = StructOfSimpleResourceTable{ |
| table: SimpleResourceTable{ |
| x: 42, |
| y: 67, |
| }, |
| }, |
| } |
| |
| encode_success("ResourceTableUnknownTrailingDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| // TODO(https://fxbug.dev/42067496): Implement the decode function in all backends. |
| bindings_allowlist = [rust], |
| value = StructOfSimpleResourceTable{ |
| table: decode({ |
| type = SimpleResourceTable, |
| bytes = { |
| v2 = [ |
| 6, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 6: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| 1, 2, 3, 4, 5, 6, 7, 8, // 8 unknown bytes for envelope 6 |
| ], |
| }, |
| }), |
| }, |
| bytes = { |
| v2 = [ |
| 5, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| ], |
| }, |
| } |
| |
| success("ValueTableUnknownTrailingStored") { |
| // TODO(https://fxbug.dev/42166276): Remove in favor of ValueTableUnknownTrailingDropped. |
| bindings_allowlist = [dart, go], |
| bytes = { |
| v2 = [ |
| 6, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 6: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| 1, 2, 3, 4, 5, 6, 7, 8, // 8 unknown bytes for envelope 6 |
| ], |
| }, |
| value = StructOfSimpleTable{ |
| table: SimpleTable{ |
| x: 42, |
| y: 67, |
| 6: { |
| bytes = [1, 2, 3, 4, 5, 6, 7, 8], |
| }, |
| }, |
| }, |
| } |
| |
| success("ResourceTableUnknownTrailingStored") { |
| // TODO(https://fxbug.dev/42166276): Remove in favor of ResourceTableUnknownTrailingDropped. |
| bindings_allowlist = [dart, go], |
| bytes = { |
| v2 = [ |
| 6, 0, 0, 0, 0, 0, 0, 0, // max ordinal |
| 255, 255, 255, 255, 255, 255, 255, 255, // alloc present |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 1: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 2: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 3: num bytes / num handles |
| 0, 0, 0, 0, 0, 0, 0, 0, // envelope 4: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 5: num bytes / num handles |
| 8, 0, 0, 0, 0, 0, 0, 0, // envelope 6: num bytes / num handles |
| 42, 0, 0, 0, 0, 0, 0, 0, // field X |
| 67, 0, 0, 0, 0, 0, 0, 0, // field Y |
| 1, 2, 3, 4, 5, 6, 7, 8, // 8 unknown bytes for envelope 6 |
| ], |
| }, |
| value = StructOfSimpleResourceTable{ |
| table: SimpleResourceTable{ |
| x: 42, |
| y: 67, |
| 6: { |
| bytes = [1, 2, 3, 4, 5, 6, 7, 8], |
| }, |
| }, |
| }, |
| } |
| |
| decode_success("ValueTableUnknownTrailingHandlesDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| bindings_denylist = [dart, go], |
| handle_defs = { |
| #0 = event(), |
| #1 = event(), |
| #2 = event(), |
| }, |
| value = StructOfSimpleTable{ |
| table: SimpleTable{ |
| y: 67, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| num(6):8, // max ordinal |
| repeat(0xff):8, // alloc present |
| num(0):4, num(0):4, // absent envelope 1 |
| num(0):4, num(0):4, // absent envelope 2 |
| num(0):4, num(0):4, // absent envelope 3 |
| num(0):4, num(0):4, // absent envelope 4 |
| num(8):4, num(0):4, // envelope 5 (field Y) |
| num(24):4, num(3):4, // envelope 6 (unknown) |
| num(67):8, // field Y |
| repeat(0xab):20, padding:4, // unknown bytes |
| ], |
| }, |
| handles = { |
| v2 = [ |
| #0, #1, #2, |
| ], |
| }, |
| } |
| |
| encode_success("ValueTableUnknownTrailingHandlesDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| // TODO(https://fxbug.dev/42067496): Implement the decode function in all backends. |
| bindings_allowlist = [rust], |
| handle_defs = { |
| #0 = event(), |
| #1 = event(), |
| #2 = event(), |
| }, |
| value = StructOfSimpleTable{ |
| table: decode({ |
| type = SimpleTable, |
| bytes = { |
| v2 = [ |
| num(6):8, // max ordinal |
| repeat(0xff):8, // alloc present |
| num(0):4, num(0):4, // absent envelope 1 |
| num(0):4, num(0):4, // absent envelope 2 |
| num(0):4, num(0):4, // absent envelope 3 |
| num(0):4, num(0):4, // absent envelope 4 |
| num(8):4, num(0):4, // envelope 5 (field Y) |
| num(24):4, num(3):4, // envelope 6 (unknown) |
| num(67):8, // field Y |
| repeat(0xab):20, padding:4, // unknown bytes |
| ], |
| }, |
| handles = { |
| v2 = [ |
| #0, #1, #2, |
| ], |
| }, |
| }), |
| }, |
| bytes = { |
| v2 = [ |
| num(5):8, // max ordinal |
| repeat(0xff):8, // alloc present |
| num(0):4, num(0):4, // absent envelope 1 |
| num(0):4, num(0):4, // absent envelope 2 |
| num(0):4, num(0):4, // absent envelope 3 |
| num(0):4, num(0):4, // absent envelope 4 |
| num(8):4, num(0):4, // envelope 5 (field Y) |
| num(67):8, // field Y |
| ], |
| }, |
| } |
| |
| decode_success("ResourceTableUnknownTrailingHandlesDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| bindings_denylist = [dart, go], |
| handle_defs = { |
| #0 = event(), |
| #1 = event(), |
| #2 = event(), |
| }, |
| value = StructOfSimpleResourceTable{ |
| table: SimpleResourceTable{ |
| y: 67, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| num(6):8, // max ordinal |
| repeat(0xff):8, // alloc present |
| num(0):4, num(0):4, // absent envelope 1 |
| num(0):4, num(0):4, // absent envelope 2 |
| num(0):4, num(0):4, // absent envelope 3 |
| num(0):4, num(0):4, // absent envelope 4 |
| num(8):4, num(0):4, // envelope 5 (field Y) |
| num(24):4, num(3):4, // envelope 6 (unknown) |
| num(67):8, // field Y |
| repeat(0xab):20, padding:4, // unknown bytes |
| ], |
| }, |
| handles = { |
| v2 = [ |
| #0, #1, #2, |
| ], |
| }, |
| } |
| |
| encode_success("ResourceTableUnknownTrailingHandlesDropped") { |
| // TODO(https://fxbug.dev/42166276): Drop unknown data in all bindings. |
| // TODO(https://fxbug.dev/42067496): Implement the decode function in all backends. |
| bindings_allowlist = [rust], |
| handle_defs = { |
| #0 = event(), |
| #1 = event(), |
| #2 = event(), |
| }, |
| value = StructOfSimpleResourceTable{ |
| table: decode({ |
| type = SimpleResourceTable, |
| bytes = { |
| v2 = [ |
| num(6):8, // max ordinal |
| repeat(0xff):8, // alloc present |
| num(0):4, num(0):4, // absent envelope 1 |
| num(0):4, num(0):4, // absent envelope 2 |
| num(0):4, num(0):4, // absent envelope 3 |
| num(0):4, num(0):4, // absent envelope 4 |
| num(8):4, num(0):4, // envelope 5 (field Y) |
| num(24):4, num(3):4, // envelope 6 (unknown) |
| num(67):8, // field Y |
| repeat(0xab):20, padding:4, // unknown bytes |
| ], |
| }, |
| handles = { |
| v2 = [ |
| #0, #1, #2, |
| ], |
| }, |
| }), |
| }, |
| bytes = { |
| v2 = [ |
| num(5):8, // max ordinal |
| repeat(0xff):8, // alloc present |
| num(0):4, num(0):4, // absent envelope 1 |
| num(0):4, num(0):4, // absent envelope 2 |
| num(0):4, num(0):4, // absent envelope 3 |
| num(0):4, num(0):4, // absent envelope 4 |
| num(8):4, num(0):4, // envelope 5 (field Y) |
| num(67):8, // field Y |
| ], |
| }, |
| } |
| |
| decode_failure("ValueTableUnknownTrailingHandlesRejected") { |
| // TODO(https://fxbug.dev/42166276): Remove in favor of ValueTableUnknownTrailingHandlesDropped. |
| bindings_allowlist = [dart, go], |
| handle_defs = { |
| #0 = event(), |
| #1 = event(), |
| #2 = event(), |
| }, |
| type = StructOfSimpleTable, |
| bytes = { |
| v2 = [ |
| num(6):8, // max ordinal |
| repeat(0xff):8, // alloc present |
| num(0):4, num(0):4, // absent envelope 1 |
| num(0):4, num(0):4, // absent envelope 2 |
| num(0):4, num(0):4, // absent envelope 3 |
| num(0):4, num(0):4, // absent envelope 4 |
| num(8):4, num(0):4, // envelope 5 (field Y) |
| num(24):4, num(3):4, // envelope 6 (unknown) |
| num(67):8, // field Y |
| repeat(0xab):20, padding:4, // unknown bytes |
| ], |
| }, |
| handles = { |
| v2 = [ |
| #0, #1, #2, |
| ], |
| }, |
| err = NON_RESOURCE_UNKNOWN_HANDLES, |
| } |
| |
| success("ResourceTableUnknownTrailingHandlesStored") { |
| // TODO(https://fxbug.dev/42166276): Remove in favor of ResourceTableUnknownTrailingHandlesDropped. |
| bindings_allowlist = [dart, go], |
| handle_defs = { |
| #0 = event(), |
| #1 = event(), |
| #2 = event(), |
| }, |
| value = StructOfSimpleResourceTable{ |
| table: SimpleResourceTable{ |
| y: 67, |
| 6: { |
| bytes = [repeat(0xab):20, padding:4], |
| handles = [#0, #1, #2], |
| }, |
| }, |
| }, |
| bytes = { |
| v2 = [ |
| num(6):8, // max ordinal |
| repeat(0xff):8, // alloc present |
| num(0):4, num(0):4, // absent envelope 1 |
| num(0):4, num(0):4, // absent envelope 2 |
| num(0):4, num(0):4, // absent envelope 3 |
| num(0):4, num(0):4, // absent envelope 4 |
| num(8):4, num(0):4, // envelope 5 (field Y) |
| num(24):4, num(3):4, // envelope 6 (unknown) |
| num(67):8, // field Y |
| repeat(0xab):20, padding:4, // unknown bytes |
| ], |
| }, |
| handles = { |
| v2 = [ |
| #0, #1, #2, |
| ], |
| }, |
| } |
| |
| decode_failure("ValueTableUnknownBytesNonMultipleOf8") { |
| type = StructOfSimpleTable, |
| bytes = { |
| v2 = [ |
| num(2):8, // max ordinal |
| repeat(0xff):8, // alloc present |
| num(0):4, num(0):4, // absent envelope 1 |
| num(20):4, num(0):4, // envelope 2 (unknown) |
| repeat(0xab):20, padding:4, // unknown bytes |
| ], |
| }, |
| err = INVALID_NUM_BYTES_IN_ENVELOPE, |
| } |
| |
| decode_failure("ResourceTableUnknownBytesNonMultipleOf8") { |
| type = StructOfSimpleResourceTable, |
| bytes = { |
| v2 = [ |
| num(2):8, // max ordinal |
| repeat(0xff):8, // alloc present |
| num(0):4, num(0):4, // absent envelope 1 |
| num(20):4, num(0):4, // envelope 2 (unknown) |
| repeat(0xab):20, padding:4, // unknown bytes |
| ], |
| }, |
| err = INVALID_NUM_BYTES_IN_ENVELOPE, |
| } |