Check that class name is actually a valid class name - add a test for this
[gitmo/Class-MOP.git] / lib / Class / MOP.pm
index a646e00..74ac220 100644 (file)
@@ -48,7 +48,7 @@ BEGIN {
         : sub () { 1 };
 }
 
-our $VERSION   = '0.64_04';
+our $VERSION   = '0.64_06';
 our $XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';    
@@ -96,7 +96,10 @@ unless ($ENV{CLASS_MOP_NO_XS}) {
 sub load_class {
     my $class = shift;
 
-    if (ref($class) || !defined($class) || !length($class)) {
+    if (   ref($class)
+        || !defined($class)
+        || !length($class)
+        || $class !~ /^\w+(?::\w+)*$/ ) {
         my $display = defined($class) ? $class : 'undef';
         confess "Invalid class name ($display)";
     }
@@ -104,9 +107,7 @@ sub load_class {
     # if the class is not already loaded in the symbol table..
     unless (is_class_loaded($class)) {
         # require it
-        my $file = $class . '.pm';
-        $file =~ s{::}{/}g;
-        my $e = do { local $@; eval { require($file) }; $@ };
+        my $e = do { local $@; eval "require $class"; $@ };
         confess "Could not load class ($class) because : $e" if $e;
     }