[Fwd: [PORTS] Port Bug Report: parse error not detected on unterminated quote] - Mailing list pgsql-ports

From Thomas Lockhart
Subject [Fwd: [PORTS] Port Bug Report: parse error not detected on unterminated quote]
Date
Msg-id 377A3299.3AA801CD@alumni.caltech.edu
Whole thread Raw
Responses Re: [Fwd: [PORTS] Port Bug Report: parse error not detected on unterminated quote]  (Bruce Momjian <maillist@candle.pha.pa.us>)
Re: [Fwd: [PORTS] Port Bug Report: parse error not detected on unterminated quote]  (Bruce Momjian <pgman@candle.pha.pa.us>)
Re: [Fwd: Port Bug Report: parse error not detected on unterminated quote]  (Bruce Momjian <pgman@candle.pha.pa.us>)
List pgsql-ports
(back on list)

Bruce, the problem is revealed with the "single-line input" mode of
psql. I'm a bit suprised that the backend parser doesn't catch this,
but I see why now: scan.l goes into a "string accumulate" mode when it
sees a single quote, and doesn't actually send a token back to gram.y
until it sees the closing quote. If EOT comes first, then there is no
flag to tell gram.y (or whatever is the right thing) that there is
still an active token being worked on.

Not certain yet how to fix this; the "string accumulator" is currently
local to scan.l and I'm not sure if scan.l can provide code to check
this after it runs out of characters to process. I do have a lex/yacc
book, but if anyone has some hints...

                   - Thomas

--
Thomas Lockhart                lockhart@alumni.caltech.edu
South Pasadena, CaliforniaThomas Lockhart wrote:

> > Problem Description:
> > --------------------
> > If a single quote is left unmatched in the query, the parser
> > seems to throw away the rest of the line without detecting
> > an error.
> > Test Case:
> > ----------
> > Enter a select like this:
> > select * from mytable where id = 1234;
> > You should get only one record.
> >
> > Now put in an errant single quote:
> > select * from mytable' where id = 1234;
> > Now you get the whole table.  This should really be a
> > syntax error of some kind.
>
> And seems to be:
>
> postgres=> select * from mytable' where id = 1234;
> postgres'> '
> postgres-> ;
> ERROR:  parser: parse error at or near "'"
> postgres=>
>
> This is on a RH5.2 system with with the cvs distribution of Postgres
> (rather than v6.5 exactly). But the parsing behavior should be the
> same. I'm not sure what could be different in our installations...
>
>                      - Thomas
>
> --
> Thomas Lockhart                         lockhart@alumni.caltech.edu
> South Pasadena, California

Yup, it seems to be OK in psql interactive mode.  The problem only shows
up if I type:

psql mydb -c "select * from mytable' where id = 1234;"

--
 ----------------------------------------------------
 Kyle Bateman       President, Action Target Inc.
 "Viva Yo!"         kyle@actarg.com (801)377-8033x101
 ----------------------------------------------------



pgsql-ports by date:

Previous
From: Herouth Maoz
Date:
Subject: Re: [PORTS] Port Bug Report: parse error not detected on unterminated quote
Next
From: Thomas Lockhart
Date:
Subject: Re: [PORTS] Port Bug Report: parse error not detected onunterminated quote