From ccadf0a8626fbf19fd4cb89ab640e99787f7858e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=B0=A8=EB=8F=99=EB=AF=BC?= <40655807+chadongmin@users.noreply.github.com> Date: Sun, 8 Jun 2025 20:12:43 +0900 Subject: [PATCH] Fix subList behavior when offset exceeds list size --- .../src/main/java/com/querydsl/core/QueryModifiers.java | 4 ++++ .../src/test/java/com/querydsl/core/QueryModifiersTest.java | 1 + 2 files changed, 5 insertions(+) diff --git a/querydsl-libraries/querydsl-core/src/main/java/com/querydsl/core/QueryModifiers.java b/querydsl-libraries/querydsl-core/src/main/java/com/querydsl/core/QueryModifiers.java index 536141911e..9bd6f0c572 100644 --- a/querydsl-libraries/querydsl-core/src/main/java/com/querydsl/core/QueryModifiers.java +++ b/querydsl-libraries/querydsl-core/src/main/java/com/querydsl/core/QueryModifiers.java @@ -14,6 +14,7 @@ package com.querydsl.core; import java.io.Serializable; +import java.util.Collections; import java.util.List; import java.util.Objects; import org.jetbrains.annotations.Nullable; @@ -109,6 +110,9 @@ public boolean isRestricting() { public List subList(List list) { if (!list.isEmpty()) { var from = offset != null ? toInt(offset) : 0; + if (from >= list.size()) { + return Collections.emptyList(); + } var to = limit != null ? (from + toInt(limit)) : list.size(); return list.subList(from, Math.min(to, list.size())); } else { diff --git a/querydsl-libraries/querydsl-core/src/test/java/com/querydsl/core/QueryModifiersTest.java b/querydsl-libraries/querydsl-core/src/test/java/com/querydsl/core/QueryModifiersTest.java index 75c4583adf..0cd1d065a3 100644 --- a/querydsl-libraries/querydsl-core/src/test/java/com/querydsl/core/QueryModifiersTest.java +++ b/querydsl-libraries/querydsl-core/src/test/java/com/querydsl/core/QueryModifiersTest.java @@ -80,5 +80,6 @@ public void subList() { assertThat(QueryModifiers.offset(2).subList(ints)).isEqualTo(Arrays.asList(3, 4, 5)); assertThat(QueryModifiers.limit(3).subList(ints)).isEqualTo(Arrays.asList(1, 2, 3)); assertThat(new QueryModifiers(3L, 1L).subList(ints)).isEqualTo(Arrays.asList(2, 3, 4)); + assertThat(QueryModifiers.offset(5).subList(ints)).isEmpty(); } }