Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 17424)
+++ wp-includes/post.php	(working copy)
@@ -2787,7 +2787,10 @@
 		}
 	} elseif ( in_array( $post_type, $hierarchical_post_types ) ) {
 		// Page slugs must be unique within their own trees. Pages are in a separate
-		// namespace than posts so page slugs are allowed to overlap post slugs.
+		// namespace than posts so page slugs are allowed to overlap post slugs. But they must not
+		// overlap slugs of attachments sharing the same parent.
+		$hierarchical_post_types['attachment'] = 'attachment';
+		
 		$check_sql = "SELECT post_name FROM $wpdb->posts WHERE post_name = %s AND post_type IN ( '" . implode( "', '", esc_sql( $hierarchical_post_types ) ) . "' ) AND ID != %d AND post_parent = %d LIMIT 1";
 		$post_name_check = $wpdb->get_var( $wpdb->prepare( $check_sql, $slug, $post_ID, $post_parent ) );
 
