Index: src/wp-includes/capabilities.php
===================================================================
--- src/wp-includes/capabilities.php	(revision 33361)
+++ src/wp-includes/capabilities.php	(working copy)
@@ -1144,9 +1144,17 @@
 	case 'delete_post':
 	case 'delete_page':
 		$post = get_post( $args[0] );
+		if ( ! $post ) {
+			$caps[] = 'do_not_allow';
+			break;
+		}
 
 		if ( 'revision' == $post->post_type ) {
 			$post = get_post( $post->post_parent );
+			if ( ! $post ) {
+				$caps[] = 'do_not_allow';
+				break;
+			}
 		}
 
 		$post_type = get_post_type_object( $post->post_type );
@@ -1188,13 +1196,17 @@
 	case 'edit_post':
 	case 'edit_page':
 		$post = get_post( $args[0] );
-		if ( empty( $post ) ) {
+		if ( ! $post ) {
 			$caps[] = 'do_not_allow';
 			break;
 		}
 
 		if ( 'revision' == $post->post_type ) {
 			$post = get_post( $post->post_parent );
+			if ( ! $post ) {
+				$caps[] = 'do_not_allow';
+				break;
+			}
 		}
 
 		$post_type = get_post_type_object( $post->post_type );
@@ -1234,9 +1246,17 @@
 	case 'read_post':
 	case 'read_page':
 		$post = get_post( $args[0] );
+		if ( ! $post ) {
+			$caps[] = 'do_not_allow';
+			break;
+		}
 
 		if ( 'revision' == $post->post_type ) {
 			$post = get_post( $post->post_parent );
+			if ( ! $post ) {
+				$caps[] = 'do_not_allow';
+				break;
+			}
 		}
 
 		$post_type = get_post_type_object( $post->post_type );
@@ -1265,6 +1285,11 @@
 		break;
 	case 'publish_post':
 		$post = get_post( $args[0] );
+		if ( ! $post ) {
+			$caps[] = 'do_not_allow';
+			break;
+		}
+
 		$post_type = get_post_type_object( $post->post_type );
 
 		$caps[] = $post_type->cap->publish_posts;
@@ -1273,6 +1298,11 @@
 	case 'delete_post_meta':
 	case 'add_post_meta':
 		$post = get_post( $args[0] );
+		if ( ! $post ) {
+			$caps[] = 'do_not_allow';
+			break;
+		}
+
 		$caps = map_meta_cap( 'edit_post', $user_id, $post->ID );
 
 		$meta_key = isset( $args[ 1 ] ) ? $args[ 1 ] : false;
@@ -1302,9 +1332,17 @@
 		break;
 	case 'edit_comment':
 		$comment = get_comment( $args[0] );
-		if ( empty( $comment ) )
+		if ( ! $comment ) {
+			$caps[] = 'do_not_allow';
 			break;
+		}
+
 		$post = get_post( $comment->comment_post_ID );
+		if ( ! $post ) {
+			$caps[] = 'do_not_allow';
+			break;
+		}
+
 		$caps = map_meta_cap( 'edit_post', $user_id, $post->ID );
 		break;
 	case 'unfiltered_upload':
Index: tests/phpunit/tests/user/mapMetaCap.php
===================================================================
--- tests/phpunit/tests/user/mapMetaCap.php	(revision 33361)
+++ tests/phpunit/tests/user/mapMetaCap.php	(working copy)
@@ -37,6 +37,14 @@
 		parent::tearDown();
 	}
 
+	/**
+	 * @ticket 13905
+	 */
+	function test_capability_type_post_with_invalid_id() {
+		$this->assertEquals( array( 'do_not_allow' ),
+			map_meta_cap( 'edit_post', $this->user_id, $this->post_id + 1 ) );
+	}
+
 	function test_capability_type_post_with_no_extra_caps() {
 
 		register_post_type( $this->post_type, array(
