kaitai_struct_formats icon indicating copy to clipboard operation
kaitai_struct_formats copied to clipboard

vlq_base128_le incorrectrly compiled in C#

Open mikhail-khalizev opened this issue 3 years ago • 0 comments

Hi.

Source file: common/vlq_base128_le.ksy

Look in screenshot below, it is source file compiled for C#. Since by default csharp uses Int32 type, shifts by '35', '42', '49' computes incorrectly.

image

Possible workaround to cast values to u8 in vlq_base128_le.ksy:

  value:
    value: >-
      (groups[0].value.as<u8>
      + (len >= 2 ? (groups[1].value.as<u8> << 7) : 0)
      + (len >= 3 ? (groups[2].value.as<u8> << 14) : 0)
      + (len >= 4 ? (groups[3].value.as<u8> << 21) : 0)
      + (len >= 5 ? (groups[4].value.as<u8> << 28) : 0)
      + (len >= 6 ? (groups[5].value.as<u8> << 35) : 0)
      + (len >= 7 ? (groups[6].value.as<u8> << 42) : 0)
      + (len >= 8 ? (groups[7].value.as<u8> << 49) : 0)).as<u8>

mikhail-khalizev avatar Nov 10 '21 17:11 mikhail-khalizev