Index: modules/block/block.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/block/block.module,v
retrieving revision 1.290
diff -u -p -r1.290 block.module
--- modules/block/block.module	14 Dec 2007 18:08:44 -0000	1.290
+++ modules/block/block.module	15 Dec 2007 23:55:10 -0000
@@ -230,6 +230,8 @@ function _block_rehash() {
   }
 
   $blocks = array();
+  // Valid region names for the theme.
+  $regions = system_region_list($theme_key);
 
   foreach (module_list() as $module) {
     $module_blocks = module_invoke($module, 'block', 'list');
@@ -260,8 +262,15 @@ function _block_rehash() {
           // do not need to update the database here.
           // Add 'info' to this block.
           $old_blocks[$module][$delta]['info'] = $block['info'];
-          // Set region to none if not enabled.
-          $old_blocks[$module][$delta]['region'] = $old_blocks[$module][$delta]['status'] ? $old_blocks[$module][$delta]['region'] : BLOCK_REGION_NONE;
+          // Set region to none if not enabled, if region name not exists disable block and assign it to none.
+          if (!empty($old_blocks[$module][$delta]['region']) && !array_key_exists($old_blocks[$module][$delta]['region'], $regions)) {
+            drupal_set_message(t('Block %info has been disabled because its assigned to an invalid region: %region', array('%info' => $old_blocks[$module][$delta]['info'], '%region' => $old_blocks[$module][$delta]['region'])), 'error');
+            $old_blocks[$module][$delta]['status'] = 0;
+            $old_blocks[$module][$delta]['region'] = BLOCK_REGION_NONE;
+          }
+          else {
+            $old_blocks[$module][$delta]['region'] = $old_blocks[$module][$delta]['status'] ? $old_blocks[$module][$delta]['region'] : BLOCK_REGION_NONE;
+          }
           // Add this block to the list of blocks we return.
           $blocks[] = $old_blocks[$module][$delta];
           // Remove this block from the list of blocks to be deleted.
