encoding/asn1: Marshal/Unmarshal will create/parse invalid SETs #39036
Labels
NeedsInvestigation
Someone must examine and confirm this is a valid issue and not a duplicate of an existing one.
Milestone
Marshal and Unmarshal will happily encode and parse invalid SETs. Every component of a SET must have a distinct tag, either by using distinct types of each field or using explicit tagging to get around having multiple non-distinct fields. This specification of SETs allows for undefined ordering of components, since in theory each component can only map to a single field.
Currently Marshal ignores this and will happily encode a SET with multiple identical component tags. Similarly Unmarshal will parse an invalid SET. Due to how parsing works though (SETs are parsed in order, the same as SEQUENCEs, so unordered SETs with distinct fields cannot be parsed, see #19873) enforcing this constraint wouldn't provide significant benefit.
I took a stab at this in https://go-review.googlesource.com/c/go/+/233199, but realized that the naive approach of just using the field type was not sufficient. Really the struct test would need to take the final tag for a field into account, after explicit tagging etc has been applied, but unfortunately there is a bunch of logic that happens outside of
getUniversalType
for determining that which makes it hard to copy into a separate method.The text was updated successfully, but these errors were encountered: