This is an automated email from the git hooks/post-receive script. ppm-guest pushed a commit to annotated tag v0.41 in repository libmath-prime-util-perl.
commit d25bd70571d8d8af92df6c63085bcc5fc3aa5134 Author: Dana Jacobsen <d...@acm.org> Date: Mon May 12 15:26:43 2014 -0700 Validate input in PPFE for gcd, lcm, vecsum --- lib/Math/Prime/Util/PP.pm | 26 ++++++++++++++++++++++++++ lib/Math/Prime/Util/PPFE.pm | 22 +++++++++++++--------- 2 files changed, 39 insertions(+), 9 deletions(-) diff --git a/lib/Math/Prime/Util/PP.pm b/lib/Math/Prime/Util/PP.pm index 4027c5e..61d038f 100644 --- a/lib/Math/Prime/Util/PP.pm +++ b/lib/Math/Prime/Util/PP.pm @@ -148,6 +148,32 @@ sub _validate_positive_integer { 1; } +sub _validate_integer { + my($n) = @_; + croak "Parameter must be defined" if !defined $n; + if (ref($n) eq 'CODE') { + $_[0] = $_[0]->(); + $n = $_[0]; + } + my $poscmp = OLD_PERL_VERSION ? 562949953421312 : ''.~0; + my $negcmp = OLD_PERL_VERSION ? -562949953421312 : -(~0 >> 1); + if (ref($n) eq 'Math::BigInt') { + croak "Parameter '$n' must be an integer" if !$n->is_int(); + $_[0] = _bigint_to_int($_[0]) if $n <= $poscmp && $n >= $negcmp; + } else { + my $strn = "$n"; + croak "Parameter '$strn' must be an integer" + if $strn =~ tr/-0123456789//c && $strn !~ /^[-+]?\d+$/; + if ($n <= $poscmp && $n >= $negcmp) { + $_[0] = $strn if ref($n); + } else { + $_[0] = Math::BigInt->new($strn) + } + } + $_[0]->upgrade(undef) if ref($_[0]) && $_[0]->upgrade(); + 1; +} + my @_primes_small = (0,2,3,5); { diff --git a/lib/Math/Prime/Util/PPFE.pm b/lib/Math/Prime/Util/PPFE.pm index 2951ad9..ca96288 100644 --- a/lib/Math/Prime/Util/PPFE.pm +++ b/lib/Math/Prime/Util/PPFE.pm @@ -10,6 +10,7 @@ use Carp qw/carp croak confess/; package Math::Prime::Util; *_validate_num = \&Math::Prime::Util::PP::_validate_num; +*_validate_integer = \&Math::Prime::Util::PP::_validate_integer; *_prime_memfreeall = \&Math::Prime::Util::PP::_prime_memfreeall; *prime_memfree = \&Math::Prime::Util::PP::prime_memfree; *prime_precalc = \&Math::Prime::Util::PP::prime_precalc; @@ -316,22 +317,25 @@ sub divisor_sum { } sub gcd { - return Math::Prime::Util::PP::gcd(@_); + my(@v) = @_; + _validate_integer($_) for @v; + return Math::Prime::Util::PP::gcd(@v); } sub lcm { - return Math::Prime::Util::PP::lcm(@_); + my(@v) = @_; + _validate_integer($_) for @v; + return Math::Prime::Util::PP::lcm(@v); } sub vecsum { - return Math::Prime::Util::PP::vecsum(@_); + my(@v) = @_; + _validate_integer($_) for @v; + return Math::Prime::Util::PP::vecsum(@v); } sub invmod { my ($a, $n) = @_; - my ($va, $vn) = ($a, $n); - $va = -$va if defined $va && $va < 0; - $vn = -$vn if defined $vn && $vn < 0; - _validate_positive_integer($va); - _validate_positive_integer($vn); - return Math::Prime::Util::PP::invmod(@_); + _validate_integer($a); + _validate_integer($n); + return Math::Prime::Util::PP::invmod($a,$n); } sub legendre_phi { -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libmath-prime-util-perl.git _______________________________________________ Pkg-perl-cvs-commits mailing list Pkg-perl-cvs-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits