Check that class name is actually a valid class name - add a test for this
[gitmo/Class-MOP.git] / lib / Class / MOP.pm
index c67945f..74ac220 100644 (file)
@@ -28,7 +28,7 @@ BEGIN {
         require Devel::GlobalDestruction;
         Devel::GlobalDestruction->import("in_global_destruction");
         1;
-    } or *in_global_destruction = sub () { '' };
+    } or *in_global_destruction = sub () { !1 };
 }
 
 
@@ -48,7 +48,8 @@ BEGIN {
         : sub () { 1 };
 }
 
-our $VERSION   = '0.64_01';
+our $VERSION   = '0.64_06';
+our $XS_VERSION = $VERSION;
 $VERSION = eval $VERSION;
 our $AUTHORITY = 'cpan:STEVAN';    
     
@@ -59,7 +60,7 @@ unless ($ENV{CLASS_MOP_NO_XS}) {
         local $@;
         eval {
             require XSLoader;
-            __PACKAGE__->XSLoader::load($VERSION);
+            __PACKAGE__->XSLoader::load($XS_VERSION);
         };
         $@;
     };
@@ -95,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)";
     }
@@ -103,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;
     }