Perl5.8.9のsuidperlにバグがあるらしい

自宅サーバのハードウェアグレードアップをしたついでにFreeBSD7.1を新規インストールした。
FreeBSD7.1のPortsに載っかってるPerlは5.8.9だったのだが*1
こいつをインストールした後suidperlを使っているスクリプトを走らせてみたところ

suidperl needs (suid) fd script


といったエラーログと共にスクリプトがたたき落とされるようになった。
こういうときはGoogle先生の出番である……件の文言で調べてみた結果、どうやらバグがあるらしい事が解った。

> in perl.c in release 5.8.9, line 3727 is if (*suidscript) {
> should be if (*suidscript != 1) {

suidscript is a bool* so comparison with 1 is not sound

Elsewhere in patch 33168, C is replaced by C so I suspect the test is just inverted
if (*suidscript) {
should be if (!*suidscript) {

http://www.gossamer-threads.com/lists/perl/porters/234548


どうやら実行しようとしているスクリプトがsuidなスクリプトかどうかのフラグ判定を間違えているらしい。
早速/usr/ports/lang/perl5.8/work/perl-5.8.9/perl.cをこの情報に従って書き換えて再インストールを試みることにした。
これにて正常通り稼働……している……と思う。もう少し使い込んでから結論を出す予定。

*1:6系では5.8.8_1だった。最近5.8.9に更新されたらしい