NordicSemiconductor / zcbor

Low footprint C/C++ CBOR library and Python tool providing code generation from CDDL descriptions.
Apache License 2.0
113 stars 34 forks source link

Odd issue with decoding, wrong type detected #435

Closed nordicjm closed 1 month ago

nordicjm commented 2 months ago

Seeing an odd issue with decoding a bit of a complex structure of:

map ->
  text ->
    list -> (multiple entries)
      map ->
        text ->
          uint
        text ->
          text
        text ->
          uint

The map itself is generated by zcbor, and also decoded by zcbor, however it returns an error for this, if I ignore the error and carry on, it seems to work out, but it is wrongly looking for major type 3 (string) and getting a major type 7 (simple).

Debug output:

New backup (level 0)
zcbor_map_start_decode New backup (level 1)
zcbor_tstr_decode ZCBOR_ERR(10) ZCBOR_FAIL rem: 1, cur: 0xff, ec: 0xfffffff0, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:51
ZCBOR_FAIL rem: 1, cur: 0xff, ec: 0xfffffff0, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:386
ZCBOR_FAIL rem: 1, cur: 0xff, ec: 0xfffffff0, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:402
ZCBOR_FAIL rem: 1, cur: 0xff, ec: 0xfffffff0, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:533
zcbor_map_end_decode Process backup (level 1, flags 0x7)
Process backup (level 0, flags 0x3)
rem: 375, cur: 0x66, ec: 0x0, err: 0, value_encode_len
rem: 366, cur: 0x65, ec: 0x1, err: 0, value_encode_len
rem: 360, cur: 0xa, ec: 0x2, err: 0, value_encode_len
rem: 359, cur: 0x64, ec: 0x3, err: 0, value_encode_len
rem: 354, cur: 0x69, ec: 0x4, err: 0, value_encode_len
rem: 344, cur: 0x68, ec: 0x5, err: 0, value_encode_len
rem: 335, cur: 0x3, ec: 0x6, err: 0, value_encode_len
rem: 332, cur: 0x65, ec: 0x7, err: 0, value_encode_len
rem: 326, cur: 0x0, ec: 0x8, err: 0, value_encode_len
rem: 325, cur: 0x64, ec: 0x9, err: 0, value_encode_len
rem: 320, cur: 0x67, ec: 0xa, err: 0, value_encode_len
rem: 312, cur: 0x68, ec: 0xb, err: 0, value_encode_len
rem: 303, cur: 0x6, ec: 0xc, err: 0, value_encode_len
rem: 300, cur: 0x65, ec: 0xd, err: 0, value_encode_len
rem: 294, cur: 0x9, ec: 0xe, err: 0, value_encode_len
rem: 293, cur: 0x64, ec: 0xf, err: 0, value_encode_len
rem: 288, cur: 0x6a, ec: 0x10, err: 0, value_encode_len
rem: 277, cur: 0x68, ec: 0x11, err: 0, value_encode_len
rem: 268, cur: 0x1, ec: 0x12, err: 0, value_encode_len
zcbor_map_start_decode New backup (level 0)
zcbor_tstr_decode rem: 111, cur: 0x66, ec: 0xfffffff0, err: 0, value_extract
zcbor_list_start_decode New backup (level 1)
zcbor_map_start_decode New backup (level 2)
zcbor_tstr_decode rem: 102, cur: 0x65, ec: 0xfffffff0, err: 0, value_extract
zcbor_uint32_decode zcbor_uint_decode rem: 96, cur: 0xa, ec: 0xffffffef, err: 0, value_extract
zcbor_tstr_decode rem: 95, cur: 0x64, ec: 0xffffffee, err: 0, value_extract
zcbor_tstr_decode rem: 90, cur: 0x69, ec: 0xffffffed, err: 0, value_extract
zcbor_tstr_decode rem: 80, cur: 0x68, ec: 0xffffffec, err: 0, value_extract
zcbor_uint32_decode zcbor_uint_decode rem: 71, cur: 0x3, ec: 0xffffffeb, err: 0, value_extract
zcbor_tstr_decode ZCBOR_ERR(10) ZCBOR_FAIL rem: 70, cur: 0xff, ec: 0xffffffea, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:51
ZCBOR_FAIL rem: 70, cur: 0xff, ec: 0xffffffea, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:386
ZCBOR_FAIL rem: 70, cur: 0xff, ec: 0xffffffea, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:402
ZCBOR_FAIL rem: 70, cur: 0xff, ec: 0xffffffea, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:533
zcbor_map_end_decode Process backup (level 2, flags 0x7)
zcbor_map_start_decode New backup (level 2)
zcbor_tstr_decode rem: 68, cur: 0x65, ec: 0xfffffff0, err: 10, value_extract
zcbor_uint32_decode zcbor_uint_decode rem: 62, cur: 0x0, ec: 0xffffffef, err: 10, value_extract
zcbor_tstr_decode rem: 61, cur: 0x64, ec: 0xffffffee, err: 10, value_extract
zcbor_tstr_decode rem: 56, cur: 0x67, ec: 0xffffffed, err: 10, value_extract
zcbor_tstr_decode rem: 48, cur: 0x68, ec: 0xffffffec, err: 10, value_extract
zcbor_uint32_decode zcbor_uint_decode rem: 39, cur: 0x6, ec: 0xffffffeb, err: 10, value_extract
zcbor_tstr_decode ZCBOR_ERR(10) ZCBOR_FAIL rem: 38, cur: 0xff, ec: 0xffffffea, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:51
ZCBOR_FAIL rem: 38, cur: 0xff, ec: 0xffffffea, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:386
ZCBOR_FAIL rem: 38, cur: 0xff, ec: 0xffffffea, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:402
ZCBOR_FAIL rem: 38, cur: 0xff, ec: 0xffffffea, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:533
zcbor_map_end_decode Process backup (level 2, flags 0x7)
zcbor_map_start_decode New backup (level 2)
zcbor_tstr_decode rem: 36, cur: 0x65, ec: 0xfffffff0, err: 10, value_extract
zcbor_uint32_decode zcbor_uint_decode rem: 30, cur: 0x9, ec: 0xffffffef, err: 10, value_extract
zcbor_tstr_decode rem: 29, cur: 0x64, ec: 0xffffffee, err: 10, value_extract
zcbor_tstr_decode rem: 24, cur: 0x6a, ec: 0xffffffed, err: 10, value_extract
zcbor_tstr_decode rem: 13, cur: 0x68, ec: 0xffffffec, err: 10, value_extract
zcbor_uint32_decode zcbor_uint_decode rem: 4, cur: 0x1, ec: 0xffffffeb, err: 10, value_extract
zcbor_tstr_decode ZCBOR_ERR(10) ZCBOR_FAIL rem: 3, cur: 0xff, ec: 0xffffffea, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:51
ZCBOR_FAIL rem: 3, cur: 0xff, ec: 0xffffffea, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:386
ZCBOR_FAIL rem: 3, cur: 0xff, ec: 0xffffffea, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:402
ZCBOR_FAIL rem: 3, cur: 0xff, ec: 0xffffffea, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:533
zcbor_map_end_decode Process backup (level 2, flags 0x7)
zcbor_list_end_decode Process backup (level 1, flags 0x7)
zcbor_tstr_decode ZCBOR_ERR(10) ZCBOR_FAIL rem: 1, cur: 0xff, ec: 0xffffffee, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:51
ZCBOR_FAIL rem: 1, cur: 0xff, ec: 0xffffffee, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:386
ZCBOR_FAIL rem: 1, cur: 0xff, ec: 0xffffffee, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:402
ZCBOR_FAIL rem: 1, cur: 0xff, ec: 0xffffffee, err: 10, WEST_TOPDIR/modules/lib/zcbor/src/zcbor_decode.c:533
zcbor_map_end_decode Process backup (level 0, flags 0x7)

Easy way to reproduce issue is with the test on https://github.com/zephyrproject-rtos/zephyr/pull/71253 Uncomment the commented line below the TODO and run

oyvindronningstad commented 1 month ago

@nordicjm At the current state (afb209c74bcb42e59e6e86f056c812734ccc72cd), the test passes even with the line uncommented.

bilde

bilde

nordicjm commented 1 month ago

Odd, just tested it and it's passing here too, no idea what caused it.