Thread: Re: [COMMITTERS] pgsql: Add column storage type to psql \d+ display.

Re: [COMMITTERS] pgsql: Add column storage type to psql \d+ display.

From
Alvaro Herrera
Date:
Bruce Momjian wrote:
> Log Message:
> -----------
> Add column storage type to psql \d+ display.

I think this patch has caused this new warning in psql:

/pgsql//source/00head/src/bin/psql/describe.c: In function ‘describeOneTableDetails’:
/pgsql//source/00head/src/bin/psql/describe.c:832: warning: ‘tableinfo.relkind’ may be used uninitialized in this
function


-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support


Re: [COMMITTERS] pgsql: Add column storage type to psql \d+ display.

From
Bruce Momjian
Date:
Alvaro Herrera wrote:
> Bruce Momjian wrote:
> > Log Message:
> > -----------
> > Add column storage type to psql \d+ display.
> 
> I think this patch has caused this new warning in psql:
> 
> /pgsql//source/00head/src/bin/psql/describe.c: In function ?describeOneTableDetails?:
> /pgsql//source/00head/src/bin/psql/describe.c:832: warning: ?tableinfo.relkind? may be used uninitialized in this
function

I don't see that warning with my compiler so I have no way of testing
this, but I do see this line pretty high in the function:
    tableinfo.relkind = *(PQgetvalue(res, 0, 1));

Do you have any idea how relkind could be accessed before this
assignment?  The line number is it complaining about is the definition
of relkind in the structure, not any reference to the variable.

The only crazy idea I have is that the variable name appears in a string
above the assignment:
      "SELECT relhasindex, relkind, relchecks, reltriggers, relhasrules, "

And relkind is the only column that matches a structure member.

--  Bruce Momjian  <bruce@momjian.us>        http://momjian.us EnterpriseDB
http://enterprisedb.com
 + If your life is a hard drive, Christ can be your backup. +


Re: Re: [COMMITTERS] pgsql: Add column storage type to psql \d+ display.

From
Alvaro Herrera
Date:
Bruce Momjian wrote:
> Alvaro Herrera wrote:

> > I think this patch has caused this new warning in psql:
> > 
> > /pgsql//source/00head/src/bin/psql/describe.c: In function ?describeOneTableDetails?:
> > /pgsql//source/00head/src/bin/psql/describe.c:832: warning: ?tableinfo.relkind? may be used uninitialized in this
function
> 
> I don't see that warning with my compiler so I have no way of testing
> this, but I do see this line pretty high in the function:
> 
>         tableinfo.relkind = *(PQgetvalue(res, 0, 1));

But it's before the first "goto error_return", after which it is checked.

-- 
Alvaro Herrera                                http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.


Alvaro Herrera <alvherre@commandprompt.com> writes:
> Bruce Momjian wrote:
>> I don't see that warning with my compiler so I have no way of testing
>> this, but I do see this line pretty high in the function:
>> tableinfo.relkind = *(PQgetvalue(res, 0, 1));

> But it's before the first "goto error_return", after which it is checked.

Ah.  That code is indeed broken, or at least risky in the extreme.  What
the cleanup code ought to be checking is just whether or not the arrays
have gotten allocated yet.  Checking a condition that should later lead
to the array getting allocated is just asking for trouble --- even if
there's not a "goto error_return" in between today, someday someone will
insert one.

Patch applied ...
        regards, tom lane