From 58facfbe7db2fbb9afed794b281a70bdb12a60ae Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Mon, 28 Mar 2022 18:41:26 -0700 Subject: [release-branch.go1.17] encoding/xml: use iterative Skip, rather than recursive Prevents exhausting the stack limit in _incredibly_ deeply nested structures. Fixes #53711 Updates #53614 Fixes CVE-2022-28131 Change-Id: I47db4595ce10cecc29fbd06afce7b299868599e6 Reviewed-on: https://team-review.git.corp.google.com/c/golang/go-private/+/1419912 Reviewed-by: Julie Qiu Reviewed-by: Damien Neil (cherry picked from commit 9278cb78443d2b4deb24cbb5b61c9ba5ac688d49) Reviewed-on: https://go-review.googlesource.com/c/go/+/417068 TryBot-Result: Gopher Robot Reviewed-by: Heschi Kreinick Run-TryBot: Michael Knyszek --- src/encoding/xml/read_test.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/encoding/xml/read_test.go') diff --git a/src/encoding/xml/read_test.go b/src/encoding/xml/read_test.go index 8c2e70fa22..4ccab3d010 100644 --- a/src/encoding/xml/read_test.go +++ b/src/encoding/xml/read_test.go @@ -5,8 +5,10 @@ package xml import ( + "bytes" "io" "reflect" + "runtime" "strings" "testing" "time" @@ -1079,3 +1081,19 @@ func TestUnmarshalWhitespaceAttrs(t *testing.T) { t.Fatalf("whitespace attrs: Unmarshal:\nhave: %#+v\nwant: %#+v", v, want) } } + +func TestCVE202230633(t *testing.T) { + if runtime.GOARCH == "wasm" { + t.Skip("causes memory exhaustion on js/wasm") + } + defer func() { + p := recover() + if p != nil { + t.Fatal("Unmarshal panicked") + } + }() + var example struct { + Things []string + } + Unmarshal(bytes.Repeat([]byte(""), 17_000_000), &example) +} -- cgit v1.2.3-54-g00ecf