Re: [HACKERS] [GENERAL] Clang 3.3 Analyzer Results

2013-11-14 Thread Magnus Hagander
On Wednesday, November 13, 2013, Tom Lane wrote:

 Kevin Grittner kgri...@ymail.com javascript:; writes:
  If nobody objects, I'll fix that small memory leak in the
  regression test driver.  Hopefully someone more familiar with
  pg_basebackup will fix the double-free (and related problems
  mentioned by Tom) in streamutil.c.

 Here's a less convoluted (IMHO) approach to the password management logic
 in streamutil.c.  One thing I really didn't care for about the existing
 coding is that the loop-for-password included all the rest of the
 function, even though there's no intention to retry for any purpose except
 collecting a password.  So I moved up the bottom of the loop.  For ease of
 review, I've not reindented the code below the new loop bottom, but would
 do so before committing.

 Any objections to this version?

 Nope, looks good to me.

That code was originally stolen from psql, and then whacked around a
number of times.  The part about looping and passwords, for example, is in
startup.c in psql as well. We probably want to fix it there as well (even
if it doesn't have the same problem, it has the same general design). Or
perhaps even put that function somewhere shared between the two?

It's also in pg_dump/pg_backup_db.c, there's a version of it in
pg_dumpall.c, etc. Which I think is a good argument for fixing them all by
sharing the code somewhere? In fact, we already have some in
script/common.c - but it's only used by the tools that are in script/.

//Magnus



-- 
 Magnus Hagander
 Me: http://www.hagander.net/
 Work: http://www.redpill-linpro.com/


Re: [HACKERS] [GENERAL] Clang 3.3 Analyzer Results

2013-11-14 Thread Tom Lane
Magnus Hagander mag...@hagander.net writes:
 That code was originally stolen from psql, and then whacked around a
 number of times.  The part about looping and passwords, for example, is in
 startup.c in psql as well. We probably want to fix it there as well (even
 if it doesn't have the same problem, it has the same general design). Or
 perhaps even put that function somewhere shared between the two?

 It's also in pg_dump/pg_backup_db.c, there's a version of it in
 pg_dumpall.c, etc. Which I think is a good argument for fixing them all by
 sharing the code somewhere? In fact, we already have some in
 script/common.c - but it's only used by the tools that are in script/.

Hm, maybe, but where?  It's inappropriate for libpgcommon (we don't
want that calling libpq), so I'm not real sure what to do with it.
Also it's not clear to me that all these tools would have the same
requirements for the non-password parameters for the connection request.

BTW, I realized while fooling with this that although the code looks like
it's intended to iterate till a correct password is obtained, actually it
cannot prompt more than once, because of the way PQconnectionNeedsPassword
is coded.  Therefore, the double free that clang is worried about can't
really happen.  It's still worth fixing IMO.

regards, tom lane


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers