Re: [HACKERS] Segfault from PL/Perl Returning vstring

2009-12-22 Thread David E. Wheeler
On Dec 21, 2009, at 9:04 PM, Andrew Dunstan wrote:

 I cannot reproduce this.  I tested with perl 5.10.1 which is the latest 
 reported stable release at http://www.cpan.org/src/README.html, on an 8.4.2 
 UTF8 database, and with the same Safe and Encode module versions as above.

I've replicated it all the way back to 8.0. I'd be happy to give you a login to 
my box.

Best,

David
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Segfault from PL/Perl Returning vstring

2009-12-22 Thread Alvaro Herrera
David E. Wheeler wrote:
 On Dec 21, 2009, at 9:04 PM, Andrew Dunstan wrote:
 
  I cannot reproduce this.  I tested with perl 5.10.1 which is the latest 
  reported stable release at http://www.cpan.org/src/README.html, on an 
  8.4.2 UTF8 database, and with the same Safe and Encode module versions as 
  above.
 
 I've replicated it all the way back to 8.0. I'd be happy to give you a login 
 to my box.

If a trivial plperl function can crash the server this is surely worth
some research.

-- 
Alvaro Herrerahttp://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Segfault from PL/Perl Returning vstring

2009-12-21 Thread Andrew Dunstan



David E. Wheeler wrote:

At least I think it's a segfault. This function returns a vstring:

CREATE OR REPLACE FUNCTION wtf(
) RETURNS text LANGUAGE plperl IMMUTABLE STRICT AS $X$
return $^V;
$X$;

Here's what happens when I call it:

try=# select wtf();
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Failed.
!

So I think that it doesn't know what to do with vstrings. They should probably 
never be returned (they're mostly deprecated), but if they are, they should be 
cast to text, I think.


  


It's not doing that for me.

The plperl code has no way at all of knowing that the bytes you are 
returning come from $^V. If you really want the version back, do what 
the perl docs tell you and sprintf the value:


   andrew=# CREATE OR REPLACE FUNCTION wtf(
   ) RETURNS text LANGUAGE plperl IMMUTABLE STRICT AS $X$
   return sprintf(%vd,$^V);
   $X$;
   CREATE FUNCTION
   andrew=# select wtf();
 wtf 
   ---

5.8.8

BTW, this should arguably not be an immutable function. You could 
replace the perl library, so it's not solely dependent on the input for 
the result.


cheers

andrew



--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Segfault from PL/Perl Returning vstring

2009-12-21 Thread David E. Wheeler
On Dec 21, 2009, at 11:46 AM, Andrew Dunstan wrote:

 It's not doing that for me.

Odd.

 The plperl code has no way at all of knowing that the bytes you are returning 
 come from $^V. If you really want the version back, do what the perl docs 
 tell you and sprintf the value:

It works fine if I return `$^V`.

 BTW, this should arguably not be an immutable function. You could replace the 
 perl library, so it's not solely dependent on the input for the result.

Yeah, that's leftover from trying to troubleshoot another problem. More on that 
in a bit.

Best,

David



-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Segfault from PL/Perl Returning vstring

2009-12-21 Thread Peter Eisentraut
On mån, 2009-12-21 at 14:46 -0500, Andrew Dunstan wrote:
 BTW, this should arguably not be an immutable function. You could 
 replace the perl library, so it's not solely dependent on the input
 for 
 the result. 

By this logic, no function could be immutable, because you could replace
the C library or parts of the kernel.


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Segfault from PL/Perl Returning vstring

2009-12-21 Thread Andrew Dunstan



Peter Eisentraut wrote:

On mån, 2009-12-21 at 14:46 -0500, Andrew Dunstan wrote:
  
BTW, this should arguably not be an immutable function. You could 
replace the perl library, so it's not solely dependent on the input
for 
the result.



By this logic, no function could be immutable, because you could replace
the C library or parts of the kernel.

  


*shrug* Maybe, OTOH upgrading perl is not such an unusual operation, and 
doing so *will* affect this value. It's a bit hard to see why one would 
want the perl version to be immutable. It doesn't look like it would be 
much use in an index 


I think people are generally safer not marking functions immutable 
unless they actually need them to be.


cheers

andrew



--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Segfault from PL/Perl Returning vstring

2009-12-21 Thread Tim Bunce
On Mon, Dec 21, 2009 at 02:46:17PM -0500, Andrew Dunstan wrote:


 David E. Wheeler wrote:
 At least I think it's a segfault. This function returns a vstring:

 CREATE OR REPLACE FUNCTION wtf(
 ) RETURNS text LANGUAGE plperl IMMUTABLE STRICT AS $X$
 return $^V;
 $X$;

 Here's what happens when I call it:

 try=# select wtf();
 server closed the connection unexpectedly
  This probably means the server terminated abnormally
  before or while processing the request.
 The connection to the server was lost. Attempting reset: Failed.
 !

 So I think that it doesn't know what to do with vstrings. They should 
 probably never be returned (they're mostly deprecated), but if they are, 
 they should be cast to text, I think.

 It's not doing that for me.

You're using 5.8.8. In 5.10.0 $^V was changed to be an object.

I'm working in that area. I'll look into it.

Tim.

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Segfault from PL/Perl Returning vstring

2009-12-21 Thread David E. Wheeler
On Dec 21, 2009, at 2:13 PM, Tim Bunce wrote:

 You're using 5.8.8. In 5.10.0 $^V was changed to be an object.
 
 I'm working in that area. I'll look into it.

While you're at it, I have a new problem:

CREATE OR REPLACE FUNCTION wtf(
 expression text
) RETURNS text LANGUAGE plperl AS $$
return {$_[0]};
$$;

try=# select wtf('foo');
 wtf
-
 {
(1 row)

Note how I don't even get the closing }. This does not happen with PL/PerlU. 
The denizens of #postgresql think that there's some sort of issue with Safe and 
Encode or Encode::Alias (the latter `require`s Encode in two if its methods). 
Can you replicate it? It's driving me absolutely batshit. I'm using Perl 
5.10.2, Safe 2.20, and Encode 2.39.

Thanks,

David



-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Segfault from PL/Perl Returning vstring

2009-12-21 Thread David E . Wheeler
On Dec 21, 2009, at 2:34 PM, David E. Wheeler wrote:

 On Dec 21, 2009, at 2:13 PM, Tim Bunce wrote:
 
 You're using 5.8.8. In 5.10.0 $^V was changed to be an object.
 
 I'm working in that area. I'll look into it.
 
 While you're at it, I have a new problem:
 
CREATE OR REPLACE FUNCTION wtf(
 expression text
) RETURNS text LANGUAGE plperl AS $$
return {$_[0]};
$$;
 
try=# select wtf('foo');
 wtf
-
 {
(1 row)
 
 Note how I don't even get the closing }. This does not happen with 
 PL/PerlU. The denizens of #postgresql think that there's some sort of issue 
 with Safe and Encode or Encode::Alias (the latter `require`s Encode in two if 
 its methods). Can you replicate it? It's driving me absolutely batshit. I'm 
 using Perl 5.10.2, Safe 2.20, and Encode 2.39.

Also, my encoding is en_US.UTF-8. I think it matter that it's UTF-8, to judge 
by the

if (GetDatabaseEncoding() == PG_UTF8)

Block in plperl.c.

Thanks,

David
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers


Re: [HACKERS] Segfault from PL/Perl Returning vstring

2009-12-21 Thread Andrew Dunstan



David E. Wheeler wrote:

On Dec 21, 2009, at 2:34 PM, David E. Wheeler wrote:

  

On Dec 21, 2009, at 2:13 PM, Tim Bunce wrote:



You're using 5.8.8. In 5.10.0 $^V was changed to be an object.

I'm working in that area. I'll look into it.
  

While you're at it, I have a new problem:

   CREATE OR REPLACE FUNCTION wtf(
expression text
   ) RETURNS text LANGUAGE plperl AS $$
   return {$_[0]};
   $$;

   try=# select wtf('foo');
wtf
   -
{
   (1 row)

Note how I don't even get the closing }. This does not happen with PL/PerlU. 
The denizens of #postgresql think that there's some sort of issue with Safe and Encode or 
Encode::Alias (the latter `require`s Encode in two if its methods). Can you replicate it? 
It's driving me absolutely batshit. I'm using Perl 5.10.2, Safe 2.20, and Encode 2.39.



Also, my encoding is en_US.UTF-8. I think it matter that it's UTF-8, to judge 
by the

if (GetDatabaseEncoding() == PG_UTF8)

Block in plperl.c.


  


I cannot reproduce this.  I tested with perl 5.10.1 which is the latest 
reported stable release at http://www.cpan.org/src/README.html, on an 
8.4.2 UTF8 database, and with the same Safe and Encode module versions 
as above.


cheers

andrew

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers