summaryrefslogtreecommitdiffstats
path: root/abs/core/perl/digest_eval_hole.diff
diff options
context:
space:
mode:
authorJames Meyer <james.meyer@operamail.com>2012-08-07 17:54:04 (GMT)
committerJames Meyer <james.meyer@operamail.com>2012-08-07 17:54:04 (GMT)
commit16a043fed17ea05b6d6ca012ff09b71008562790 (patch)
tree86b6ccfe6c79f7671304d3b8f921eb706fe9778f /abs/core/perl/digest_eval_hole.diff
parent4cf4de0fd9895bae9713f28ab85983c3900ca0fc (diff)
downloadlinhes_pkgbuild-16a043fed17ea05b6d6ca012ff09b71008562790.zip
linhes_pkgbuild-16a043fed17ea05b6d6ca012ff09b71008562790.tar.gz
linhes_pkgbuild-16a043fed17ea05b6d6ca012ff09b71008562790.tar.bz2
perl 5.16
Diffstat (limited to 'abs/core/perl/digest_eval_hole.diff')
-rw-r--r--abs/core/perl/digest_eval_hole.diff61
1 files changed, 61 insertions, 0 deletions
diff --git a/abs/core/perl/digest_eval_hole.diff b/abs/core/perl/digest_eval_hole.diff
new file mode 100644
index 0000000..4790413
--- /dev/null
+++ b/abs/core/perl/digest_eval_hole.diff
@@ -0,0 +1,61 @@
+From 4b6a7324284e7435a361c58f7ddb32fc0c635bd0 Mon Sep 17 00:00:00 2001
+From: "Michael G. Schwern" <schwern@pobox.com>
+Date: Mon, 3 Oct 2011 19:05:29 +0100
+Subject: Close the eval "require $module" security hole in
+ Digest->new($algorithm)
+
+Also the filter was incomplete.
+
+Bug-Debian: http://bugs.debian.org/644108
+
+Patch-Name: fixes/digest_eval_hole.diff
+---
+ cpan/Digest/Digest.pm | 6 ++++--
+ cpan/Digest/t/security.t | 14 ++++++++++++++
+ 2 files changed, 18 insertions(+), 2 deletions(-)
+ create mode 100644 cpan/Digest/t/security.t
+
+diff --git a/cpan/Digest/Digest.pm b/cpan/Digest/Digest.pm
+index 384dfc8..d714434 100644
+--- a/cpan/Digest/Digest.pm
++++ b/cpan/Digest/Digest.pm
+@@ -24,7 +24,7 @@ sub new
+ shift; # class ignored
+ my $algorithm = shift;
+ my $impl = $MMAP{$algorithm} || do {
+- $algorithm =~ s/\W+//;
++ $algorithm =~ s/\W+//g;
+ "Digest::$algorithm";
+ };
+ $impl = [$impl] unless ref($impl);
+@@ -35,7 +35,9 @@ sub new
+ ($class, @args) = @$class if ref($class);
+ no strict 'refs';
+ unless (exists ${"$class\::"}{"VERSION"}) {
+- eval "require $class";
++ my $pm_file = $class . ".pm";
++ $pm_file =~ s{::}{/}g;
++ eval { require $pm_file };
+ if ($@) {
+ $err ||= $@;
+ next;
+diff --git a/cpan/Digest/t/security.t b/cpan/Digest/t/security.t
+new file mode 100644
+index 0000000..5cba122
+--- /dev/null
++++ b/cpan/Digest/t/security.t
+@@ -0,0 +1,14 @@
++#!/usr/bin/env perl
++
++# Digest->new() had an exploitable eval
++
++use strict;
++use warnings;
++
++use Test::More tests => 1;
++
++use Digest;
++
++$LOL::PWNED = 0;
++eval { Digest->new(q[MD;5;$LOL::PWNED = 42]) };
++is $LOL::PWNED, 0;