|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 24 Apr 2002 15:54:50 To : Andrey Sapozhnikov Subject : Re: UNIVERSAL::can и taint check -------------------------------------------------------------------------------- Здравствуй, Andrey Sapozhnikov. Уф. Hашел. Минимальный пример, на котором бага воспроизводится: ==== 8< [test.pl] ==== #!/usr/bin/perl -wl use strict; my ($function,$module) = @ARGV; $ARGV[0] =~ /^([a-zA-Z0-9_]+)$/; $function = $1; $ARGV[1] =~ /^([a-zA-Z0-9_:]+)$/; $module = $1; eval "require $module"; print $module->can($function); ==== >8 [test.pl] ==== ==== 8< [!perl test.pl param CGI] ==== CODE(0x816fa38) ==== >8 [!perl test.pl param CGI] ==== ==== 8< [!perl -T test.pl param CGI] ==== Use of uninitialized value in print at test.pl line 9. ==== >8 [!perl -T test.pl param CGI] ==== Для получения работоспособного кода достаточно убрать инициализацию " = @ARGV". Или заменить perl на 5.005 (бага проявляется на 5.6.1). То есть если переменная (my или глобальная - пофигу) инициализирована tainted данными, то она где-то в углу остается tainted даже после явного untaint. Причем не везде (иначе бы eval "require $module"; не работало), а в каком-то странном месте. Уж не знаю, в каком. workaround: для операции untaint использовать новую переменную, которая в своей жизни не инициализировалась tainted данными. Какое к этому отношение имеет UNIVERSAL::can - не знаю. Hо молча не работает именно он. -- Artem Chuprina Communiware.net RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/358.49, ICQ: 13038757 --- ifmail v.2.15dev5 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1445435eb40a2.html, оценка из 5, голосов 10
|