Skip to content

Commit

Permalink
Switch to using UNIVERSAL::require rather than eval "require $_"
Browse files Browse the repository at this point in the history
  • Loading branch information
alexmv committed Jul 7, 2014
1 parent e4cca37 commit df8ee51
Show file tree
Hide file tree
Showing 26 changed files with 43 additions and 66 deletions.
3 changes: 1 addition & 2 deletions bin/rt-crontool.in
Original file line number Diff line number Diff line change
Expand Up @@ -287,8 +287,7 @@ sub get_template {

sub load_module {
my $modname = shift;
eval "require $modname";
if ($@) {
unless ($modname->require) {
die loc( "Failed to load module [_1]. ([_2])", $modname, $@ );
}

Expand Down
4 changes: 2 additions & 2 deletions lib/RT.pm
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ package RT;
use File::Spec ();
use Cwd ();
use Scalar::Util qw(blessed);
use UNIVERSAL::require;

use vars qw($Config $System $SystemUser $Nobody $Handle $Logger $_Privileged $_Unprivileged $_INSTALL_MODE);

Expand Down Expand Up @@ -495,8 +496,7 @@ sub InitClasses {
}

foreach my $class ( grep $_, RT->Config->Get('CustomFieldValuesSources') ) {
local $@;
eval "require $class; 1" or $RT::Logger->error(
$class->require or $RT::Logger->error(
"Class '$class' is listed in CustomFieldValuesSources option"
." in the config, but we failed to load it:\n$@\n"
);
Expand Down
8 changes: 2 additions & 6 deletions lib/RT/Config.pm
Original file line number Diff line number Diff line change
Expand Up @@ -604,9 +604,7 @@ our %META;
my $self = shift;
my $value = shift;
return if $value;
return if $INC{'GraphViz.pm'};
local $@;
return if eval {require GraphViz; 1};
return if GraphViz->require;
$RT::Logger->debug("You've enabled GraphViz, but we couldn't load the module: $@");
$self->Set( DisableGraphViz => 1 );
},
Expand All @@ -617,9 +615,7 @@ our %META;
my $self = shift;
my $value = shift;
return if $value;
return if $INC{'GD.pm'};
local $@;
return if eval {require GD; 1};
return if GD->require;
$RT::Logger->debug("You've enabled GD, but we couldn't load the module: $@");
$self->Set( DisableGD => 1 );
},
Expand Down
2 changes: 1 addition & 1 deletion lib/RT/Crypt.pm
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,7 @@ sub LoadImplementation {
my $class = 'RT::Crypt::'. $proto;
return $cache{ $class } if exists $cache{ $class };

if (eval "require $class; 1") {
if ($class->require) {
return $cache{ $class } = $class;
} else {
RT->Logger->warn( "Could not load $class: $@" );
Expand Down
2 changes: 1 addition & 1 deletion lib/RT/CustomField.pm
Original file line number Diff line number Diff line change
Expand Up @@ -601,7 +601,7 @@ sub Values {
my $class = $self->ValuesClass;
if ( $class ne 'RT::CustomFieldValues') {
eval "require $class" or die "$@";
$class->require or die "Can't load $class: $@";
}
my $cf_values = $class->new( $self->CurrentUser );
# if the user has no rights, return an empty object
Expand Down
3 changes: 1 addition & 2 deletions lib/RT/Handle.pm
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,10 @@ sub FinalizeDatabaseType {
my $db_type = RT->Config->Get('DatabaseType');
my $package = "DBIx::SearchBuilder::Handle::$db_type";

unless (eval "require $package; 1;") {
$package->require or
die "Unable to load DBIx::SearchBuilder database handle for '$db_type'.\n".
"Perhaps you've picked an invalid database type or spelled it incorrectly.\n".
$@;
}

@RT::Handle::ISA = ($package);

Expand Down
7 changes: 3 additions & 4 deletions lib/RT/I18N.pm
Original file line number Diff line number Diff line change
Expand Up @@ -537,8 +537,8 @@ use Encode::Guess to try to figure it out the string's encoding.
=cut

use constant HAS_ENCODE_GUESS => do { local $@; eval { require Encode::Guess; 1 } };
use constant HAS_ENCODE_DETECT => do { local $@; eval { require Encode::Detect::Detector; 1 } };
use constant HAS_ENCODE_GUESS => Encode::Guess->require;
use constant HAS_ENCODE_DETECT => Encode::Detect::Detector->require;

sub _GuessCharset {
my $fallback = _CanonicalizeCharset('iso-8859-1');
Expand Down Expand Up @@ -636,8 +636,7 @@ sub _CanonicalizeCharset {
return 'gbk';
}
elsif ( $charset =~ /^(?:(?:big5(-1984|-2003|ext|plus))|cccii|unisys|euc-tw|gb18030|(?:cns11643-\d+))$/ ) {
eval { require Encode::HanExtra };
if ( $@ ) {
unless ( Encode::HanExtra->require ) {
RT->Logger->error("Please install Encode::HanExtra to handle $charset");
}
return $charset;
Expand Down
1 change: 0 additions & 1 deletion lib/RT/Interface/Email.pm
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ use Email::Address;
use MIME::Entity;
use RT::EmailParser;
use File::Temp;
use UNIVERSAL::require;
use Mail::Mailer ();
use Text::ParseWords qw/shellwords/;

Expand Down
2 changes: 1 addition & 1 deletion lib/RT/Interface/Web.pm
Original file line number Diff line number Diff line change
Expand Up @@ -3971,7 +3971,7 @@ sub _NewScrubber {
require HTML::Scrubber;
my $scrubber = HTML::Scrubber->new();

if (eval "require HTML::Gumbo; 1") {
if (HTML::Gumbo->require) {
no warnings 'redefine';
my $orig = \&HTML::Scrubber::scrub;
*HTML::Scrubber::scrub = sub {
Expand Down
1 change: 0 additions & 1 deletion lib/RT/Interface/Web/Handler.pm
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,6 @@ sub InitSessionDir {
}


use UNIVERSAL::require;
sub NewHandler {
my $class = shift;
$class->require or die $!;
Expand Down
3 changes: 1 addition & 2 deletions lib/RT/Interface/Web/Session.pm
Original file line number Diff line number Diff line change
Expand Up @@ -84,8 +84,7 @@ sub Class {
my $class = RT->Config->Get('WebSessionClass')
|| $self->Backends->{RT->Config->Get('DatabaseType')}
|| 'Apache::Session::File';
eval "require $class";
die $@ if $@;
$class->require or die "Can't load $class: $@";
return $class;
}

Expand Down
8 changes: 4 additions & 4 deletions lib/RT/Migrate/Serializer.pm
Original file line number Diff line number Diff line change
Expand Up @@ -162,9 +162,9 @@ sub PushAll {
$self->PushCollections(qw(Articles), map { ($_, "Object$_") } qw(Classes Topics));

# Custom Fields
if (eval "require RT::ObjectCustomFields; 1") {
if (RT::ObjectCustomFields->require) {
$self->PushCollections(map { ($_, "Object$_") } qw(CustomFields CustomFieldValues));
} elsif (eval "require RT::TicketCustomFieldValues; 1") {
} elsif (RT::TicketCustomFieldValues->require) {
$self->PushCollections(qw(CustomFields CustomFieldValues TicketCustomFieldValues));
}

Expand All @@ -184,7 +184,7 @@ sub PushCollections {
for my $type (@_) {
my $class = "RT::\u$type";

eval "require $class; 1" or next;
$class->require or next;
my $collection = $class->new( RT->SystemUser );
$collection->FindAllRows; # be explicit
$collection->CleanSlate; # some collections (like groups and users) join in _Init
Expand Down Expand Up @@ -288,7 +288,7 @@ sub PushBasics {
$self->PushObj( $groups );
}

if (eval "require RT::Articles; 1") {
if (RT::Articles->require) {
$self->PushCollections(qw(Topics Classes));
}

Expand Down
1 change: 0 additions & 1 deletion lib/RT/Ruleset.pm
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ use warnings;


use base 'Class::Accessor::Fast';
use UNIVERSAL::require;

__PACKAGE__->mk_accessors(qw(Name Rules));

Expand Down
3 changes: 2 additions & 1 deletion lib/RT/ScripAction.pm
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ use warnings;

use base 'RT::Record';


sub Table {'ScripActions'}

use RT::Template;
Expand Down Expand Up @@ -170,7 +171,7 @@ sub LoadAction {
my $module = $1;
my $type = "RT::Action::". $module;

eval "require $type" || die "Require of $type failed.\n$@\n";
$type->require or die "Require of $type action module failed.\n$@\n";

return $self->{'Action'} = $type->new(
%args,
Expand Down
3 changes: 2 additions & 1 deletion lib/RT/ScripCondition.pm
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ use warnings;

use base 'RT::Record';


sub Table {'ScripConditions'}


Expand Down Expand Up @@ -161,7 +162,7 @@ sub LoadCondition {
my $module = $1;
my $type = "RT::Condition::". $module;

eval "require $type" || die "Require of $type failed.\n$@\n";
$type->require or die "Require of $type condition module failed.\n$@\n";

$self->{'Condition'} = $type->new ( 'ScripConditionObj' => $self,
'TicketObj' => $args{'TicketObj'},
Expand Down
3 changes: 1 addition & 2 deletions lib/RT/Shredder.pm
Original file line number Diff line number Diff line change
Expand Up @@ -368,8 +368,7 @@ sub CastObjectsToRecords
RT::Shredder::Exception->throw( "Unsupported class $class" )
unless $class =~ /^\w+(::\w+)*$/;
$class = 'RT::'. $class unless $class =~ /^RTx?::/i;
eval "require $class";
die "Couldn't load '$class' module" if $@;
$class->require or die "Failed to load $class: $@";
my $obj = $class->new( RT->SystemUser );
die "Couldn't construct new '$class' object" unless $obj;
$obj->Load( $id );
Expand Down
5 changes: 2 additions & 3 deletions lib/RT/Shredder/Plugin.pm
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ sub List
delete $res{'Base'};
foreach my $name( keys %res ) {
my $class = join '::', qw(RT Shredder Plugin), $name;
unless( eval "require $class" ) {
unless( $class->require ) {
delete $res{ $name };
next;
}
Expand Down Expand Up @@ -171,9 +171,8 @@ sub LoadByName
my $name = shift or return (0, "Name not specified");
$name =~ /^\w+(::\w+)*$/ or return (0, "Invalid plugin name");

local $@;
my $plugin = "RT::Shredder::Plugin::$name";
eval "require $plugin" or return( 0, $@ );
$plugin->require or return( 0, "Failed to load $plugin" );
return wantarray ? ( 0, "Plugin '$plugin' has no method new") : 0 unless $plugin->can('new');

my $obj = eval { $plugin->new( @_ ) };
Expand Down
2 changes: 1 addition & 1 deletion lib/RT/Test/GnuPG.pm
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ sub import {
my $t = $class->builder;

$t->plan( skip_all => 'GnuPG required.' )
unless eval { require GnuPG::Interface; 1 };
unless GnuPG::Interface->require;
$t->plan( skip_all => 'gpg executable is required.' )
unless RT::Test->find_executable('gpg');

Expand Down
2 changes: 1 addition & 1 deletion sbin/rt-dump-metadata.in
Original file line number Diff line number Diff line change
Expand Up @@ -260,7 +260,7 @@ OBJECT:
}
}

if ( eval { require RT::Attributes; 1 } ) {
if ( RT::Attributes->require ) {
my $attributes = $obj->Attributes;
while ( my $attribute = $attributes->Next ) {
my $content = $attribute->Content;
Expand Down
3 changes: 1 addition & 2 deletions sbin/rt-serializer.in
Original file line number Diff line number Diff line change
Expand Up @@ -196,8 +196,7 @@ sub estimate {
for my $class (@types) {
print "Estimating $class count...";
my $collection = $class . "s";
eval "require $collection";
unless ($@) {
if ($collection->require) {
my $objs = $collection->new( RT->SystemUser );
$objs->FindAllRows;
$objs->UnLimit;
Expand Down
4 changes: 1 addition & 3 deletions share/html/Admin/Elements/EditCustomFieldValuesSource
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,7 @@ my @sources;
foreach my $class( 'RT::CustomFieldValues', RT->Config->Get('CustomFieldValuesSources') ) {
next unless $class;

local $@;
eval "require $class";
if( $@ ) {
unless ($class->require) {
$RT::Logger->crit("Couldn't load class '$class': $@");
next;
}
Expand Down
2 changes: 1 addition & 1 deletion share/html/Admin/Tools/Theme.html
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,7 @@ <h2><&|/l&>Custom CSS (Advanced)</&></h2>
my $valid_image_types;
my $analyze_img = sub {
return undef if RT->Config->Get('DisableGD');
return undef unless eval { require Convert::Color; 1 };
return undef unless Convert::Color->require;

require GD;

Expand Down
4 changes: 2 additions & 2 deletions t/api/i18n_guess.t
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ use RT::Test tests => 16;

use Encode qw(encode);

use constant HAS_ENCODE_GUESS => do { local $@; eval { require Encode::Guess; 1 } };
use constant HAS_ENCODE_DETECT => do { local $@; eval { require Encode::Detect::Detector; 1 } };
use constant HAS_ENCODE_GUESS => Encode::Guess->require;
use constant HAS_ENCODE_DETECT => Encode::Detect::Detector->require;

my $string = "\x{442}\x{435}\x{441}\x{442} \x{43f}\x{43e}\x{434}\x{434}\x{435}\x{440}\x{436}\x{43a}\x{430}";

Expand Down
16 changes: 6 additions & 10 deletions t/mail/dashboard-chart-with-utf8.t
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
use strict;
use warnings;

BEGIN {
require RT::Test;

if (eval { require GD }) {
RT::Test->import(tests => 15);
}
else {
RT::Test->import(skip_all => 'GD required.');
}
}
use RT::Test tests => undef;

plan skip_all => 'GD required'
unless GD->require;

use utf8;

Expand Down Expand Up @@ -90,3 +84,5 @@ if ( my $io = $handle->open('r') ) {
}
is( $mail_image_data, $image, 'image in mail is the same one in web' );

undef $m;
done_testing;
3 changes: 2 additions & 1 deletion t/security/CVE-2011-5092-graph-links.t
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,9 @@ use strict;
use warnings;

use RT::Test tests => undef;

plan skip_all => 'GraphViz required.'
unless eval { require GraphViz; 1 };
unless GraphViz->require;

my ($base, $m) = RT::Test->started_ok;
$m->login;
Expand Down
14 changes: 4 additions & 10 deletions t/web/charting.t
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
use strict;
use warnings;

BEGIN {
require RT::Test;

if (eval { require GD; 1 }) {
RT::Test->import(tests => undef);
}
else {
RT::Test->import(skip_all => 'GD required.');
}
}
use RT::Test tests => undef;

plan skip_all => 'GD required'
unless GD->require;

for my $n (1..7) {
my $ticket = RT::Ticket->new( RT->SystemUser );
Expand Down

0 comments on commit df8ee51

Please sign in to comment.