Re: Lift line-length limit for pg_service.conf
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Daniel Gustafsson <daniel@yesql.se>
Cc: Postgres hackers <pgsql-hackers@lists.postgresql.org>
Date: 2020-09-23T01:14:28Z
Lists: pgsql-hackers
Attachments
- rework-tsearch-readline-2.patch (text/x-diff) patch
I wrote: > Yeah. In a quick scan, it appears that there is only one caller that > tries to save the result directly. So I considered making that caller > do a pstrdup and eliminating the extra thrashing in t_readline itself. > But it seemed too fragile; somebody would get it wrong and then have > excess space consumption for their dictionary. I had a better idea: if we get rid of t_readline() itself, which has been deprecated for years anyway, we can have the calling layer tsearch_readline_xxx maintain a StringInfo across the whole file read process and thus get rid of alloc/free cycles for the StringInfo. However ... while working on that, I realized that the usage of the "curline" field in that code is completely unsafe. We save a pointer to the result of tsearch_readline() for possible use by the error context callback, *but the caller is likely to free that string at some point*. So there is a window where an error would result in trying to print already-freed data. It looks like all of the core-code dictionaries free the result string at the bottoms of their loops, so that the window for trouble is pretty much empty. But contrib/dict_xsyn doesn't do it like that, and so it's surely at risk. Any external dictionaries that have copied that code would also be at risk. So the attached adds a pstrdup/pfree to ensure that "curline" has its own storage, putting us right back at two palloc/pfree cycles per line. I don't think there's a lot of choice though; in fact, I'm leaning to the idea that we need to back-patch that part of this. The odds of trouble in a production build probably aren't high, but still... regards, tom lane
Commits
-
Improve behavior of tsearch_readline(), and remove t_readline().
- 83b61319a16c 14.0 landed
-
Avoid possible dangling-pointer access in tsearch_readline_callback.
- c1f63c42fc13 11.10 landed
- b91033ae9bc5 10.15 landed
- b1fbb7d08f22 9.6.20 landed
- 61cfd90621d6 9.5.24 landed
- 5d0c80658328 12.5 landed
- 569f6a89a915 13.1 landed
- 3ea7e9550e58 14.0 landed
-
Simplify SortTocFromFile() by removing fixed buffer-size limit.
- 2e3c19462da9 14.0 landed
-
Remove arbitrary line length limit for libpq service files.
- c0cb87fbb664 14.0 landed
-
Rethink API for pg_get_line.c, one more time.
- 931487018c40 14.0 landed