cockroachdb / cockroachdb/errors

Possible "index out of range" in `equalMarks`

Aberta
#97 2 comentários 1 reação 0 responsáveis Ver no GitHub
Linguagem predominante
Go
Estrelas
2.5k
Forks
74
Métricas de merge de PRs
Nenhum PR com merge em 30d

Descrição

Hello!

I'm interested in carefree [iteration](https://github.com/cockroachdb/errors/blob/217058372e2042c4d08384adbd883316372f1070/markers/markers.go#L200) over lists whose lengths can vary:
```go
// equalMarks compares two error markers.
func equalMarks(m1, m2 errorMark) bool {
if m1.msg != m2.msg {
return false
}
for i, t := range m1.types {
if !t.Equals(m2.types[i]) {
return false
}
}
return true
}
```

And I made an example that breaks this code:
```go
package main

import (
"fmt"
"github.com/cockroachdb/errors"
)

type SimpleWrapper struct {
err error
}

func (w SimpleWrapper) Error() string {
return "boom!"
}

func (w SimpleWrapper) Unwrap() error {
return w.err
}

func main() {
stack := errors.WithStack

ref := stack(stack(SimpleWrapper{}))
err := stack(stack(SimpleWrapper{err: stack(errors.New("boom!"))}))

if errors.IsAny(err, ref) {
fmt.Println("gotcha!")
}

/* panic: runtime error: index out of range [3] with length 3

goroutine 1 [running]:
github.com/cockroachdb/errors/markers.equalMarks(...)
github.com/cockroachdb/errors@v1.9.0/markers/markers.go:205
github.com/cockroachdb/errors/markers.IsAny({0x102802528, 0x1400000e438}, {0x14000167f48, 0x1, 0x14000167f28?})
github.com/cockroachdb/errors@v1.9.0/markers/markers.go:186 +0x364
github.com/cockroachdb/errors.IsAny(...)
github.com/cockroachdb/errors@v1.9.0/markers_api.go:64
main.main()
examples/04-non-standard-modules/cockroach-is-any-bug/main.go:26 +0x318
*/
}
```

Where am I wrong?

Guia de contribuição

Nenhum guia de contribuição indexado para este repositório

Avaliação

Esta issue ainda não foi avaliada.

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.