x/net/spdy: makemap: size out of range
dvyukov opened this issue · comments
Dmitry Vyukov commented
The following program crashes:
package main
import (
"bytes"
"encoding/hex"
"golang.org/x/net/spdy"
"io/ioutil"
)
func main() {
data, _ := hex.DecodeString("80300001303030303030303030303030303078f9e3c6a7c2eb25103000")
framer, err := spdy.NewFramer(ioutil.Discard, bytes.NewReader(data))
if err != nil {
panic(err)
}
for score := 0; ; score++ {
f, err := framer.ReadFrame()
if err != nil {
if f != nil {
panic(err)
}
return
}
err = framer.WriteFrame(f)
if err != nil {
panic(err)
}
}
}
panic: makemap: size out of range
goroutine 1 [running]:
runtime.gopanic(0x6376a0, 0xc20800ad40)
src/runtime/panic.go:477 +0x410 fp=0xc20804fa38 sp=0xc20804f9b8
runtime.makemap(0x6de920, 0x8d417072, 0x0, 0x0, 0x627b40)
src/runtime/hashmap.go:194 +0x4b1 fp=0xc20804fa98 sp=0xc20804fa38
golang.org/x/net/spdy.parseHeaderValueBlock(0x7f57597ab6f0, 0xc2080124b0, 0xc230303030, 0x7f57597ab6f0, 0x0, 0x0)
src/golang.org/x/net/spdy/read.go:183 +0x173 fp=0xc20804fc38 sp=0xc20804fa98
golang.org/x/net/spdy.(*Framer).readSynStreamFrame(0xc2080201e0, 0x3000010030, 0xc200303030, 0xc20800e8e0, 0x0, 0x0)
src/golang.org/x/net/spdy/read.go:243 +0x53a fp=0xc20804fd58 sp=0xc20804fc38
golang.org/x/net/spdy.(*SynStreamFrame).read(0xc20800e8e0, 0x7f3000010030, 0xc200303030, 0xc2080201e0, 0x0, 0x0)
src/golang.org/x/net/spdy/read.go:16 +0x65 fp=0xc20804fd90 sp=0xc20804fd58
golang.org/x/net/spdy.(*Framer).parseControlFrame(0xc2080201e0, 0xc200010030, 0x0, 0x0, 0x0, 0x0)
src/golang.org/x/net/spdy/read.go:171 +0x238 fp=0xc20804fe38 sp=0xc20804fd90
golang.org/x/net/spdy.(*Framer).ReadFrame(0xc2080201e0, 0x0, 0x0, 0x0, 0x0)
src/golang.org/x/net/spdy/read.go:154 +0x18a fp=0xc20804fec8 sp=0xc20804fe38
main.main()
/tmp/spdy.go:17 +0x19d fp=0xc20804ff90 sp=0xc20804fec8
on commit 6f62f426de90c0ed6a55207b51476115fcb17237