Index: wp-admin/admin.php
===================================================================
--- wp-admin/admin.php	(revision 6755)
+++ wp-admin/admin.php	(working copy)
@@ -49,10 +49,12 @@
 
 		do_action($page_hook);
 	} else {
-		if ( validate_file($plugin_page) ) {
+		if ( validate_file($plugin_page) )
 			wp_die(__('Invalid plugin page'));
-		}
 
+		if( ! validate_plugin_page($plugin_page) )
+			wp_die(__('Invalid plugin page'));
+		
 		if (! file_exists(ABSPATH . PLUGINDIR . "/$plugin_page"))
 			wp_die(sprintf(__('Cannot load %s.'), htmlentities($plugin_page)));
 
Index: wp-admin/includes/file.php
===================================================================
--- wp-admin/includes/file.php	(revision 6755)
+++ wp-admin/includes/file.php	(working copy)
@@ -78,6 +78,25 @@
 	}
 }
 
+//Checks to see if the given plugin page is registered as a Menu or Submenu.
+function validate_plugin_page($plugin_page){
+	global $menu, $submenu;
+
+	//Check top-level menu's
+	foreach( $menu as $page)
+		if( $plugin_page == $page[2]) 
+			return true;
+
+	//Check sub-menu's
+	foreach($submenu as $subpages)
+		foreach( $subpages as $subpage)
+			if( $plugin_page == $subpage[2]) 
+				return true;
+
+	//The given file has not been loaded as a plugin page.
+	return false;
+}
+
 // array wp_handle_upload ( array &file [, array overrides] )
 // file: reference to a single element of $_FILES. Call the function once for each uploaded file.
 // overrides: an associative array of names=>values to override default variables with extract( $overrides, EXTR_OVERWRITE ).

