Skip to content

[cpp-LIN-07] Message-to-frame conversion silently coerces any unrecognized checksum-type value to Classic #37

Description

@SoundMatt

Location: src/lin.cpp (the message-to-frame conversion function, around lines 121-125)

Finding: The function that turns a generic message back into a LIN frame treats any meta value other than the one specific named 'enhanced' literal as Classic — including empty strings, typos, or (per the companion fixture issue) a bare numeral. Round-tripping a frame through serialize-then-deserialize is therefore not guaranteed lossless: an already-shipped test fixture with a malformed checksum-type value deserializes silently to Classic even though it should represent Enhanced. The spec's requirement that mandatory-field round-tripping be lossless is violated, and there is no error path for an unrecognized value — malformed input is accepted silently rather than rejected.

Recommendation: Explicitly match both the 'classic' and 'enhanced' named literals, and treat any other non-empty value as an error (e.g. return/throw the existing invalid-frame error type) rather than defaulting to Classic.

Filed from the 2026-07-29 ecosystem audit register; independently re-verified against current HEAD before filing.

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions