Skip to content

Commit 2629b96

Browse files
committed
Don't panic, return error if header not parsed
1 parent fb732ff commit 2629b96

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

parsing.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,6 @@ const (
1616
playerWeaponPrePrefix = "bcc_nonlocaldata."
1717
)
1818

19-
const (
20-
msgHeaderNotParsed = "Tried to parse tick before parsing header"
21-
)
22-
2319
// Parsing errors
2420
var (
2521
// ErrCancelled signals that parsing was cancelled via Parser.Cancel()
@@ -31,6 +27,9 @@ var (
3127

3228
// ErrInvalidFileType signals that the input isn't a valid CS:GO demo.
3329
ErrInvalidFileType = errors.New("Invalid File-Type; expecting HL2DEMO in the first 8 bytes")
30+
31+
// ErrHeaderNotParsed signals that the header hasn't been parsed before attempting to parse a tick.
32+
ErrHeaderNotParsed = errors.New("Header must be parsed before trying to parse a tick. See Parser.ParseHeader()")
3433
)
3534

3635
// ParseHeader attempts to parse the header of the demo.
@@ -67,8 +66,7 @@ func (p *Parser) ParseHeader() (common.DemoHeader, error) {
6766

6867
// ParseToEnd attempts to parse the demo until the end.
6968
// Aborts and returns ErrCancelled if Cancel() is called before the end.
70-
// May return ErrUnexpectedEndOfDemo for incomplete / corrupt demos.
71-
// May panic if the demo is corrupt in some way.
69+
// See also: ParseNextFrame() for other possible errors.
7270
func (p *Parser) ParseToEnd() (err error) {
7371
defer func() {
7472
if err == nil {
@@ -77,7 +75,7 @@ func (p *Parser) ParseToEnd() (err error) {
7775
}()
7876

7977
if p.header == nil {
80-
panic(msgHeaderNotParsed)
78+
return ErrHeaderNotParsed
8179
}
8280

8381
for {
@@ -121,8 +119,10 @@ func (p *Parser) Cancel() {
121119

122120
// ParseNextFrame attempts to parse the next frame / demo-tick (not ingame tick).
123121
// Returns true unless the demo command 'stop' or an error was encountered.
122+
// Returns an error if the header hasn't been parsed yet - see Parser.ParseHeader().
124123
// May return ErrUnexpectedEndOfDemo for incomplete / corrupt demos.
125-
// Panics if header hasn't been parsed yet - see Parser.ParseHeader().
124+
// May panic if the demo is corrupt in some way.
125+
// See also: ParseToEnd() for parsing the complete demo in one go (faster).
126126
func (p *Parser) ParseNextFrame() (b bool, err error) {
127127
defer func() {
128128
if err == nil {
@@ -131,7 +131,7 @@ func (p *Parser) ParseNextFrame() (b bool, err error) {
131131
}()
132132

133133
if p.header == nil {
134-
panic(msgHeaderNotParsed)
134+
return false, ErrHeaderNotParsed
135135
}
136136

137137
b = p.parseFrame()

0 commit comments

Comments
 (0)