Received: from localhost.localdomain (postgresql.org [64.49.215.8]) by localhost (Postfix) with ESMTP id 81B13475A3D for ; Sat, 4 May 2002 14:09:20 -0400 (EDT) Received: from jbarilla.student.princeton.edu (jbarilla.student.Princeton.EDU [140.180.137.120]) by postgresql.org (Postfix) with ESMTP id 6496F47599A for ; Sat, 4 May 2002 14:09:19 -0400 (EDT) Received: (from jbarilla@localhost) by jbarilla.student.princeton.edu (8.11.6/8.11.6) id g44I9Jc18012; Sat, 4 May 2002 14:09:19 -0400 To: pgsql-sql@postgresql.org Subject: Syntax error in plpgsql crashes backend From: Joseph Barillari X-Public-Key: finger -l jbarilla@phoenix.princeton.edu X-Public-Key-Fingerprint: 99C7 4F49 AF41 AD0F A4FC 529C 215E 1BD2 F6A1 FA37 X-URL: http://www.princeton.edu/~jbarilla Date: Sat, 04 May 2002 14:09:18 -0400 Message-ID: Lines: 92 User-Agent: Gnus/5.090007 (Oort Gnus v0.07) Emacs/21.2.50 (i686-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha1; protocol="application/pgp-signature" X-Archive-Number: 200205/25 X-Sequence-Number: 7661 --=-=-= Content-Transfer-Encoding: quoted-printable I've found a pathological function input that crashes the backend. Note the profusion of 'blah' text and the lack of an 'end;' statement. Less text or an end statement stops this function from provoking a crash. CREATE OR REPLACE FUNCTION foo() RETURNS INTEGER AS ' DECLARE querystr TEXT; BEGIN querystr :=3D '' -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 -- blah blah blah blah blah blah blah blah blah blah blah=20 ''; return 1; ' language 'plpgsql'; When I load this function and try to execute it, I get a syntax error: cal=3D> \i test CREATE cal=3D> select foo(); NOTICE: plpgsql: ERROR during compile of foo near line 60 ERROR: parse error at or near "" If I try it again, the backend crashes: cal=3D> select foo(); NOTICE: plpgsql: ERROR during compile of foo near line 60 ERROR: parse error at or near "" pqReadData() -- backend closed the channel unexpectedly. This probably means the backend terminated abnormally before or while processing the request. The connection to the server was lost. Attempting reset: Failed. !>=20 I get the following output from the postmaster: ERROR: parse error at or near "" NOTICE: plpgsql: ERROR during compile of foo near line 60 DEBUG: server process (pid 17990) was terminated by signal 11 DEBUG: terminating any other active server processes DEBUG: all server processes terminated; reinitializing shared memory and s= emaphores DEBUG: database system was interrupted at 2002-05-04 14:03:46 EDT DEBUG: checkpoint record is at 0/41FFA70 DEBUG: redo record is at 0/41FFA70; undo record is at 0/0; shutdown TRUE DEBUG: next transaction id: 41659; next oid: 147628 DEBUG: database system was not properly shut down; automatic recovery in p= rogress DEBUG: redo starts at 0/41FFAB0 DEBUG: ReadRecord: record with zero length at 0/4205D4C DEBUG: redo done at 0/4205D28 FATAL 1: The database system is starting up DEBUG: database system is ready I anticipate that the correct response is `Don't do that then!' But I assume someone would want to know about crashes like this. I'm using PostgreSQL 7.2, compiled with `gcc version 2.96 20000731 (Red Hat= Linux 7.1 2.96-85)' --Joe --=-=-= Content-Type: application/pgp-signature -----BEGIN PGP MESSAGE----- Version: GnuPG v1.0.6 (GNU/Linux) Comment: Processed by Mailcrypt 3.5.6 and Gnu Privacy Guard iD8DBQE81CPOIV4b0vah+jcRAj89AJ4q7Ryi8D63+ReymyjIcqDgUC4P8ACff1Bq WQt2iLxEYys4Sq6uMb6JAbE= =wrgu -----END PGP MESSAGE----- --=-=-=--