Re: pg_rewind copies
| От | Heikki Linnakangas | 
|---|---|
| Тема | Re: pg_rewind copies | 
| Дата | |
| Msg-id | 994e8f27-2eb6-b4b4-d7eb-5619821f1306@iki.fi обсуждение исходный текст | 
| Ответ на | Re: pg_rewind copies (Daniel Gustafsson <daniel@yesql.se>) | 
| Ответы | Re: pg_rewind copies | 
| Список | pgsql-hackers | 
On 01/04/2022 12:00, Daniel Gustafsson wrote:
> I took another look at this patch, and I think it's ready to go in, it clearly
> fixes a bug that isn't too hard to hit in production settings.  To ensure we
> don't break this I've added a testcase which pipes the pg_rewind --verbose
> output to a file it's asked to copy, which then guarantees that the file is
> growing in size during the operation without need for synchronizing two
> processes with IPC::Run (it also passes on Windows in the CI setup).
> 
> One small comment on the patch:
> 
> +   snprintf(srcpath, sizeof(srcpath), "%s/%s", datadir, path);
> 
> This should IMO check the returnvalue of snprintf to ensure it wasn't
> truncated.  While the risk is exceedingly small, a truncated filename might
> match another existing filename and the error not getting caught.  There is
> another instance just like this one in open_target_file() to which I think we
> should apply the same belts-and-suspenders treatment.  I've fixed this in the
> attached version which also have had a pg_indent run on top of a fresh rebase.
> +    if (len >= sizeof(dstpath))
> +        pg_fatal("filepath buffer too small");    /* shouldn't happen */
Makes sense. I would remove the "shouldn't happen"; it's not very hard 
to make it happen, you just need a very long target datadir path. And 
rephrase the error message as "datadir path too long".
One typo in the commit message: s/update/updates/.
Thanks!
- Heikki
		
	В списке pgsql-hackers по дате отправления: