From 49a00cb5ec25bb09d124b03b7d4b9917e24726c9 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 16 Dec 2014 12:40:48 +0100 Subject: [PATCH] DATACMNS-615 - PageImpl now rejects a total less than the amount of items given. PageImpl now makes sure that the total given to the constructor is never less than then number of items given to make sure we do not mask broken count calculation by creating an actually invalid instance. Related ticket: DATAMONGO-1120. --- .../java/org/springframework/data/domain/PageImpl.java | 5 +++++ .../springframework/data/domain/PageImplUnitTests.java | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/src/main/java/org/springframework/data/domain/PageImpl.java b/src/main/java/org/springframework/data/domain/PageImpl.java index 9f63902d9..5f48eddd4 100644 --- a/src/main/java/org/springframework/data/domain/PageImpl.java +++ b/src/main/java/org/springframework/data/domain/PageImpl.java @@ -17,6 +17,8 @@ package org.springframework.data.domain; import java.util.List; +import org.springframework.util.Assert; + /** * Basic {@code Page} implementation. * @@ -39,6 +41,9 @@ public class PageImpl extends Chunk implements Page { public PageImpl(List content, Pageable pageable, long total) { super(content, pageable); + + Assert.isTrue(total >= content.size(), "Total must not be less than the number of elements given!"); + this.total = total; } diff --git a/src/test/java/org/springframework/data/domain/PageImplUnitTests.java b/src/test/java/org/springframework/data/domain/PageImplUnitTests.java index f754e5673..189af6cbc 100644 --- a/src/test/java/org/springframework/data/domain/PageImplUnitTests.java +++ b/src/test/java/org/springframework/data/domain/PageImplUnitTests.java @@ -126,4 +126,12 @@ public class PageImplUnitTests { assertThat(page.hasNext(), is(false)); assertThat(page.hasPrevious(), is(false)); } + + /** + * @see DATACMNS-615 + */ + @Test(expected = IllegalArgumentException.class) + public void rejectsTotalLessThanContentLength() { + new PageImpl(Arrays.asList("foo", "bar"), new PageRequest(0, 10), 1); + } }