BUG #5243: Segmentation fault when sending null to crypt();

Started by Greg Johnsonover 16 years ago2 messagesbugs
Jump to latest
#1Greg Johnson
greg.johnson@interprose.com

The following bug has been logged online:

Bug reference: 5243
Logged by: Greg Johnson
Email address: greg.johnson@interprose.com
PostgreSQL version: 8.4.1, 8.3.8
Operating system: CentOS 5.4
Description: Segmentation fault when sending null to crypt();
Details:

Postgresql version 8.4.1 and 8.3.8 both seg fault when you pass null into
crypt function.

select crypt(null, gen_salt('md5'));

Server Log
----------------------------
LOG: statement: select crypt(null, gen_salt('md5'));
LOG: server process (PID 25855) was terminated by signal 11: Segmentation
fault
LOG: terminating any other active server processes
FATAL: the database system is in recovery mode
WARNING: terminating connection because of crash of another server process
DETAIL: The postmaster has commanded this server process to roll back the
current transaction and exit, because another server process exited
abnormally and possibly corrupted shared memory.
HINT: In a moment you should be able to reconnect to the database and
repeat your command.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Greg Johnson (#1)
Re: BUG #5243: Segmentation fault when sending null to crypt();

"Greg Johnson" <greg.johnson@interprose.com> writes:

Postgresql version 8.4.1 and 8.3.8 both seg fault when you pass null into
crypt function.

select crypt(null, gen_salt('md5'));

Not if the crypt function is properly defined:

CREATE OR REPLACE FUNCTION crypt(text, text)
RETURNS text
AS 'MODULE_PATHNAME', 'pg_crypt'
LANGUAGE C IMMUTABLE STRICT;

The CVS history shows that the STRICT marker was added in 8.1.
If you are still using pre-8.1 definitions of the pgcrypto
functions (no doubt via a long chain of dump/reload), you really need to
update them to current, because you're missing a lot of functionality.

regards, tom lane