News for hackers. Stuff that matters.
Re:Systemd is bad parsing by int_19h on Saturday October 27, 2018 @03:56PM (#18317398)
The problem is that the higher-level abstraction is broken. Specifically, the abstraction provided here is "extract an integer of unspecified size and endianness from a byte stream" (note that the size of short isn't guaranteed to be anything specifically, other than 2 <= sizeof(short) <= sizeof(int)). And ntohs is another abstraction which amounts to, "make the endianness correct for the current system, assuming that it was originally big-endian". Not that it doesn't work - it's just not well-designed, and too easy to use incorrectly.

A proper abstraction is the one where you specify both the size and the endianness at the point where you extract the value - i.e. where you just call a function like read_int16_be(byte_stream).

Re:Systemd is bad parsing by zAy0LfpBZLC8mAC on Saturday October 27, 2018 @05:00PM (#18317625)
> (note that the size of short isn't guaranteed to be anything specifically, other than 2 <= sizeof(short) <= sizeof(int)).

That isn't guaranteed. sizeof(short) and sizeof(int) are both allowed to be 1 on a system with chars at least 16 or 32 bits wide, respectively.

Re:Systemd is bad parsing by int_19h on Saturday October 27, 2018 @06:10PM (#18317982)
Yep, you're right.

Which just goes to show that these are not the types you want to be using for any kind of portable binary I/O.