Index: wp-includes/nav-menu.php
===================================================================
--- wp-includes/nav-menu.php	(revision 15212)
+++ wp-includes/nav-menu.php	(working copy)
@@ -471,20 +471,36 @@
 		$fetched[$menu->term_id] = true;
 		$posts = array();
 		$terms = array();
-		foreach ( $items as $item ) {
+		foreach ( $items as $key => $item ) {
 			$object_id = get_post_meta( $item->ID, '_menu_item_object_id', true );
 			$object    = get_post_meta( $item->ID, '_menu_item_object',    true );
 			$type      = get_post_meta( $item->ID, '_menu_item_type',      true );
 
-			if ( 'post_type' == $type )
+			if ( 'post_type' == $type ) {
 				$posts[$object][] = $object_id;
-			elseif ( 'taxonomy' == $type)
+				$items[$key]->post_object_id = $object_id;
+			} elseif ( 'taxonomy' == $type)
 				$terms[$object][] = $object_id;
+
+			$items[$key]->object_type = $object;
 		}
 
 		if ( ! empty( $posts ) ) {
 			foreach ( array_keys($posts) as $post_type ) {
-				get_posts( array('post__in' => $posts[$post_type], 'post_type' => $post_type, 'nopaging' => true, 'update_post_term_cache' => false) );
+				$_posts = get_posts( array('post__in' => $posts[$post_type], 'post_type' => $post_type, 'nopaging' => true, 'update_post_term_cache' => false, 'post_status' => 'publish' ) );
+				foreach ( $items as $key => $item ) {
+					if ( $item->object_type == $post_type ) {
+						$found = false;
+						foreach ( $_posts as $p ) {
+							if ( $p->ID == $item->post_object_id ) {
+								$found = true;
+								break;
+							}
+						}
+						if ( !$found )
+							unset( $items[$key] );
+					}
+				}
 			}
 		}
 		unset($posts);
