Explicitly test each value of handles to make sure it's sane
Dave Rolsky [Thu, 1 Sep 2011 14:52:52 +0000 (09:52 -0500)]
lib/Moose/Meta/Attribute/Native/Trait.pm

index 52b19ee..3728406 100644 (file)
@@ -124,13 +124,24 @@ around '_canonicalize_handles' => sub {
             "The 'handles' option must be a HASH reference, not $handles");
     }
 
-    return map {
-        my $to = $handles->{$_};
-        $to = [$to] unless ref $to;
-        $_ => $to
-    } keys %$handles;
+    return
+        map { $_ => $self->_canonicalize_handles_value( $handles->{$_} ) }
+        keys %$handles;
 };
 
+sub _canonicalize_handles_value {
+    my $self  = shift;
+    my $value = shift;
+
+    if ( ref $value && 'ARRAY' ne ref $value ) {
+        $self->throw_error(
+            "All values passed to handles must be strings or ARRAY references, not $value"
+        );
+    }
+
+    return ref $value ? $value : [$value];
+}
+
 around '_make_delegation_method' => sub {
     my $next = shift;
     my ( $self, $handle_name, $method_to_call ) = @_;