fn hash_identifier(parts: &[&str]) -> StringExpand description
Digests parts framed by PART_SEPARATOR, dropping the separator wherever a part contains it
itself.
Without that the framing is forgeable: the service name, message and stack trace of an error report are whatever the reporter sent, and a separator placed where one part ends lets a crafted report claim another error’s identity and merge into its aggregate. Dropping rather than escaping keeps every identifier already stored valid, and loses nothing real, since Postgres cannot hold a null byte in a text column anyway.