// fixOffset fixes an out-of-bounds offset such that 0 <= offset <= f.size.
func (f *File) fixOffset(offset int) int {
- switch {
- case offset < 0:
- if !debug {
- return 0
- }
- case offset > f.size:
- if !debug {
- return f.size
- }
- default:
- return offset
- }
-
- // only generate this code if needed
- if debug {
+ if debug && !(0 <= offset && offset <= f.size) {
panic(fmt.Sprintf("offset %d out of bounds [%d, %d] (position %d out of bounds [%d, %d])",
0 /* for symmetry */, offset, f.size,
f.base+offset, f.base, f.base+f.size))
}
- return 0
+ return max(min(f.size, offset), 0)
}
// Pos returns the Pos value for the given file offset.