Something that is really difficult to avoid in very low-level scenarios is the introduction of parasitic behavior: e.g. if the inputs are not completely according to protocol, it is often not possible to "raise an error". E.g. extra behavior is implemented. The down side of this is that it can enable bad implementations at the other end of the protocol.