MIDI file encoded wrong?

Alexander Toth's icon

I'm developing my own library of functions (in C++) for parsing MIDI files (partly as a way to understand the MIDI standard) and feel like I keep finding files that don't represent the standard. For example, I found this MIDI file (attached) of Somebody that I Used to Know, and the Set Tempo message only has two data bytes, whereas it should have three. I've been finding a lot of MIDI files that seem to misrepresent the standard in this way (of not having enough data bytes for a fixed-length event), most particularly for Set Tempo and Control Change messages (the latter of which often seems to omit the pressure value data byte).

I keep wondering if there's something in the standard that allows data bytes of 0 (such as the last byte of a 24-bit tempo representation, or a pressure value of 0) to be omitted, but I can't find anything online that would indicate that this is the case. I know this isn't really a Max (or Java) question, but I figure someone on here would be able to help me out.

gotye_somebody_that_i_used_to_know.mid
mid