Re: Sloppiness around failure handling of parsePGArray in pg_dump

From: Michael Paquier <michael(at)paquier(dot)xyz>
To: Daniel Gustafsson <daniel(at)yesql(dot)se>
Cc: Postgres hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: Sloppiness around failure handling of parsePGArray in pg_dump
Date: 2020-11-19 01:37:05
Message-ID: 20201119013705.GA26172@paquier.xyz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, Nov 18, 2020 at 10:19:40AM +0100, Daniel Gustafsson wrote:
> I agree that we should fix this even if it will have quite limited impact in
> production settings. Patch LGTM, +1.

Thanks. I have reviewed that again this morning and applied it.

> Another thing caught my eye here (while not the fault of this patch), we ensure
> to clean up array leftover in case of parsePGArray failure, but we don't clean
> up the potential allocations from the previous calls. Something like the below
> seems more consistent.
>
> @@ -12105,6 +12099,8 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
> nitems != nallargs)
> {
> pg_log_warning("could not parse proargmodes array");
> + if (allargtypes)
> + free(allargtypes);
> if (argmodes)
> free(argmodes);
> argmodes = NULL;
> @@ -12119,6 +12115,10 @@ dumpFunc(Archive *fout, FuncInfo *finfo)
> nitems != nallargs)
> {
> pg_log_warning("could not parse proargnames array");
> + if (allargtypes)
> + free(allargtypes);
> + if (argmodes)
> + free(argmodes);
> if (argnames)
> free(argnames);
> argnames = NULL;

If you do that, I think that's not completely correct either.
format_function_arguments_old() has some logic to allow the process to
go through for pre-8.4 dumps as long as allargtypes includes correct
data even if argmodes and/or argnames parsing has failed, so you would
cause a crash as long as nallargs is set if you free allargtypes like
that. You could allow those free calls if resetting nallargs to 0 if
the parsing of argmodes or argnames has failed, but that would make
the logic less flexible.
--
Michael

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2020-11-19 01:51:26 Re: remove spurious CREATE INDEX CONCURRENTLY wait
Previous Message Tom Lane 2020-11-19 01:25:01 Re: CREATE AGGREGATE array_cat