Re: Memory leak in pg_stat_statements when qtext file contains invalid encoding
Heikki Linnakangas <hlinnaka@iki.fi>
From: Heikki Linnakangas <hlinnaka@iki.fi>
To: Daniel Gustafsson <daniel@yesql.se>
Cc: Lukas Fittl <lukas@fittl.com>, Gaurav Singh <gaurav.singh@yugabyte.com>,
pgsql-bugs@lists.postgresql.org
Date: 2026-03-27T11:13:09Z
Lists: pgsql-bugs
On 27/03/2026 11:05, Daniel Gustafsson wrote: >> On 27 Mar 2026, at 09:59, Heikki Linnakangas <hlinnaka@iki.fi> wrote: > >> Hmm, perhaps. But there's a simpler, less invasive fix. When that code was written, we didn't have MCXT_ALLOC_HUGE nor MCXT_ALLOC_NO_OOM. Now that we do, we can just use palloc_extended(MCXT_ALLOC_HUGE | MCXT_ALLOC_NO_OOM) instead of raw malloc(). Per attached. > > LGTM. Committed, thanks! Here's one way to reproduce the invalid encoding error without artificially corrupting the file: -- Run a query with a non-latin character in it. (This needs to be run in UTF-8 database.) psql postgres -c 'select g as "omega Ω col" from generate_series(1, 1) g;' -- Create a database with latin1 encoding psql postgres -c "create database latindb encoding 'latin1' lc_ctype='C' lc_collate='C' template template0" -- check pg_stat_statements() from the latin1 database -- This fails with encoding conversion error. PATH=~/pgsql.fsmfork/bin/ psql latindb -c "create extension pg_stat_statements; select * from pg_stat_statements" If you repeat the erroring "select * from pg_stat_statements" in latindb many times, you can see the memory usage grow without this fix. - Heikki
Commits
-
Avoid memory leak on error while parsing pg_stat_statements dump file
- 3c74cb5762db 19 (unreleased) landed
- a6d03067ff5d 14.23 landed
- 92cf11171baf 15.18 landed
- 52edaf9d9b02 16.14 landed
- 351e59f344b5 17.10 landed
- 25b02320e133 18.4 landed