[BUGS] BUG #6185: Segmentation fault with NULL string columns
The following bug has been logged online: Bug reference: 6185 Logged by: Isaac Jurado Email address: ijur...@econcept.es PostgreSQL version: 8.4.8 Operating system: Ubuntu 10.04.03 LTS (x86_64) Description:Segmentation fault with NULL string columns Details: Here's the script to make it fail: CREATE DATABASE killme; \c killme CREATE FUNCTION to_ascii(bytea, name) RETURNS text AS 'to_ascii_encname' LANGUAGE internal; CREATE TABLE mytable (id INTEGER PRIMARY KEY, mytext TEXT); INSERT INTO mytable (id, mytext) VALUES (1, ''); SELECT * FROM mytable WHERE to_ascii(convert_to(mytext, 'latin1'), 'latin1') = to_ascii(convert_to('nicetry', 'latin1'), 'latin1'); UPDATE mytable SET mytext=NULL WHERE id=1; SELECT * FROM mytable WHERE to_ascii(convert_to(mytext, 'latin1'), 'latin1') = to_ascii(convert_to('nicetry', 'latin1'), 'latin1'); After the second query, the database server segfaults. Note that it only fails for NULL values. The to_ascii/convert_to combination is a recipe for diacritics elimination found on a PostgreSQL forum. -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs
Re: [BUGS] BUG #6185: Segmentation fault with NULL string columns
On Tue, Aug 30, 2011 at 8:21 PM, Heikki Linnakangas wrote: > > to_ascii_encname is marked as STRICT, which means that it returns NULL > on NULL input, without ever calling the underlying C function. The > "to_ascii" function that you created is not marked as STRICT, so the > to_ascii_encname C function is called on NULL input. It's not prepared > for that, and crashes, because it's not supposed to be called on NULL > input. I figured that 5 minutes after reporting. I tried to sent a reply email but it seems it didn't arrive. Thanks anyway. > Why do you create your own 'internal' language function like that in > the first place? Just use the existing to_ascii function. The default to_ascii expects a string as a first argument. As our DB encoding is UTF8 we need to filter everything through convert_to(..., 'LATIN1'). Because convert_to function returns a "bytea" type, we cannot use to_ascii in vanilla flavour. We are not too fond with the PostgreSQL specifics (although the explicit ::text cast didn't work), so we found that function definition on a wiki and it worked. But now, unless you know a more correct way to do it, it works like a charm by appending "STRICT" to the function definition. Best regards and sorry for the noise. -- Isaac Jurado Internet Busines Solutions eConcept -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs
Re: [BUGS] BUG #6185: Segmentation fault with NULL string columns
On Tue, Aug 30, 2011 at 8:22 PM, Alvaro Herrera wrote: > > Seems you neglected to mark the function STRICT. Yes, that was it. Sorry for the invalid bug report. Best regards. -- Isaac Jurado Internet Busines Solutions eConcept -- Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-bugs