]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/asn1: fix unmarshalling SEQUENCE OF SET
authorkaxapi <kashimov@gmail.com>
Mon, 14 Oct 2019 10:12:05 +0000 (10:12 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Fri, 8 Nov 2019 18:28:44 +0000 (18:28 +0000)
Fixes #27426

Change-Id: I34d4784658ce7b9e6130bae9717e80d0e9a290a2
GitHub-Last-Rev: 6de610cdcef11832f131b84a0338b68af16b10da
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>

src/encoding/asn1/asn1_test.go
src/encoding/asn1/common.go

index d5649bff9fadf8748024ed1b81f89c9163f7940e..5cadf31510ccc3b33a6f383eef606a4e3afd225b 100644 (file)
@@ -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)
+       }
+
+}
index e2aa8bd9c578e3bae4f2f562603ceef6f3fa61d2..b0ca1c8aabb8d23c6ce5a64f894c843858ac7a4b 100644 (file)
@@ -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:
                return false, TagInteger, false, true
        case reflect.Struct:
+               if strings.HasSuffix(t.Name(), "SET") {
+                       return false, TagSet, true, true
+               }
                return false, TagSequence, true, true
        case reflect.Slice:
                if t.Elem().Kind() == reflect.Uint8 {