Skip to content

Some replays causing a Go runtime crash (working in SC) #29

@msikma

Description

@msikma

Today I was stress testing some of my own code that uses screp's JSON output on a big pack of replays. By doing so I found a couple of replays that screp is unable to parse. Most of these were broken in Starcraft as well, but I found a couple (19) that work just fine in-game but cause a Go runtime error when parsing with screp:

2022/02/04 22:55:10 Parsing error: runtime error: slice bounds out of range [:262319] with capacity 262318
2022/02/04 22:55:10 Stack: goroutine 1 [running]:
github.com/icza/screp/repparser.parseProtected.func1()
	/Users/msikma/Source/screp/repparser/repparser.go:143 +0x8d
panic({0x10f09e0, 0xc00013e270})
	/usr/local/Cellar/go/1.17/libexec/src/runtime/panic.go:1038 +0x215
github.com/icza/screp/repparser.(*sliceReader).getString(...)
	/Users/msikma/Source/screp/repparser/slicereader.go:36
github.com/icza/screp/repparser.parseMapData({0xc0002d6000, 0x400ae, 0x279}, 0xc0000b8080, {0x1e, 0x0, 0x0, {}})
	/Users/msikma/Source/screp/repparser/repparser.go:716 +0xfa5
github.com/icza/screp/repparser.parse({0x11229b8, 0xc0000bc1c0}, {0x0, 0x0, 0x0, {}})
	/Users/msikma/Source/screp/repparser/repparser.go:238 +0x1a6
github.com/icza/screp/repparser.parseProtected({0x11229b8, 0xc0000bc1c0}, {0x44, 0x40, 0xb, {}})
	/Users/msikma/Source/screp/repparser/repparser.go:149 +0x72
github.com/icza/screp/repparser.ParseFileConfig({0x7ffeefbff19e, 0xc0000b8010}, {0xe0, 0x4c, 0x1b, {}})
	/Users/msikma/Source/screp/repparser/repparser.go:110 +0xc8
github.com/icza/screp/repparser.ParseFile(...)
	/Users/msikma/Source/screp/repparser/repparser.go:91
main.main()
	/Users/msikma/Source/screp/cmd/screp/screp.go:56 +0xed
Failed to parse replay: parsing

Here's the version I'm on, which seems to be the latest:

screp version: v1.5.1
Parser version: v1.7.0
EAPM algorithm version: v1.0.4
Platform: darwin amd64
Built with: go1.17
Author: Andras Belicza
Home page: https://github.com/icza/screp

And Go, which is admittedly probably not the latest.

go version go1.17.5 darwin/amd64

Here are the files. These replays are from an autoreplay pack of 2011-2013 posted by Scan at some point.

I did not open all of them in-game, but at least they all fail to parse by screp (and all with the same error that I pasted above) and the couple that I tested seem to play back just fine in Starcraft and don't even seem to desync. At the very least they all show a valid list of players+duration on the replay screen.

Note that by far most files from this replay pack work just fine, it's just this small number that fails.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions