I figured out what the actual layout of this property is (instead of guessing, which created some bad results.) And added tests of course! Also fixed a bug in read_string_with_length() that didn't handle the case where the string length is zero.
A lot of them are just u32 length + byte string, and can be moved into a common parsing function.