]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 623384 - Use Module::Runtime instead of eval { require } or eval "use"
authorDylan William Hardison <dylan@hardison.net>
Tue, 9 Oct 2018 21:01:07 +0000 (17:01 -0400)
committerGitHub <noreply@github.com>
Tue, 9 Oct 2018 21:01:07 +0000 (17:01 -0400)
Bugzilla/BugUrl.pm
Bugzilla/Config.pm
Bugzilla/DB.pm
Bugzilla/DB/Schema.pm
Bugzilla/WebService/Server.pm
colchange.cgi
editparams.cgi
extensions/BzAPI/Extension.pm

index 4724ae71a1011d73a256fd67c8159e4abf40bb1f..a824d286d5ff59526520fd5f6003896e68443c7a 100644 (file)
@@ -16,6 +16,7 @@ use base qw(Bugzilla::Object);
 use Bugzilla::Util;
 use Bugzilla::Error;
 use Bugzilla::Constants;
+use Module::Runtime qw(require_module);
 
 use URI::QueryParam;
 
@@ -113,7 +114,7 @@ sub _do_list_select {
     my $objects = $class->SUPER::_do_list_select(@_);
 
     foreach my $object (@$objects) {
-        eval "use " . $object->class; die $@ if $@;
+        require_module($object->class);
         bless $object, $object->class;
     }
 
@@ -133,8 +134,7 @@ sub class_for {
 
     my $uri = URI->new($value);
     foreach my $subclass ($class->SUB_CLASSES) {
-        eval "use $subclass";
-        die $@ if $@;
+        require_module($subclass);
         return wantarray ? ($subclass, $uri) : $subclass
             if $subclass->should_handle($uri);
     }
@@ -145,7 +145,7 @@ sub class_for {
 
 sub _check_class {
     my ($class, $subclass) = @_;
-    eval "use $subclass"; die $@ if $@;
+    require_module($subclass);
     return $subclass;
 }
 
index 85779fa6b476244a001988f5252c6f8f145ffe1c..1016d51e43d44d368ea27fc54323dda9e0027aa5 100644 (file)
@@ -16,6 +16,7 @@ use Bugzilla::Constants;
 use Bugzilla::Hook;
 use Data::Dumper;
 use File::Temp;
+use Module::Runtime qw(require_module);
 
 # Don't export localvars by default - people should have to explicitly
 # ask for it, as a (probably futile) attempt to stop code using it
@@ -35,7 +36,7 @@ sub _load_params {
     my %hook_panels;
     foreach my $panel (keys %$panels) {
         my $module = $panels->{$panel};
-        eval("require $module") || die $@;
+        require_module($module);
         my @new_param_list = $module->get_param_list();
         $hook_panels{lc($panel)} = { params => \@new_param_list };
     }
index 142c241bf56c603368491da0245e689da3a16c7c..87110aaaad317ad7b7dbe1dbf2c2be9005338369 100644 (file)
@@ -34,6 +34,7 @@ use List::Util qw(max);
 use Scalar::Util qw(weaken);
 use Storable qw(dclone);
 use English qw(-no_match_vars);
+use Module::Runtime qw(require_module);
 
 has [qw(dsn user pass attrs)] => (
     is       => 'ro',
@@ -174,7 +175,7 @@ sub _connect {
     my $pkg_module = DB_MODULE->{lc($driver)}->{db};
 
     # do the actual import
-    eval ("require $pkg_module")
+    eval { require_module($pkg_module) }
         || die ("'$driver' is not a valid choice for \$db_driver in "
                 . " localconfig: " . $@);
 
index 67ee9071c1d29fbc13105569ae5d61ffa44a6da3..e1c19fa51bea075361c44414e3dd83acced3654f 100644 (file)
@@ -28,6 +28,8 @@ use Carp qw(confess);
 use Digest::MD5 qw(md5_hex);
 use Hash::Util qw(lock_value unlock_hash lock_keys unlock_keys);
 use List::MoreUtils qw(firstidx natatime);
+use Try::Tiny;
+use Module::Runtime qw(require_module);
 use Safe;
 # Historical, needed for SCHEMA_VERSION = '1.00'
 use Storable qw(dclone freeze thaw);
@@ -1876,9 +1878,12 @@ sub new {
     if ($driver) {
         (my $subclass = $driver) =~ s/^(\S)/\U$1/;
         $class .= '::' . $subclass;
-        eval "require $class;";
-        die "The $class class could not be found ($subclass " .
-            "not supported?): $@" if ($@);
+        try {
+            require_module($class);
+        }
+        catch {
+            die "The $class class could not be found ($subclass not supported?): $_";
+        };
     }
     die "$class is an abstract base class. Instantiate a subclass instead."
       if ($class eq __PACKAGE__);
index a76c4c48c3f0c7042f727e47d6dce83d7ac917f8..e027889119b99673178354390d1d3301e8d26730 100644 (file)
@@ -11,12 +11,15 @@ use 5.10.1;
 use strict;
 use warnings;
 
+use Bugzilla::Logging;
 use Bugzilla::Error;
 use Bugzilla::Util qw(datetime_from);
 
 use Digest::MD5 qw(md5_base64);
 use Scalar::Util qw(blessed);
 use Storable qw(freeze);
+use Module::Runtime qw(require_module);
+use Try::Tiny;
 
 sub handle_login {
     my ($self, $class, $method, $full_method) = @_;
@@ -30,8 +33,13 @@ sub handle_login {
         Bugzilla->request_cache->{dont_persist_session} = 1;
     }
 
-    eval "require $class";
-    ThrowCodeError('unknown_method', {method => $full_method}) if $@;
+    try {
+        require_module($class);
+    }
+    catch {
+        ThrowCodeError('unknown_method', {method => $full_method});
+        FATAL($_);
+    };
     return if ($class->login_exempt($method)
                and !defined Bugzilla->input_params->{Bugzilla_login});
     Bugzilla->login();
index 46d25ecdfec522da1c77c4d6753fad2ec01b4a7b..bc18c3851313090349c99028d8fcc5cc712d6b46 100755 (executable)
@@ -20,6 +20,7 @@ use Bugzilla::Search::Saved;
 use Bugzilla::Error;
 use Bugzilla::User;
 use Bugzilla::Token;
+use Module::Runtime qw(require_module);
 
 use Storable qw(dclone);
 
@@ -58,7 +59,7 @@ foreach my $param (keys %{ COLUMN_PARAMS() }) {
 }
 
 foreach my $class (keys %{ COLUMN_CLASSES() }) {
-    eval("use $class; 1;") || die $@;
+    require_module($class);
     my $column = COLUMN_CLASSES->{$class};
     delete $columns->{$column} if !$class->any_exist;
 }
index 495d53937bc51f2396ae3f5764bdd631b773307a..2dd9ff08dd225fc54af83626be1f880857acde5e 100755 (executable)
@@ -23,6 +23,7 @@ use Bugzilla::Token;
 use Bugzilla::User;
 use Bugzilla::User::Setting;
 use Bugzilla::Status;
+use Module::Runtime qw(require_module);
 
 my $user = Bugzilla->login(LOGIN_REQUIRED);
 my $cgi = Bugzilla->cgi;
@@ -48,7 +49,7 @@ my $param_panels = Bugzilla::Config::param_panels();
 my $override = Bugzilla->localconfig->{param_override};
 foreach my $panel (keys %$param_panels) {
     my $module = $param_panels->{$panel};
-    eval("require $module") || die $@;
+    require_module($module);
     my @module_param_list = $module->get_param_list();
     my $item = {
         name       => lc($panel),
index bb9805134d1e2fbe87db686dde1a1ef10ad96a9a..d812a01c4d707690da406e4636c258c281b9a7f2 100644 (file)
@@ -21,6 +21,7 @@ use Bugzilla::Util qw(trick_taint datetime_from);
 use Bugzilla::Constants;
 use Bugzilla::Install::Filesystem;
 use Bugzilla::WebService::Constants;
+use Module::Runtime qw(require_module);
 
 use File::Basename;
 
@@ -270,8 +271,7 @@ sub _preload_handlers {
         foreach my $module (_resource_modules()) {
             my $resource_class = "Bugzilla::Extension::BzAPI::Resources::$module";
             trick_taint($resource_class);
-            eval("require $resource_class");
-            warn $@ if $@;
+            eval { require_module($resource_class) };
             next if ($@ || !$resource_class->can('rest_handlers'));
             my $handlers = $resource_class->rest_handlers;
             next if (ref $handlers ne 'ARRAY' || scalar @$handlers % 2 != 0);