Masked ProtoField.uint64 differences between 4.2 and 3.6
Hello, I developed a dissector that works under Wireshark 4.2 but now need it to run under 3.6, and am stuck on one of the differences between the versions.
I have some uint64 ProtoFields that represent 44-bit values so they use masks (i.e. they provide a non-nil 5th parameter to ProtoField.uint64) to get their values from an 8-byte range. In 4.2, the masks work when they are defined like UInt64.new(xxx, yyy), but in 3.6 that causes an error "bad argument #5 to 'uint64' (number expected, got userdata)". I tried using string masks instead with 3.6 (e.g. "0xyyyxxx") but the behavior then is that the ProtoFields appear to lose the upper bits of their values, so e.g. the field's value ends up 0x000000000a050000 instead of the correct 0x0000157c4a050000.
An example mask (that works in 4.2) is UInt64.new(0xFFFFFFB0, 0x0003FFFF). Is there a way to express that mask in a way that Wireshark 3.6 will do the right thing with a uint64 ProtoField? Is there some other way I could populate the 44-bit ProtoFields by doing the masking manually?