[libmath-prime-util-perl] 34/55: Validate input in PPFE for gcd, lcm, vecsum
Partha P. Mukherjee
ppm-guest at moszumanska.debian.org
Thu May 21 18:53:41 UTC 2015
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 <dana at 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
More information about the Pkg-perl-cvs-commits
mailing list