cockroachdb / cockroachdb/errors

Possible "index out of range" in `equalMarks`

Abierto
#97 2 comentarios 1 reacción 0 asignados Ver en GitHub
Lenguaje dominante
Go
Estrellas
2.5k
Forks
74
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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?

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.