From 55d988e7b77ef130892f54dc603bf578c485fd14 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 cb6a296a9..71eece84d 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); + } }