diff --git src/wp-includes/class-wp-user.php src/wp-includes/class-wp-user.php
index d0bcb65..04868b2 100644
--- src/wp-includes/class-wp-user.php
+++ src/wp-includes/class-wp-user.php
@@ -639,7 +639,7 @@ class WP_User {
 
 		$args = array_slice( func_get_args(), 1 );
 		$args = array_merge( array( $cap, $this->ID ), $args );
-		$caps = call_user_func_array( 'map_meta_cap', $args );
+		$caps = (array) call_user_func_array( 'map_meta_cap', $args );
 
 		// Multisite super admin has all caps by definition, Unless specifically denied.
 		if ( is_multisite() && is_super_admin( $this->ID ) ) {
@@ -662,7 +662,12 @@ class WP_User {
 		// Must have ALL requested caps
 		$capabilities = apply_filters( 'user_has_cap', $this->allcaps, $caps, $args, $this );
 		$capabilities['exist'] = true; // Everyone is allowed to exist
-		foreach ( (array) $caps as $cap ) {
+
+		if ( empty( $caps ) ) {
+			return false;
+		}
+
+		foreach ( $caps as $cap ) {
 			if ( empty( $capabilities[ $cap ] ) )
 				return false;
 		}
