Index: wp-admin/includes/plugin.php
===================================================================
--- wp-admin/includes/plugin.php	(revision 18667)
+++ wp-admin/includes/plugin.php	(working copy)
@@ -1509,6 +1509,19 @@
 	return $page_type . '_page_' . $plugin_name;
 }
 
+function admin_page_exists() {
+	global $plugin_page;
+	global $_registered_pages;
+	// it's not an plugin setting page, so never mind
+	if ( ! $plugin_page )
+	  return true;
+	$parent = get_admin_page_parent();
+	$hookname = get_plugin_page_hookname( $plugin_page, $parent );
+	if ( ! isset( $_registered_pages[$hookname] ) )
+		return false;
+	return true;
+}
+
 function user_can_access_admin_page() {
 	global $pagenow;
 	global $menu;
Index: wp-admin/includes/menu.php
===================================================================
--- wp-admin/includes/menu.php	(revision 18667)
+++ wp-admin/includes/menu.php	(working copy)
@@ -220,6 +220,11 @@
 	unset( $menu[ $last_menu_key ] );
 unset( $last_menu_key );
 
+if ( ! admin_page_exists() ) {
+	do_action( 'admin_page_not_exists' );
+	wp_die( 'Plugin setting page does not exist.' );
+}
+
 if ( !user_can_access_admin_page() ) {
 	do_action('admin_page_access_denied');
 	wp_die( __('You do not have sufficient permissions to access this page.') );
