Mm... let alone my patch but the 'Uses undefined contents of buf'
is not true (buf is initialized to contain all 0es:

    111:memset(buf, 0, MAX_PROMPT_SIZE + 1);

And the 'Falls off the end of prompt string' is common to
all non-singlechar handlings (execute command, interpolate variable).

.. the remaining part can be cleaned up but I dunno about transaction
state problems ..

--strk;


On Fri, Jan 14, 2005 at 12:06:32PM -0500, Tom Lane wrote:
> strk <[EMAIL PROTECTED]> writes:
> > A simple patch allow query output in psql PROMPT strings:
> 
> Why is this a good idea?  Having a query implicitly executed during
> every prompt will have a ton of bad side effects, for instance
> prematurely freezing the query snapshot in SERIALIZABLE transactions.
> 
> The syntax you propose is downright bizarre --- what if I needed a dot
> in the query text?
> 
> > +                                           cmdend = strcspn(cmd, ".");
> > +                                           cmd[cmdend] = '\0';
> > +                                           if (cmd)
> > +                                           {
> > +                                                   res = PSQLexec(cmd, 
> > false);
> > +                                           }
> 
> What's the if for?  cmd can't be NULL (you already dumped core if it
> is).
> 
> > +                                           if (res && PQntuples(res) )
> > +                                           {
> > +                                                   memcpy(buf, 
> > PQgetvalue(res, 0, 0), MAX_PROMPT_SIZE-1);
> > +                                                   PQclear(res);
> > +                                           }
> 
> Leaks memory on query failure.
> 
> > +                                           if (strlen(buf) > 0 && 
> > buf[strlen(buf) - 1] == '\n')
> > +                                                   buf[strlen(buf) - 1] = 
> > '\0';
> 
> Uses undefined contents of buf on query failure.
> 
> > +                                           p += cmdend + 1;
> 
> Falls off the end of the prompt if there was no terminating dot, causing
> subsequent iterations of the loop to continue reading undefined memory.
> 
>                       regards, tom lane

-- 

For standing up against patentability of software,

  Thank You, Poland!

Read the intervention:    http://kwiki.ffii.org/ConsPolon041221En
Send your thanks:         thankyoupoland.info
Read/do more:             http://www.noepatents.org/

---------------------------(end of broadcast)---------------------------
TIP 4: Don't 'kill -9' the postmaster

Reply via email to