Re: bugfix: invalid bit/varbit input causes the log file to be unreadable

Quan Zongliang <quanzongliang@gmail.com>

From: Quan Zongliang <quanzongliang@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2020-06-29T10:45:47Z
Lists: pgsql-hackers
Good.

I tested it, and it looks fine.

Thank you.


On 2020/6/29 1:10 上午, Tom Lane wrote:
> I wrote:
>> Even granting the premise, the proposed patch seems like a significant
>> decrease in user-friendliness for typical cases.  I'd rather see us
>> make an effort to print one valid-per-the-DB-encoding character.
>> Now that we can rely on snprintf to count %s restrictions in bytes,
>> I think something like this should work:
>>                           errmsg("\"%.*s\" is not a valid binary digit",
>>                                  pg_mblen(sp), sp)));
>> But the real problem is that this is only the tip of the iceberg.
>> You didn't even hit all the %c usages in varbit.c.
> I went through all the %c format sequences in the backend to see which
> ones could use this type of fix.  There were not as many as I'd expected,
> but still a fair number.  (I skipped cases where the input was coming from
> the catalogs, as well as some non-user-facing debug printouts.)  That
> leads to the attached patch, which seems to do the job without breaking
> anything that works today.
>
> 			regards, tom lane
>
> PS: I failed to resist the temptation to improve some shoddy error
> messages nearby in pageinspect/heapfuncs.c.
>

Commits

  1. Avoid using %c printf format for potentially non-ASCII characters.