2014-10-25 3 views

ответ

1

Я не претендую на идеальные надежность. Всегда нужно создавать тесты, чтобы гарантировать, что код работает как ожидалось в каждой новой системе.

Однако, если открыть дескриптор файла для скалярной справки, результаты readline кажутся tainted:

#!/usr/bin/env perl -T 
use strict; 
use warnings; 

use Scalar::Util qw(tainted); 

my $var = 0.13; 

print tainted($var) ? "Yes, tainted: $var\n" : "Nope, all clean: $var\n"; 

$var = taint_string($var); 

print tainted($var) ? "Yes, tainted: $var\n" : "Nope, all clean: $var\n"; 

sub taint_string { 
    my $value = shift; 

    warn "Not going to work on references" if ref $value; 

    open my $fh, '<', \$value or die "Can't open: $!"; 
    local $/; # Slurp 
    return <$fh>; 
} 

Выходы:

Nope, all clean: 0.13 
Yes, tainted: 0.13 
+0

хорошее горе! умный и о-так далеко от левого поля. Благодаря! – cnd

+0

Рад, что я мог помочь. Обратите внимание, что, хотя это, похоже, работает прямо сейчас, нет никакой гарантии, что он будет работать в будущих версиях Perl. Поэтому, если вы полагаетесь на него каким-либо образом, вы должны создать тестовый скрипт, чтобы обеспечить желаемое поведение, если ваши системные спецификации меняются. – Miller

Смежные вопросы