]> Cypherpunks repositories - gostls13.git/commit
io: relax documented Seeker invariants that do not hold in practice
authorBryan C. Mills <bcmills@google.com>
Fri, 10 Sep 2021 14:47:03 +0000 (10:47 -0400)
committerBryan C. Mills <bcmills@google.com>
Tue, 21 Sep 2021 13:18:09 +0000 (13:18 +0000)
commit39e08c6cd75da72059a58f05eb500b48124d563e
treef3a430adc6c1a379a15d9cd3522552d61b41fe29
parent9cbdc1d48f75188f6816259e5f6cbd9ae8458bf9
io: relax documented Seeker invariants that do not hold in practice

Use “or” instead of “and” to describe error behavior.
On error, nearly all Seeker implementations in the Go repo return
0 instead of “the new offset”. (Arguably on error “the new offset”
is the same as the previous offset, but some Seeker implementations
don't have that offset readily available.)

Don't claim that “any positive offsite is legal”.
In practice, most of the Seeker implementations within the Go standard
library do not allow “[s]eeking to any [arbitrary] positive offset”:
some reject all out-of-bounds offsets, and some reject only a subset
that happen to overflow some underlying representation. Since some
positive offsets may be rejected, we cannot claim that seeking to
those offsets “is legal”. However, to avoid invalidating existing
Seeker implemetations we must not require an implementation to reject
invalid positive offsets either.

This is technically a breaking change, since callers of Seek are no
longer allowed to assume that a Seek resulting in an arbitrary
positive offset will succeed. However, since basically none of the
existing implementations actually conformed to the documented behavior
I believe this falls under the “specification errors” exception to the
Go 1 compatibility policy.

Fixes #48316

Change-Id: Ib1b478599b20ad5361bcc97fe8ceb84f74e6d971
Reviewed-on: https://go-review.googlesource.com/c/go/+/349054
Trust: Bryan C. Mills <bcmills@google.com>
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Rob Pike <r@golang.org>
src/io/io.go