From 3298300ddf45a0792b4d8ea5e05f0fbceec4c9f9 Mon Sep 17 00:00:00 2001 From: Meng Zhuo Date: Thu, 10 Dec 2020 09:52:52 +0800 Subject: text/template: error on range over send channel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit template range require channel contains RecvDir if recv on send only channel will raise an panic. Fixes #43065 Change-Id: Ie0ea70ce60e074bf8c9f2378e07ef1d4c41dc38f Reviewed-on: https://go-review.googlesource.com/c/go/+/276532 Trust: Meng Zhuo Run-TryBot: Meng Zhuo TryBot-Result: Go Bot Reviewed-by: Jonathan Amsterdam Reviewed-by: Daniel Martí --- src/text/template/exec.go | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/text/template/exec.go') diff --git a/src/text/template/exec.go b/src/text/template/exec.go index 7ac5175006..19154fc640 100644 --- a/src/text/template/exec.go +++ b/src/text/template/exec.go @@ -373,6 +373,10 @@ func (s *state) walkRange(dot reflect.Value, r *parse.RangeNode) { if val.IsNil() { break } + if val.Type().ChanDir() == reflect.SendDir { + s.errorf("range over send-only channel %v", val) + break + } i := 0 for ; ; i++ { elem, ok := val.Recv() -- cgit v1.3-5-g9baa