fix 11773 Pluggable allows arbitrary module load

This commit is contained in:
Doug Bell 2010-08-10 21:17:20 -05:00
parent c3989308fa
commit bb2e32141d
3 changed files with 15 additions and 1 deletions

View file

@ -14,6 +14,7 @@
- fixed #11772: Metadata in Post doesn't set default value correctly - fixed #11772: Metadata in Post doesn't set default value correctly
- fixed #11768: Edit Branch does not update File wgaccess permissions - fixed #11768: Edit Branch does not update File wgaccess permissions
- added Asset Report Asset allowing creation of reports based on Asset Properties. - added Asset Report Asset allowing creation of reports based on Asset Properties.
- fixed #11773: Pluggable allows arbitrary module loading
7.9.10 7.9.10
- fixed #11721: spamStopWords not in WebGUI.conf.original - fixed #11721: spamStopWords not in WebGUI.conf.original

View file

@ -232,6 +232,11 @@ sub load {
croak "Could not load $module because $moduleError{$module}"; croak "Could not load $module because $moduleError{$module}";
} }
# Sanitize
if ( $module !~ m{^\w+(?:\w+|::)*\w+$} ) {
croak "Invalid module name: $module";
}
# Try to load the module # Try to load the module
my $modulePath = $module . ".pm"; my $modulePath = $module . ".pm";
$modulePath =~ s{::|'}{/}g; $modulePath =~ s{::|'}{/}g;

View file

@ -41,7 +41,7 @@ use WebGUI::Pluggable;
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
# Tests # Tests
plan tests => 12; # Increment this number for each test you create plan tests => 18; # Increment this number for each test you create
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
# put your tests here # put your tests here
@ -62,6 +62,14 @@ is($dumper->Dump, q|$VAR1 = {
}; };
|, "Can instanciate an object."); |, "Can instanciate an object.");
ok( !eval{ WebGUI::Pluggable::load( '::HA::HA' ); 1 }, 'load dies on bad input' );
like( $@, qr/^\QInvalid module name: ::HA::HA/, 'helpful error message' );
ok( !eval{ WebGUI::Pluggable::load( 'HA::HA::' ); 1 }, 'load dies on bad input' );
ok( !eval{ WebGUI::Pluggable::load( 'HA::..::..::HA' ); 1 }, 'load dies on bad input' );
ok( !eval{ WebGUI::Pluggable::load( '..::..::..::HA' ); 1 }, 'load dies on bad input' );
ok( !eval{ WebGUI::Pluggable::load( 'uploads::ik::jo::ikjosdfwefsdfsefwef::myfile.txt\0.pm' ); 1 }, 'load dies on bad input' );
#---------------------------------------------------------------------------- #----------------------------------------------------------------------------
# Test find and findAndLoad # Test find and findAndLoad
{ # Block to localize @INC { # Block to localize @INC