Peter Geoghegan <pg@heroku.com> writes:
> It's possible to get psql to abort() in an assertion failure from
> legitimate input. If the server is shutdown, and PQclientEncoding()
> returns -1, that value can be passed to a site that expects a valid
> encoding.
> If the call to PQclientEncoding() from processSQLNamePattern() (plus
> probably from other places) gets an encoding of -1, (called when we
> "\df+ somefunc" after the server is gone - you may have to do it
> twice), that can be passed down to PQmblen(), which will in turn pass
> that value to pg_encoding_mblen(), which doesn't expect it.
A simple fix might be to return SQL_ASCII not -1. I don't think the
-1 behavior is documented or relied on anywhere, is it?
Otherwise, we could check for live connection somewhere much earlier
in the processing of \d and friends. But it might be difficult to
find a single choke point for doing that, rendering the reliability
of the fix somewhat suspect.
regards, tom lane