Skip to content

sql: v22.1.5: nil pointer when formatting DBitArray #85363

@cockroach-teamcity

Description

@cockroach-teamcity

This issue was autofiled by Sentry. It represents a crash or reported error on a live cluster with telemetry enabled.

Sentry link: https://sentry.io/organizations/cockroach-labs/issues/3465980936/?referrer=webhooks_plugin

Panic message:

conn_executor.go:754: runtime error: invalid memory address or nil pointer dereference
(1) attached stack trace
-- stack trace:
| github.com/cockroachdb/cockroach/pkg/sql.(*Server).ServeConn.func1
| github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:754
| [...repeated from below...]
Wraps: (2) while executing: INSERT INTO (, _) VALUES ($1, $2), (more900)
Wraps: (3) attached stack trace
-- stack trace:
| github.com/cockroachdb/cockroach/pkg/sql.(*Server).ServeConn.func1
| github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:754
| runtime.gopanic
| GOROOT/src/runtime/panic.go:1038
| runtime.panicmem
| GOROOT/src/runtime/panic.go:221
| runtime.sigpanic
| GOROOT/src/runtime/signal_unix.go:735
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*DBitArray).Format
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/datum.go:658
| github.com/cockroachdb/cockroach/pkg/sql.formatWithPlaceholders.func1
| github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:817
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*Placeholder).Format
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/expr.go:772
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/hide_constants.go:46
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).FormatNode
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/format.go:449
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*Exprs).Format
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/expr.go:893
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/hide_constants.go:46
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).FormatNode
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/format.go:449
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*ValuesClause).Format
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/values.go:34
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/hide_constants.go:46
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).FormatNode
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/format.go:449
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*Select).Format
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/select.go:56
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/hide_constants.go:46
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).FormatNode
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/format.go:449
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*Insert).Format
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/insert.go:51
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/hide_constants.go:46
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree.(*FmtCtx).FormatNode
| github.com/cockroachdb/cockroach/pkg/sql/sem/tree/format.go:449
| github.com/cockroachdb/cockroach/pkg/sql.formatWithPlaceholders
| github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:824
| github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execStmtInOpenState
| github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:322
| github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execStmt
| github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:143
| github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execPortal
| github.com/cockroachdb/cockroach/pkg/sql/conn_executor_exec.go:231
| github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execCmd.func2
| github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1962
| github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).execCmd
| github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1964
| github.com/cockroachdb/cockroach/pkg/sql.(*connExecutor).run
| github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:1810
| github.com/cockroachdb/cockroach/pkg/sql.(*Server).ServeConn
| github.com/cockroachdb/cockroach/pkg/sql/conn_executor.go:756
| github.com/cockroachdb/cockroach/pkg/sql/pgwire.(*conn).processCommandsAsync.func1
| github.com/cockroachdb/cockroach/pkg/sql/pgwire/conn.go:727
| runtime.goexit
| GOROOT/src/runtime/asm_amd64.s:1581
Wraps: (4) runtime error: invalid memory address or nil pointer dereference
Error types: (1) *withstack.withStack (2) *safedetails.withSafeDetails (3) *withstack.withStack (4) runtime.errorString
-- report composition:
runtime.errorString
conn_executor.go:754: *withstack.withStack (top exception)
*safedetails.withSafeDetails: while executing: INSERT INTO (, _) VALUES ($1, $2), (more900)
conn_executor.go:754: *withstack.withStack (1)
(check the extra data payloads)

Stacktrace (expand for inline code snippets):

r := recover()
h.ex.closeWrapper(ctx, r)
}()
in pkg/sql.(*Server).ServeConn.func1
GOROOT/src/runtime/panic.go#L1037-L1039 in runtime.gopanic
GOROOT/src/runtime/panic.go#L220-L222 in runtime.panicmem
GOROOT/src/runtime/signal_unix.go#L734-L736 in runtime.sigpanic
}
d.BitArray.Format(&ctx.Buffer)
if withQuotes {
in pkg/sql/sem/tree.(*DBitArray).Format
}
d.Format(ctx)
}),
in pkg/sql.formatWithPlaceholders.func1
if ctx.placeholderFormat != nil {
ctx.placeholderFormat(ctx, node)
return
in pkg/sql/sem/tree.(*Placeholder).Format
}
n.Format(ctx)
}
in pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants
} else {
ctx.formatNodeOrHideConstants(n)
}
in pkg/sql/sem/tree.(*FmtCtx).FormatNode
}
ctx.FormatNode(n)
}
in pkg/sql/sem/tree.(*Exprs).Format
}
n.Format(ctx)
}
in pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants
} else {
ctx.formatNodeOrHideConstants(n)
}
in pkg/sql/sem/tree.(*FmtCtx).FormatNode
ctx.WriteByte('(')
ctx.FormatNode(&node.Rows[i])
ctx.WriteByte(')')
in pkg/sql/sem/tree.(*ValuesClause).Format
}
n.Format(ctx)
}
in pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants
} else {
ctx.formatNodeOrHideConstants(n)
}
in pkg/sql/sem/tree.(*FmtCtx).FormatNode
ctx.FormatNode(node.With)
ctx.FormatNode(node.Select)
if len(node.OrderBy) > 0 {
in pkg/sql/sem/tree.(*Select).Format
}
n.Format(ctx)
}
in pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants
} else {
ctx.formatNodeOrHideConstants(n)
}
in pkg/sql/sem/tree.(*FmtCtx).FormatNode
ctx.WriteByte(' ')
ctx.FormatNode(node.Rows)
}
in pkg/sql/sem/tree.(*Insert).Format
}
n.Format(ctx)
}
in pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants
} else {
ctx.formatNodeOrHideConstants(n)
}
in pkg/sql/sem/tree.(*FmtCtx).FormatNode
fmtCtx.FormatNode(ast)
in pkg/sql.formatWithPlaceholders
ex.addActiveQuery(ast, formatWithPlaceholders(ast, ex.planner.EvalContext()), queryID, ex.state.cancel)
if ex.executorType != executorTypeInternal {
in pkg/sql.(*connExecutor).execStmtInOpenState
} else {
ev, payload, err = ex.execStmtInOpenState(ctx, parserStmt, prepared, pinfo, res, canAutoCommit)
}
in pkg/sql.(*connExecutor).execStmt
}
ev, payload, err = ex.execStmt(ctx, portal.Stmt.Statement, portal.Stmt, pinfo, stmtRes, canAutoCommit)
// Portal suspension is supported via a "side" state machine
in pkg/sql.(*connExecutor).execPortal
canAutoCommit := ex.implicitTxn() && tcmd.FollowedBySync
ev, payload, err = ex.execPortal(ctx, portal, portalName, stmtRes, pinfo, canAutoCommit)
return err
in pkg/sql.(*connExecutor).execCmd.func2
return err
}()
// Note: we write to ex.statsCollector.phaseTimes, instead of ex.phaseTimes,
in pkg/sql.(*connExecutor).execCmd
var err error
if err = ex.execCmd(); err != nil {
if errors.IsAny(err, io.EOF, errDrainingComplete) {
in pkg/sql.(*connExecutor).run
}()
return h.ex.run(ctx, s.pool, reserved, cancel)
}
in pkg/sql.(*Server).ServeConn
reservedOwned = false // We're about to pass ownership away.
retErr = sqlServer.ServeConn(ctx, connHandler, reserved, cancelConn)
}()
in pkg/sql/pgwire.(*conn).processCommandsAsync.func1
GOROOT/src/runtime/asm_amd64.s#L1580-L1582 in runtime.goexit

pkg/sql/conn_executor.go in pkg/sql.(*Server).ServeConn.func1 at line 754
GOROOT/src/runtime/panic.go in runtime.gopanic at line 1038
GOROOT/src/runtime/panic.go in runtime.panicmem at line 221
GOROOT/src/runtime/signal_unix.go in runtime.sigpanic at line 735
pkg/sql/sem/tree/datum.go in pkg/sql/sem/tree.(*DBitArray).Format at line 658
pkg/sql/conn_executor_exec.go in pkg/sql.formatWithPlaceholders.func1 at line 817
pkg/sql/sem/tree/expr.go in pkg/sql/sem/tree.(*Placeholder).Format at line 772
pkg/sql/sem/tree/hide_constants.go in pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants at line 46
pkg/sql/sem/tree/format.go in pkg/sql/sem/tree.(*FmtCtx).FormatNode at line 449
pkg/sql/sem/tree/expr.go in pkg/sql/sem/tree.(*Exprs).Format at line 893
pkg/sql/sem/tree/hide_constants.go in pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants at line 46
pkg/sql/sem/tree/format.go in pkg/sql/sem/tree.(*FmtCtx).FormatNode at line 449
pkg/sql/sem/tree/values.go in pkg/sql/sem/tree.(*ValuesClause).Format at line 34
pkg/sql/sem/tree/hide_constants.go in pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants at line 46
pkg/sql/sem/tree/format.go in pkg/sql/sem/tree.(*FmtCtx).FormatNode at line 449
pkg/sql/sem/tree/select.go in pkg/sql/sem/tree.(*Select).Format at line 56
pkg/sql/sem/tree/hide_constants.go in pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants at line 46
pkg/sql/sem/tree/format.go in pkg/sql/sem/tree.(*FmtCtx).FormatNode at line 449
pkg/sql/sem/tree/insert.go in pkg/sql/sem/tree.(*Insert).Format at line 51
pkg/sql/sem/tree/hide_constants.go in pkg/sql/sem/tree.(*FmtCtx).formatNodeOrHideConstants at line 46
pkg/sql/sem/tree/format.go in pkg/sql/sem/tree.(*FmtCtx).FormatNode at line 449
pkg/sql/conn_executor_exec.go in pkg/sql.formatWithPlaceholders at line 824
pkg/sql/conn_executor_exec.go in pkg/sql.(*connExecutor).execStmtInOpenState at line 322
pkg/sql/conn_executor_exec.go in pkg/sql.(*connExecutor).execStmt at line 143
pkg/sql/conn_executor_exec.go in pkg/sql.(*connExecutor).execPortal at line 231
pkg/sql/conn_executor.go in pkg/sql.(*connExecutor).execCmd.func2 at line 1962
pkg/sql/conn_executor.go in pkg/sql.(*connExecutor).execCmd at line 1964
pkg/sql/conn_executor.go in pkg/sql.(*connExecutor).run at line 1810
pkg/sql/conn_executor.go in pkg/sql.(*Server).ServeConn at line 756
pkg/sql/pgwire/conn.go in pkg/sql/pgwire.(*conn).processCommandsAsync.func1 at line 727
GOROOT/src/runtime/asm_amd64.s in runtime.goexit at line 1581
Tag Value
Cockroach Release v22.1.5
Cockroach SHA: a30a663
Platform linux amd64
Distribution CCL
Environment v22.1.5
Command start-single-node
Go Version ``
# of CPUs
# of Goroutines

Jira issue: CRDB-18205

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCode not up to spec/doc, specs & docs deemed correct. Solution expected to change code/behavior.O-sentryOriginated from an in-the-wild panic report.T-sql-queriesSQL Queries Team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions