Fixing the ISOs Work

04-07-2020 - 1 minute, 49 seconds - Rant ASN.1

Recently I had to implement encoder/decoders for some ISO standardized data structures in the area of intelligent transport systems. It's always nice having standards. Work went well until I encountered ISO 14823:2017. Up to this, for some strange reason, I considered ISO standards as infallible and of absolute quality.

My fallacy struck me when I went on to compile the not even 200 lines of ASN.1 in the appendix. Right in the first 30 lines, in sequence GddAttributes we encounter the first error.

A0120E: Parsing error: expecting '}' but found Sign-applicablePeriod.
dtm International Sign-applicablePeriod, -- Date/Time/Period
                  ^

Of course its supposed to be InternationalSign-applicablePeriod. Two type references don't make sense. There was a space for some reason.

Same thing for ISO14823Code (which was ISO 14823Code). But there is more...

A0120E: Parsing error: expecting '::=', '{' or an ASN.1 Type but found ':'.
InternationalSign-exemptedApplicablePeriod:: = InternationalSign-applicablePeriod
                                          ^

So we got a messed up assignment operator ::= in the definiton of InternationalSign-exemptedApplicablePeriod. Reason being yet another stray space. This was also the case for its equally well named friends InternationalSign-directionalFlowOfLane, InternationalSign-applicableVehicleDimensions, InternationalSign-speedLimits and code-Units.

Next some elementary mistakes. Nothing one could blame the auto-formatting logic of his word processor for.

A0151E: 'code-Units' is being used as a typereference, but does not start with an uppercase letter.
unit code-Units(2..4|6..8)
     ^

ASN.1 rules dictate that only identifiers start with lowercase letters. Type references, as the error message tells us, shall start with an uppercase letter, so code-Units should have been Code-Units.

Same thing for destinationType, destinationRoadType and distinationInformation_IO. The latter one even has a typo *facepalm*.

Finally we get presented a syntax error. A stay comma.

A0427W: Mixed 1990 and 2015 ASN.1 syntax: "missing identifier" on line 159 and "AUTOMATIC" on line 4.
ABSENT}),OPTIONAL,
         ^

In barely 200 lines, I certainly did not expected so many mistakes. Sure, we are all humans and some bugs might have been introduced when they copy & pasted the ASN.1 into MS Word (i assume), but still. Someone messed up and the technical reviewer(s) were not thorough. I'm a bit disappointed and disillusioned.

On a sidenote, ISO 14823:2017 is currently reviewed and will be replaced by ISO/CD 14823-1. Well founded in my opinion.

Next Post Previous Post