Re: Crash on attempt to connect to nonstarted server

Bruce Momjian <bruce@momjian.us>

From: Bruce Momjian <bruce@momjian.us>
To: Magnus Hagander <magnus@hagander.net>
Cc: PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2010-12-16T15:20:44Z
Lists: pgsql-hackers

Attachments

Magnus Hagander wrote:
> I get a crash on win32 when connecting to a server that's not started.
> In fe-connect.c, we have:
> 
> 		display_host_addr = (conn->pghostaddr == NULL) &&
> 			(strcmp(conn->pghost, host_addr) != 0);
> 
> In my case, conn->pghost is NULL at this point, as is
> conn->pghostaddr. Thus, it crashes in strcmp().

I have researched this with Magnus, and was able to reproduce the
failure.  It happens only on Win32 because that is missing unix-domain
sockets so "" maps to localhost, which is an IP address.  I have applied
the attached patch.  The new output is:

	$ psql test
	psql: could not connect to server: Connection refused
        Is the server running on host "???" and accepting
        TCP/IP connections on port 5432?

Note the "???".  This happens because the mapping of "" to localhost
happens below the libpq library variable level.

-- 
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +