aboutsummaryrefslogtreecommitdiff
path: root/src/encoding
diff options
context:
space:
mode:
authorJes Cok <xigua67damn@gmail.com>2024-06-30 02:46:12 +0800
committerGopher Robot <gobot@golang.org>2024-09-23 18:05:24 +0000
commitc9ad32bd9f670a64292de17d09f9ec8294a60f39 (patch)
treeda2387b99c7dc13ac5e752724184ea9ba3e6c8cd /src/encoding
parent7d114b5b71a03aa90fc560878acf19cc7251d216 (diff)
downloadgo-c9ad32bd9f670a64292de17d09f9ec8294a60f39.tar.xz
encoding/asn1: unmarshal bool values correctly dealing with the ANY type
Fixes #68241 Change-Id: I1ee81aa50c2f39f535ad27309e855f19acb2f2ea Reviewed-on: https://go-review.googlesource.com/c/go/+/595796 Auto-Submit: Roland Shoemaker <roland@golang.org> Reviewed-by: David Chase <drchase@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Roland Shoemaker <roland@golang.org>
Diffstat (limited to 'src/encoding')
-rw-r--r--src/encoding/asn1/asn1.go2
-rw-r--r--src/encoding/asn1/marshal_test.go20
2 files changed, 22 insertions, 0 deletions
diff --git a/src/encoding/asn1/asn1.go b/src/encoding/asn1/asn1.go
index 781ab87691..56e007d3a6 100644
--- a/src/encoding/asn1/asn1.go
+++ b/src/encoding/asn1/asn1.go
@@ -702,6 +702,8 @@ func parseField(v reflect.Value, bytes []byte, initOffset int, params fieldParam
if !t.isCompound && t.class == ClassUniversal {
innerBytes := bytes[offset : offset+t.length]
switch t.tag {
+ case TagBoolean:
+ result, err = parseBool(innerBytes)
case TagPrintableString:
result, err = parsePrintableString(innerBytes)
case TagNumericString:
diff --git a/src/encoding/asn1/marshal_test.go b/src/encoding/asn1/marshal_test.go
index 64ce476400..dfd6d4e40b 100644
--- a/src/encoding/asn1/marshal_test.go
+++ b/src/encoding/asn1/marshal_test.go
@@ -311,6 +311,26 @@ func TestIssue11130(t *testing.T) {
}
}
+func TestIssue68241(t *testing.T) {
+ for i, want := range []any{false, true} {
+ data, err := Marshal(want)
+ if err != nil {
+ t.Errorf("cannot Marshal: %v", err)
+ return
+ }
+
+ var got any
+ _, err = Unmarshal(data, &got)
+ if err != nil {
+ t.Errorf("cannot Unmarshal: %v", err)
+ return
+ }
+ if !reflect.DeepEqual(got, want) {
+ t.Errorf("#%d Unmarshal, got: %v, want: %v", i, got, want)
+ }
+ }
+}
+
func BenchmarkMarshal(b *testing.B) {
b.ReportAllocs()