cockroachdb / cockroachdb/cockroach

cli: crash due to index out of range in `jackc/pgconn`

Open
#109,299 1 comment 0 reactions 0 assignees View on GitHub
C-bug db-cy-23 T-sql-foundations
Dominant language
Go
Stars
32.5k
Forks
4.1k
PR merge metrics
PR metrics pending

Description

When debugging #109116 on 21b87a45e254ba7eec1d758d840eb376a9557611, I ran into a case where CLI crashed with:
```
SELECT 1
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 a panic has occurred!
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 +runtime error: slice bounds out of range [::-154967272]
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 +(1) attached stack trace
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + -- stack trace:
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgproto3/v2.(*DataRow).Decode
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgproto3/v2/external/com_github_jackc_pgproto3_v2/data_row.go:57
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgproto3/v2.(*Frontend).Receive
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgproto3/v2/external/com_github_jackc_pgproto3_v2/frontend.go:150
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgconn.(*PgConn).peekMessage
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgconn/external/com_github_jackc_pgconn/pgconn.go:531
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgconn.(*PgConn).receiveMessage
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgconn/external/com_github_jackc_pgconn/pgconn.go:551
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgconn.(*MultiResultReader).receiveMessage
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgconn/external/com_github_jackc_pgconn/pgconn.go:1376
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgconn.(*ResultReader).receiveMessage
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgconn/external/com_github_jackc_pgconn/pgconn.go:1583
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgconn.(*ResultReader).NextRow
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/jackc/pgconn/external/com_github_jackc_pgconn/pgconn.go:1494
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlclient.(*sqlRowsMultiResultSet).Next
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlclient/rows_multi.go:83
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlexec.getNextRowStrings
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlexec/row_strings.go:44
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlexec.(*rowIter).Next
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlexec/format_table.go:95
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlexec.render
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlexec/format_table.go:211
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlexec.(*Context).RunQueryAndFormatResults.func4
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlexec/run_query.go:107
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlexec.(*Context).RunQueryAndFormatResults
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlexec/run_query.go:108
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlshell.(*cliState).doRunStatements.func1
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlshell/sql.go:2145
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlshell.(*cliState).runWithInterruptableCtx
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlshell/sql.go:2654
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlshell.(*cliState).doRunStatements
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlshell/sql.go:2122
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlshell.(*cliState).doRunShell
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlshell/sql.go:2330
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlshell.(*cliState).RunInteractive
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlshell/sql.go:2268
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlcfg.(*Context).Run
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clisqlcfg/context.go:225
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli.runTerm
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/sql_shell_cmd.go:64
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clierrorplus.MaybeDecorateError.func1
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/clierrorplus/decorate_error.go:72
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/spf13/cobra.(*Command).execute
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/spf13/cobra/external/com_github_spf13_cobra/command.go:856
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/spf13/cobra.(*Command).ExecuteC
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/spf13/cobra/external/com_github_spf13_cobra/command.go:974
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/spf13/cobra.(*Command).Execute
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/spf13/cobra/external/com_github_spf13_cobra/command.go:902
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli.Run
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/cli.go:300
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli.doMain
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/cli.go:143
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli.Main
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | github.com/cockroachdb/cockroach/pkg/cli/cli.go:68
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | main.main
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | main/pkg/cmd/cockroach-short/main.go:26
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | runtime.main
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | GOROOT/src/runtime/proc.go:250
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | runtime.goexit
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 + | GOROOT/src/runtime/asm_arm64.s:1172
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 +Wraps: (2) runtime error: slice bounds out of range [::-154967272]
E230823 01:02:42.601922 1 1@util/log/logcrash/crash_reporting.go:191 [-] 1 +Error types: (1) *withstack.withStack (2) runtime.boundsError
panic: runtime error: slice bounds out of range [::-154967272] [recovered]
panic: runtime error: slice bounds out of range [::-154967272]
```
I reproduced this both on master and 23.1.7.

Start a fresh single-node cluster and then run the following in the CLI:
```sql
CREATE TABLE t (k INT PRIMARY KEY);
INSERT INTO t SELECT generate_series(1, 1000000);
WITH
cte (col)
AS (
SELECT
'01060000800900000001030000800100000004000000EE8EDE397C93F6C15973A0B62512F2C1DC4CBA3C0D85F34102999A932689FCC1A71E4587F1CE00C2008861C2878A6841920C585002260042F0F9E09155AECF412E6395762D16E0C1EE8EDE397C93F6C15973A0B62512F2C1DC4CBA3C0D85F3410103000080010000000600000066A0055862F7F9C1787A127048E0FBC102451A194DCCEBC150359F86A043D641483F7D23747AE5C1C252683D1DD4014278C3D3F7C7FED0C1EE176875D4B50042CBD15C6FA6F201C2405859FAC63DE2C14AA257008BB1F241D0F0EE4281C9C1C1BEC0C1F9EDF2FDC18839C553C60BE9415401B6DE9C3AF8C166A0055862F7F9C1787A127048E0FBC102451A194DCCEBC101030000800100000005000000509026EB4A61C8C130B1C538477CCBC1A81DF022DD67ECC188B338C652AED14170C9A70E6354E84158FCA5CA7509FE411CFF94C033BEFBC1DC06900C77A9F94114CB40866E7E01C270558B216D0AFCC148E5BB663D85F941C01B42267949B641509026EB4A61C8C130B1C538477CCBC1A81DF022DD67ECC10103000080010000000B000000A8AAF5CED9E3FEC1907B10FE4D12C0411069BFF0F3D1F9C1B0499182B2B6C741208EACCF7792B84128EBDF719CBDF34162A9E898495BF6413404002B38BEF5C156BC909429DEF3C1A8A845C54B9DFE41A6DAD70540C4F2C1640EE772C2E50042C4A3D72F238CF14180FB04C27110A1C1BCA6C45104B1F5C13C86B554A10FE741ACACC0D59F36E241CC4CE4A4773FF0411483A74637BCE341C4F0D70F89950042CACA32837BA1EDC1D483D83590DEDDC19656C96992EAF14138F7C1252B7BE8412501008413F201C2FC8B219AA4F7FC411270E88A608CFEC1E8F4A9295133FBC1302CD321BA3FEA41FC7375227AE3E8C1A8AAF5CED9E3FEC1907B10FE4D12C0411069BFF0F3D1F9C10103000080010000000600000009B9C789D31AF5C1B0B32C116CB4E241C8700D3AE4ABF4C1B6C688AB793DF4411625DC0C1BE7EEC1C650B59736FAEBC146E5814BE0BF014204FC650F2ECBFA417423CB938C7DDEC1A20E70F3EEFE01C2405FFDD936C0FF416BA82E61D688FBC1B4B8F4123758FAC1D4317A01FB97EC41A2E441A74825024209B9C789D31AF5C1B0B32C116CB4E241C8700D3AE4ABF4C10103000080010000000D0000000425781D5466FCC1A30F3A50D0EEF6C1F80E8ED0D78BF1C19CF2C4A42E48F1C13E63083BB3F8F5C1840D04622D02F141CE1D5AED752EF2C1B25DFA36DD7001C2D604160254A7F141A0AF2E8574C1D2C1AE3A080A962300C274AD289D1525DCC180484F1F566AF64194A84C53FE44F7C15C68D4513F25F8C198D01BD94E2AF541C0226A3C08FCCAC11E08B302DFE6F7C118507CBDDDC60142465343E34D7CF14106302D953A0BFBC160D0F6AE4311F141C80A030C6C56FD41C0B0034BA66DA0417E5D283E2842E9C1A6DB4E8B5F090042C0A19B458347AEC16CC046D3D2FEFDC12CC77F5756A5FC416838E437988EFF41F2972DF01DF901C25672F68FCBBDF7410F43A305E5C1F8C14122818A778801C25CA2A391BEBFE341AE16527B36C3F6C10425781D5466FCC1A30F3A50D0EEF6C1F80E8ED0D78BF1C10103000080010000000C000000C2E30622906CE1C110D5090BC3C3C5C1A0FA8BE4023BF3C1DE84B235622E00C236410617CC9FF1C130E4D0F934EDEE41D8B43BE82C61D3C15BD5741BCA6B02C26843D75FAD1FEAC19086BA3AE65ED6419CC4DAAAFCF3EAC122D5604DF983F74166B774BB8D92F9418C1EAE3FE80300C2A41D35386B6FE04194A6B14CAC99F441AC32590B7CE6DEC166A9BDE4D49B014288599043E1AFED41405ED0E2F9BABFC1A45F588CF45EFB41D69CEFD14F0CFA41A654C941EFD7F641E828DC8561E1FAC160D86E35829BE1414E5FCE529D7BF9414F9ADD2A46F301C28D7CEC4A4E9B01C2E8C3F9EC6A5CFF41E066E1654388FC4112A6ED043EDD00C26AC4F44C6A01F141C28BA91EA107FBC1C2E30622906CE1C110D5090BC3C3C5C1A0FA8BE4023BF3C10103000080010000000D000000882A8BA45D1400C2AE795B5B17FDEEC1B7A78DDAB7A8F7C10092D20BBF9BA6412427A21F87E8F5C13055C7BEE725F2C160045E14436FC541EA2EB8614EDFF1C1E049402280BFE04148FE658E15A9D0C1E0649FF12989C1C1643081906F7FFC41B8B71DCE4575E641E0113118D68BF2C10D9CBB5F157902C2286ABD3F6ED4EC41B0FAD300D26BEBC14CE26D126A5FFA41F823453D8320DB41D04BD5A6FCFFC841E0B5ED251331B3410815DB6470FEF141886F30743005E44144D7AE4D3CA5F341E891E7434F0CD6C1A456662227470242564E2260EF7B024272282D7AE182FAC15C182B13E7B7F041F89E6971FB9DF241328B96EE37A8FBC168A2FD0FF952E84172F5A8AD19CAF0412C42151DA154F4C1308804308682C94146AAB29C89D30142882A8BA45D1400C2AE795B5B17FDEEC1B7A78DDAB7A8F7C10103000080010000000B0000000144B2D1DF13F9C1D558DF67694300C27CB81B7CFB19F54158D064DA0979E94111406299CF80FEC1BA249E4A3738F4419CB74D7A22EEF4417AFBA06D843B00C2941A4B825012FC41D08AD792F6DAF141B7E3C89001D0F8C188A64183AE4AE4C1485F03E722CAF54162A22EF2313BF9C1F80B79BB1AC1FF4100CC2524235AFE41CC1344ABB182E6C188454AFCC36EEB41D408BC1A3C8AE0C1044AE506AF18FC4196F1EB87C2CCF2C1AC5AE58DA36CE5C1B8FC662E5947EC4140BEAB37292AE341060656610D34E7C14C5F0E385207EF41686FB0271ACEF5C100F91BCC92CD01C2603F80BB7650D541E34A5E86CC7100C20144B2D1DF13F9C1D558DF67694300C27CB81B7CFB19F541':::GEOMETRY
FROM
t
)
SELECT
st_memcollect(col::GEOMETRY)::GEOMETRY
FROM
cte;
```
This query results in a single column in a single row, but I think that single value is huge leading to some bug in the `pgconn` library.

Jira issue: CRDB-30856

Epic CRDB-23743

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.