The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use strict;
use warnings;

use Test::Requires {
    'Test::Taint' => 0.02,
};

use Test::Fatal;
use Test::More;

use Params::Validate qw( validate validate_pos ARRAYREF );

taint_checking_ok('These tests are meaningless unless we are in taint mode.');

sub test1 {
    my $def = $0;
    tainted_ok( $def, 'make sure $def is tainted' );

    # The spec is irrelevant, all that matters is that there's a
    # tainted scalar as the default
    my %p = validate( @_, { foo => { default => $def } } );
}

{
    is(
        exception { test1() },
        undef,
        'no taint error when we validate with tainted default value'
    );
}

sub test2 {
    return validate_pos( @_, { regex => qr/^b/ } );
}

SKIP:
{
    skip 'This test only passes on Perl 5.14+', 1
        unless $] >= 5.014;

    my @p = 'cat';
    taint(@p);

    like(
        exception { test2(@p) },
        qr/\QParameter #1 ("cat") to main::test2 did not pass regex check/,
        'no taint error when we validate with tainted value values being validated'
    );
}

done_testing();