mirror of https://github.com/golang/go.git
encoding/asn1: fix unmarshalling SEQUENCE OF SET
Fixes #27426
Change-Id: I34d4784658ce7b9e6130bae9717e80d0e9a290a2
GitHub-Last-Rev: 6de610cdce
GitHub-Pull-Request: golang/go#30059
Reviewed-on: https://go-review.googlesource.com/c/go/+/160819
Reviewed-by: Agniva De Sarker <agniva.quicksilver@gmail.com>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Agniva De Sarker <agniva.quicksilver@gmail.com>
This commit is contained in:
parent
aff3aaa47f
commit
4692343cf4
|
|
@ -1129,3 +1129,22 @@ func TestBMPString(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSequenceOfSet(t *testing.T) {
|
||||||
|
type someSetSET struct {
|
||||||
|
A int `asn1:"tag:0"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type someStruct struct {
|
||||||
|
B int `asn1:"tag:0"`
|
||||||
|
C []someSetSET `asn1:"tag:1"`
|
||||||
|
}
|
||||||
|
|
||||||
|
der := []byte{0x30, 0x0F, 0x80, 0x01, 0x01, 0xA1, 0x0A, 0x31, 0x03, 0x80, 0x01, 0x01, 0x31, 0x03, 0x80, 0x01, 0x02}
|
||||||
|
|
||||||
|
var b someStruct
|
||||||
|
if _, err := Unmarshal(der, &b); err != nil {
|
||||||
|
t.Errorf("Unmarshal failed: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -167,6 +167,9 @@ func getUniversalType(t reflect.Type) (matchAny bool, tagNumber int, isCompound,
|
||||||
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
|
||||||
return false, TagInteger, false, true
|
return false, TagInteger, false, true
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
|
if strings.HasSuffix(t.Name(), "SET") {
|
||||||
|
return false, TagSet, true, true
|
||||||
|
}
|
||||||
return false, TagSequence, true, true
|
return false, TagSequence, true, true
|
||||||
case reflect.Slice:
|
case reflect.Slice:
|
||||||
if t.Elem().Kind() == reflect.Uint8 {
|
if t.Elem().Kind() == reflect.Uint8 {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue