diff --git a/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php b/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php index ec231a0b08c4f2f190f63e1ccb7c1a753d7da4dc..6e360b838635daa86b93ce826376d6767a95baac 100644 --- a/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php +++ b/core/modules/views/src/Plugin/views/pager/PagerPluginBase.php @@ -156,6 +156,8 @@ public function executeCountQuery(&$count_query) { if (!empty($this->options['offset'])) { $this->total_items -= $this->options['offset']; } + // Prevent from being negative. + $this->total_items = max(0, $this->total_items); return $this->total_items; } diff --git a/core/modules/views/tests/src/Unit/Plugin/pager/PagerPluginBaseTest.php b/core/modules/views/tests/src/Unit/Plugin/pager/PagerPluginBaseTest.php index 555c8a404b523ea3c7eacac6a7ea3f7d8fa6d551..ef0e812aa2558a7db492d4fd94aa8c420beb280b 100644 --- a/core/modules/views/tests/src/Unit/Plugin/pager/PagerPluginBaseTest.php +++ b/core/modules/views/tests/src/Unit/Plugin/pager/PagerPluginBaseTest.php @@ -9,6 +9,7 @@ use Drupal\Tests\UnitTestCase; use Drupal\Core\Database\StatementInterface; +use Drupal\Core\Database\Query\Select; /** * @coversDefaultClass \Drupal\views\Plugin\views\pager\PagerPluginBase @@ -247,6 +248,30 @@ public function testExecuteCountQueryWithOffset() { $this->assertEquals(1, $this->pager->executeCountQuery($query)); } + /** + * Tests the executeCountQuery method with an offset larger than result count. + * + * @see \Drupal\views\Plugin\views\pager\PagerPluginBase::executeCountQuery() + */ + public function testExecuteCountQueryWithOffsetLargerThanResult() { + $statement = $this->getMock(TestStatementInterface::class); + + $statement->expects($this->once()) + ->method('fetchField') + ->will($this->returnValue(2)); + + $query = $this->getMockBuilder(Select::class) + ->disableOriginalConstructor() + ->getMock(); + + $query->expects($this->once()) + ->method('execute') + ->will($this->returnValue($statement)); + + $this->pager->setOffset(3); + $this->assertEquals(0, $this->pager->executeCountQuery($query)); + } + } /**