Обсуждение: plperl and sqrt.
I have plperl compiled, installed, and generally working on Solaris. But when I try to execute the sqrt function, an error is issued: ERROR: creation of function failed: sqrt trapped by operation mask at (eval 10) line 4. The number after eval changes depending on where I put the line of code which calls sqrt. Can someone tell me how to get around this? Thanks, -- ---------------------------------------------------------------- Travis Bauer | CS Grad Student | IU |www.cs.indiana.edu/~trbauer ----------------------------------------------------------------
Travis Bauer <trbauer@indiana.edu> writes: > I have plperl compiled, installed, and generally working on > Solaris. But when I try to execute the sqrt function, an error > is issued: > ERROR: creation of function failed: sqrt trapped by operation > mask at (eval 10) line 4. There's an "operation mask" inside plperl that defines which Perl opcodes it thinks are safe to allow the user to execute. I think the mask is set pretty conservatively at the moment ... definitely too conservatively, if it rejects sqrt :-(. But no one's gotten round to looking at the situation more closely to decide what's safe and what's not. Feel free to look at the documentation for Perl's Opcode module and propose a more reasonable mask. regards, tom lane
Tom Lane (tgl@sss.pgh.pa.us) wrote: > > There's an "operation mask" inside plperl that defines which Perl > opcodes it thinks are safe to allow the user to execute. I think > the mask is set pretty conservatively at the moment ... definitely > too conservatively, if it rejects sqrt :-(. But no one's gotten > round to looking at the situation more closely to decide what's > safe and what's not. Feel free to look at the documentation for > Perl's Opcode module and propose a more reasonable mask. > > regards, tom lane The existing mask seems the most reasonable. The mast is :default, which is not the most strict, but reasonably so. It allows users to write scripts that would consume system resources, tying up the system, but prevents them (probably) from getting too much access to the host system. sqrt is disables because you can use it to produce floating point exceptions which would call $SIG{??}. I'm not sure why this is bad, but it seems that this would violate the comparment somehow. Anyway, it would be nice to have a commandline switch for the Makefile.PL script which would allow people to customize the operation mask that plperl.so uses. I have to use the :base_math mask because I need sqrt. When plperl is re-enabled in the configure script, it should be added there too. -- ---------------------------------------------------------------- Travis Bauer | CS Grad Student | IU |www.cs.indiana.edu/~trbauer ----------------------------------------------------------------
Travis Bauer <trbauer@indiana.edu> writes: > ... sqrt is disables because you can use it to produce > floating point exceptions which would call $SIG{??}. That seems a little silly, unless they also lock out *all* floating point ops plus integer division (what about divide by zero?). > I'm not sure why this is bad, but it seems that this would violate the > comparment somehow. Offhand I think this is not reasonable or necessary for Postgres' use. I'd support adding base_math to our standard mask. > Anyway, it would be nice to have a commandline switch for the > Makefile.PL script which would allow people to customize the > operation mask that plperl.so uses. Submit a patch (and more importantly, documentation patches so that people will know about this issue). regards, tom lane