cockroachdb / cockroachdb/cockroach
Sentry: catch.go:24: runtime error: index out of range [0] with length 0 (1) while executing: SELECT st_s2covering(_) Wraps: (2) assertion failure Wraps: (3) attached stack trace -- stack trace: |...
- Dominant language
- Go
- Stars
- 32.5k
- Forks
- 4.1k
- PR merge metrics
- PR metrics pending
Description
This issue was auto filed by Sentry. It represents a crash or reported error on a live cluster with telemetry enabled.
Sentry Link: [https://cockroach-labs.sentry.io/issues/7695156687/?referrer=webhooks_plugin](https://cockroach-labs.sentry.io/issues/7695156687/?referrer=webhooks_plugin)
Panic Message:
```
catch.go:24: runtime error: index out of range [0] with length 0
(1) while executing: SELECT st_s2covering(_)
Wraps: (2) assertion failure
Wraps: (3) attached stack trace
-- stack trace:
| github.com/cockroachdb/cockroach/pkg/util/errorutil.shouldCatch
| pkg/util/errorutil/catch.go:24
| github.com/cockroachdb/cockroach/pkg/util/errorutil.MaybeCatchPanic
| pkg/util/errorutil/catch.go:38
| runtime.gopanic
| GOROOT/src/runtime/panic.go:783
| runtime.goPanicIndex
| GOROOT/src/runtime/panic.go:115
| github.com/twpayne/go-geom.(*Point).X
| external/com_github_twpayne_go_geom/point.go:96
| github.com/cockroachdb/cockroach/pkg/geo/geoindex.(*s2GeometryIndex).geomExceedsBounds
| pkg/geo/geoindex/s2_geometry_index.go:336
| github.com/cockroachdb/cockroach/pkg/geo/geoindex.(*s2GeometryIndex).geomExceedsBounds
| pkg/geo/geoindex/s2_geometry_index.go:361
| github.com/cockroachdb/cockroach/pkg/geo/geoindex.(*s2GeometryIndex).convertToGeomTAndTryClip
| pkg/geo/geoindex/s2_geometry_index.go:293
| github.com/cockroachdb/cockroach/pkg/geo/geoindex.(*s2GeometryIndex).InvertedIndexKeys
| pkg/geo/geoindex/s2_geometry_index.go:181
| github.com/cockroachdb/cockroach/pkg/geo/geoindex.(*s2GeometryIndex).CoveringGeometry
| pkg/geo/geoindex/s2_geometry_index.go:508
| github.com/cockroachdb/cockroach/pkg/sql/sem/builtins.init.func457
| pkg/sql/sem/builtins/geo_builtins.go:612
| github.com/cockroachdb/cockroach/pkg/sql/sem/builtins.geometryOverload1.func1
| pkg/sql/sem/builtins/geo_builtins.go:7407
| github.com/cockroachdb/cockroach/pkg/sql/sem/eval.(*evaluator).EvalFuncExpr
| pkg/sql/sem/eval/expr.go:502
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FuncExpr).Eval
| bazel-out/k8-opt/bin/pkg/sql/sem/tree/eval_expr_generated.go:291
| github.com/cockroachdb/cockroach/pkg/sql/sem/eval.Expr
| pkg/sql/sem/eval/expr.go:22
| github.com/cockroachdb/cockroach/pkg/sql/opt/norm.(*CustomFuncs).FoldFunction
| pkg/sql/opt/norm/fold_constants_funcs.go:729
| github.com/cockroachdb/cockroach/pkg/sql/opt/norm.(*Factory).ConstructFunction
| bazel-out/k8-opt/bin/pkg/sql/opt/norm/factory.og.go:22280
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildFunction
| pkg/sql/opt/optbuilder/scalar.go:574
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildScalar
| pkg/sql/opt/optbuilder/scalar.go:331
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildProjectionList
| pkg/sql/opt/optbuilder/project.go:203
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildSelectClause
| pkg/sql/opt/optbuilder/select.go:1317
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildSelectStmtWithoutParens
| pkg/sql/opt/optbuilder/select.go:1210
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildSelect.func1
| pkg/sql/opt/optbuilder/select.go:1162
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).processWiths
| pkg/sql/opt/optbuilder/with.go:110
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildSelect
| pkg/sql/opt/optbuilder/select.go:1161
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmt
| pkg/sql/opt/optbuilder/builder.go:396
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmtAtRootWithScope
| pkg/sql/opt/optbuilder/builder.go:337
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).buildStmtAtRoot
| pkg/sql/opt/optbuilder/builder.go:313
| github.com/cockroachdb/cockroach/pkg/sql/opt/optbuilder.(*Builder).Build
| pkg/sql/opt/optbuilder/builder.go:292
| github.com/cockroachdb/cockroach/pkg/sql.(*optPlanningCtx).buildExecMemo
| pkg/sql/plan_opt.go:1003
| github.com/cockroachdb/cockroach/pkg/sql.(*planner).makeOptimizerPlanInternal
| pkg/sql/plan_opt.go:348
| github.com/cockroachdb/cockroach/pkg/sql.(*planner).makeOptimizerPlan
| pkg/sql/plan_opt.go:328
Wraps: (4) runtime error: index out of range [0] with length 0
| -- cause hidden behind barrier
| runtime error: index out of range [0] with length 0
| (1) runtime error: index out of range [0] with length 0
| Error types: (1) runtime.boundsError
Error types: (1) *safedetails.withSafeDetails (2) *assert.withAssertionFailure (3) *withstack.withStack (4) *barriers.barrierErr
-- report composition:
*barriers.barrierErr: masked error: runtime error: index out of range [0] with length 0
catch.go:24: *withstack.withStack (top exception)
*assert.withAssertionFailure
*safedetails.withSafeDetails: while executing: SELECT st_s2covering(_)
```
Stacktrace (expand for inline code snippets):
[pkg/sql/plan_opt.go#L327-L329](pkg/sql/plan_opt.go#L327-L329)
[pkg/sql/plan_opt.go#L347-L349](pkg/sql/plan_opt.go#L347-L349)
[pkg/sql/plan_opt.go#L1002-L1004](pkg/sql/plan_opt.go#L1002-L1004)
[pkg/sql/opt/optbuilder/builder.go#L291-L293](pkg/sql/opt/optbuilder/builder.go#L291-L293)
[pkg/sql/opt/optbuilder/builder.go#L312-L314](pkg/sql/opt/optbuilder/builder.go#L312-L314)
[pkg/sql/opt/optbuilder/builder.go#L336-L338](pkg/sql/opt/optbuilder/builder.go#L336-L338)
[pkg/sql/opt/optbuilder/builder.go#L395-L397](pkg/sql/opt/optbuilder/builder.go#L395-L397)
[pkg/sql/opt/optbuilder/select.go#L1160-L1162](pkg/sql/opt/optbuilder/select.go#L1160-L1162)
[pkg/sql/opt/optbuilder/with.go#L109-L111](pkg/sql/opt/optbuilder/with.go#L109-L111)
[pkg/sql/opt/optbuilder/select.go#L1161-L1163](pkg/sql/opt/optbuilder/select.go#L1161-L1163)
[pkg/sql/opt/optbuilder/select.go#L1209-L1211](pkg/sql/opt/optbuilder/select.go#L1209-L1211)
[pkg/sql/opt/optbuilder/select.go#L1316-L1318](pkg/sql/opt/optbuilder/select.go#L1316-L1318)
[pkg/sql/opt/optbuilder/project.go#L202-L204](pkg/sql/opt/optbuilder/project.go#L202-L204)
[pkg/sql/opt/optbuilder/scalar.go#L330-L332](pkg/sql/opt/optbuilder/scalar.go#L330-L332)
[pkg/sql/opt/optbuilder/scalar.go#L573-L575](pkg/sql/opt/optbuilder/scalar.go#L573-L575)
[bazel-out/k8-opt/bin/pkg/sql/opt/norm/factory.og.go#L22279-L22281](bazel-out/k8-opt/bin/pkg/sql/opt/norm/factory.og.go#L22279-L22281)
[pkg/sql/opt/norm/fold_constants_funcs.go#L728-L730](pkg/sql/opt/norm/fold_constants_funcs.go#L728-L730)
[pkg/sql/sem/eval/expr.go#L21-L23](pkg/sql/sem/eval/expr.go#L21-L23)
[bazel-out/k8-opt/bin/pkg/sql/sem/tree/eval_expr_generated.go#L290-L292](bazel-out/k8-opt/bin/pkg/sql/sem/tree/eval_expr_generated.go#L290-L292)
[pkg/sql/sem/eval/expr.go#L501-L503](pkg/sql/sem/eval/expr.go#L501-L503)
[pkg/sql/sem/builtins/geo_builtins.go#L7406-L7408](pkg/sql/sem/builtins/geo_builtins.go#L7406-L7408)
[pkg/sql/sem/builtins/geo_builtins.go#L611-L613](pkg/sql/sem/builtins/geo_builtins.go#L611-L613)
[pkg/geo/geoindex/s2_geometry_index.go#L507-L509](pkg/geo/geoindex/s2_geometry_index.go#L507-L509)
[pkg/geo/geoindex/s2_geometry_index.go#L180-L182](pkg/geo/geoindex/s2_geometry_index.go#L180-L182)
[pkg/geo/geoindex/s2_geometry_index.go#L292-L294](pkg/geo/geoindex/s2_geometry_index.go#L292-L294)
[pkg/geo/geoindex/s2_geometry_index.go#L360-L362](pkg/geo/geoindex/s2_geometry_index.go#L360-L362)
[pkg/geo/geoindex/s2_geometry_index.go#L335-L337](pkg/geo/geoindex/s2_geometry_index.go#L335-L337)
[external/com_github_twpayne_go_geom/point.go#L95-L97](external/com_github_twpayne_go_geom/point.go#L95-L97)
[GOROOT/src/runtime/panic.go#L114-L116](GOROOT/src/runtime/panic.go#L114-L116)
[GOROOT/src/runtime/panic.go#L782-L784](GOROOT/src/runtime/panic.go#L782-L784)
[pkg/util/errorutil/catch.go#L37-L39](pkg/util/errorutil/catch.go#L37-L39)
[pkg/util/errorutil/catch.go#L23-L25](pkg/util/errorutil/catch.go#L23-L25)
```
pkg/sql/plan_opt.go in pkg/sql.(*planner).makeOptimizerPlan at line 328
pkg/sql/plan_opt.go in pkg/sql.(*planner).makeOptimizerPlanInternal at line 348
pkg/sql/plan_opt.go in pkg/sql.(*optPlanningCtx).buildExecMemo at line 1003
pkg/sql/opt/optbuilder/builder.go in pkg/sql/opt/optbuilder.(*Builder).Build at line 292
pkg/sql/opt/optbuilder/builder.go in pkg/sql/opt/optbuilder.(*Builder).buildStmtAtRoot at line 313
pkg/sql/opt/optbuilder/builder.go in pkg/sql/opt/optbuilder.(*Builder).buildStmtAtRootWithScope at line 337
pkg/sql/opt/optbuilder/builder.go in pkg/sql/opt/optbuilder.(*Builder).buildStmt at line 396
pkg/sql/opt/optbuilder/select.go in pkg/sql/opt/optbuilder.(*Builder).buildSelect at line 1161
pkg/sql/opt/optbuilder/with.go in pkg/sql/opt/optbuilder.(*Builder).processWiths at line 110
pkg/sql/opt/optbuilder/select.go in pkg/sql/opt/optbuilder.(*Builder).buildSelect.func1 at line 1162
pkg/sql/opt/optbuilder/select.go in pkg/sql/opt/optbuilder.(*Builder).buildSelectStmtWithoutParens at line 1210
pkg/sql/opt/optbuilder/select.go in pkg/sql/opt/optbuilder.(*Builder).buildSelectClause at line 1317
pkg/sql/opt/optbuilder/project.go in pkg/sql/opt/optbuilder.(*Builder).buildProjectionList at line 203
pkg/sql/opt/optbuilder/scalar.go in pkg/sql/opt/optbuilder.(*Builder).buildScalar at line 331
pkg/sql/opt/optbuilder/scalar.go in pkg/sql/opt/optbuilder.(*Builder).buildFunction at line 574
bazel-out/k8-opt/bin/pkg/sql/opt/norm/factory.og.go in pkg/sql/opt/norm.(*Factory).ConstructFunction at line 22280
pkg/sql/opt/norm/fold_constants_funcs.go in pkg/sql/opt/norm.(*CustomFuncs).FoldFunction at line 729
pkg/sql/sem/eval/expr.go in pkg/sql/sem/eval.Expr at line 22
bazel-out/k8-opt/bin/pkg/sql/sem/tree/eval_expr_generated.go in pkg/sql/sem/tree.(*FuncExpr).Eval at line 291
pkg/sql/sem/eval/expr.go in pkg/sql/sem/eval.(*evaluator).EvalFuncExpr at line 502
pkg/sql/sem/builtins/geo_builtins.go in pkg/sql/sem/builtins.geometryOverload1.func1 at line 7407
pkg/sql/sem/builtins/geo_builtins.go in pkg/sql/sem/builtins.init.func457 at line 612
pkg/geo/geoindex/s2_geometry_index.go in pkg/geo/geoindex.(*s2GeometryIndex).CoveringGeometry at line 508
pkg/geo/geoindex/s2_geometry_index.go in pkg/geo/geoindex.(*s2GeometryIndex).InvertedIndexKeys at line 181
pkg/geo/geoindex/s2_geometry_index.go in pkg/geo/geoindex.(*s2GeometryIndex).convertToGeomTAndTryClip at line 293
pkg/geo/geoindex/s2_geometry_index.go in pkg/geo/geoindex.(*s2GeometryIndex).geomExceedsBounds at line 361
pkg/geo/geoindex/s2_geometry_index.go in pkg/geo/geoindex.(*s2GeometryIndex).geomExceedsBounds at line 336
external/com_github_twpayne_go_geom/point.go in github.com/twpayne/go-geom.(*Point).X at line 96
GOROOT/src/runtime/panic.go in runtime.goPanicIndex at line 115
GOROOT/src/runtime/panic.go in runtime.gopanic at line 783
pkg/util/errorutil/catch.go in pkg/util/errorutil.MaybeCatchPanic at line 38
pkg/util/errorutil/catch.go in pkg/util/errorutil.shouldCatch at line 24
```
### Tags
| Tag | Value |
| --- | --- |
| Command | start-single-node |
| Environment | v26.2.1 |
| Go Version | go1.25.5 |
| Platform | darwin arm64 |
| Distribution | CCL |
| Cockroach Release | v26.2.1 |
| Cockroach SHA | b398a6e1fde74a915daf8e9841303c8ee39c2abe |
| # of CPUs | 16 |
| # of Goroutines | 603 |
Jira issue: CRDB-67403
Contributor guide
Research direction
Start by reading pkg/geo/geoindex/s2_geometry_index.go, especially geomExceedsBounds, convertToGeomTAndTryClip, and CoveringGeometry, then inspect the st_s2covering implementation in pkg/sql/sem/builtins/geo_builtins.go. Reproduce the reported SELECT st_s2covering(_) path if possible and trace how an empty go-geom Point reaches Point.X. Done means the query no longer panics on the triggering geometry and the regression is covered by an appropriate test.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go, sql
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Needs clarification
- Newbie friendliness
- 38/100