From aa0781275cd0aa6ce6400194c6352aeeda2406ef Mon Sep 17 00:00:00 2001
From: Dries Buytaert <dries@buytaert.net>
Date: Fri, 26 Aug 2011 10:09:24 +0100
Subject: [PATCH] - Patch #1078176 by franz, agentrickard: block module renders
 blocks that are set to display on no pages.

---
 modules/block/block.module |  6 ++++++
 modules/block/block.test   | 43 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+)

diff --git a/modules/block/block.module b/modules/block/block.module
index 1ab1c436aaeb..40fc6462e9c2 100644
--- a/modules/block/block.module
+++ b/modules/block/block.module
@@ -761,6 +761,12 @@ function block_block_list_alter(&$blocks) {
     else {
       $enabled = TRUE;
     }
+
+    // Limited visibility blocks must list at least one page.
+    if ($block->visibility == BLOCK_VISIBILITY_LISTED && empty($block->pages)) {
+      $enabled = FALSE;
+    }
+
     if (!$enabled) {
       unset($blocks[$key]);
       continue;
diff --git a/modules/block/block.test b/modules/block/block.test
index 022bf383031d..03f3048b4eb6 100644
--- a/modules/block/block.test
+++ b/modules/block/block.test
@@ -192,6 +192,49 @@ class BlockTestCase extends DrupalWebTestCase {
     $this->assertNoText($title, t('Block was not displayed to anonymous users.'));
   }
 
+  /**
+   * Test block visibility when using "pages" restriction but leaving 
+   * "pages" textarea empty
+   */
+  function testBlockVisibilityListedEmpty() {
+    $block = array();
+
+    // Create a random title for the block
+    $title = $this->randomName(8);
+
+    // Create the custom block
+    $custom_block = array();
+    $custom_block['info'] = $this->randomName(8);
+    $custom_block['title'] = $title;
+    $custom_block['body[value]'] = $this->randomName(32);
+    $this->drupalPost('admin/structure/block/add', $custom_block, t('Save block'));
+
+    $bid = db_query("SELECT bid FROM {block_custom} WHERE info = :info", array(':info' => $custom_block['info']))->fetchField();
+    $block['module'] = 'block';
+    $block['delta'] = $bid;
+    $block['title'] = $title;
+
+    // Move block to the first sidebar.
+    $this->moveBlockToRegion($block, $this->regions[1]);
+
+    // Set the block to be hidden on any user path, and to be shown only to
+    // authenticated users.
+    $edit = array();
+    $edit['visibility'] = BLOCK_VISIBILITY_LISTED;
+    $this->drupalPost('admin/structure/block/manage/' . $block['module'] . '/' . $block['delta'] . '/configure', $edit, t('Save block'));
+
+    $this->drupalGet('');
+    $this->assertNoText($title, t('Block was not displayed according to block visibility rules.'));
+
+    $this->drupalGet('user');
+    $this->assertNoText($title, t('Block was not displayed according to block visibility rules regardless of path case.'));
+
+    // Confirm that the block is not displayed to anonymous users.
+    $this->drupalLogout();
+    $this->drupalGet('');
+    $this->assertNoText($title, t('Block was not displayed to anonymous users.'));
+  }
+
   /**
    * Test user customization of block visibility.
    */
-- 
GitLab