Skip to content

Commit e42e793

Browse files
committed
make sure that len and cap are >= 0
Change-Id: I687b2ac63a61b82561013b87f0b9d0c37c640719
1 parent a6e512c commit e42e793

File tree

1 file changed

+10
-5
lines changed

1 file changed

+10
-5
lines changed

src/cmd/compile/internal/escape/escape.go

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,13 @@ func Funcs(all []*ir.Func) {
128128
if n, ok := n.(*ir.MakeExpr); ok {
129129
if n.Cap != nil {
130130
if s := ir.StaticValue(n.Cap); s.Op() == ir.OLITERAL {
131-
if v, ok := s.(*ir.BasicLit); !ok || v.Val().Kind() != constant.Int {
131+
cap, ok := s.(*ir.BasicLit)
132+
if !ok || cap.Val().Kind() != constant.Int {
132133
base.Fatalf("unexpected BasicLit Kind")
133134
}
134-
n.Cap = s
135+
if constant.Compare(cap.Val(), token.GEQ, constant.MakeInt64(0)) {
136+
n.Cap = s
137+
}
135138
}
136139
}
137140
if n.Len != nil {
@@ -141,9 +144,11 @@ func Funcs(all []*ir.Func) {
141144
base.Fatalf("unexpected BasicLit Kind")
142145
}
143146

144-
cap, ok := n.Cap.(*ir.BasicLit)
145-
if n.Cap == nil || (ok && constant.Compare(cap.Val(), token.GEQ, len.Val())) {
146-
n.Len = s
147+
if constant.Compare(len.Val(), token.GEQ, constant.MakeInt64(0)) {
148+
cap, ok := n.Cap.(*ir.BasicLit)
149+
if n.Cap == nil || (ok && constant.Compare(cap.Val(), token.GEQ, len.Val())) {
150+
n.Len = s
151+
}
147152
}
148153
}
149154
}

0 commit comments

Comments
 (0)