Back to all reviewers

Defensive error handling

bytedance/sonic
Based on 2 comments
Go

Implement defensive checks when managing error state to prevent overwriting existing errors and add safeguards even when theoretically unnecessary. This approach helps avoid subtle bugs and makes code more robust against future modifications.

Error Handling Go

Reviewer Prompt

Implement defensive checks when managing error state to prevent overwriting existing errors and add safeguards even when theoretically unnecessary. This approach helps avoid subtle bugs and makes code more robust against future modifications.

Key practices:

  • Check if an error already exists before setting a new one
  • Add defensive checks in error-prone scenarios even if the underlying implementation already handles them
  • Prioritize code safety over theoretical optimization

Example from the codebase:

// Before: Risk of overwriting existing error
if self.readMore() {
    goto try_skip
} else {
    err = SyntaxError{e, self.s, types.ParsingError(-s), ""}
    self.setErr(err)
    return
}

// After: Defensive check prevents overwriting
if self.readMore() {
    goto try_skip
}
if self.err == nil {
    self.setErr(SyntaxError{e, self.s, types.ParsingError(-s), ""})
}
return self.err

This defensive approach prevents losing important error context and makes the code more maintainable as it evolves.

2
Comments Analyzed
Go
Primary Language
Error Handling
Category

Source Discussions