From 5b0d3331110f756e47f9dd532b0af0b887b2886f Mon Sep 17 00:00:00 2001 From: z3rotig4r Date: Thu, 18 Jun 2026 19:50:31 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20PaginationInfo=200=20=EB=B6=84=EB=AA=A8?= =?UTF-8?q?=20=EB=82=98=EB=88=97=EC=85=88=20=EC=98=88=EC=99=B8=20=EB=B0=A9?= =?UTF-8?q?=EC=A7=80=20=EA=B0=80=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit recordCountPerPage 또는 pageSize 가 미설정(기본값 0)일 때 getTotalPageCount(), getFirstPageNoOnPageList() 에서 발생하던 '/ by zero' ArithmeticException 을 안전 폴백으로 회피한다. totalRecordCount 가 0 이면 페이지 수는 0 으로 반환한다. 정상 입력에 대한 계산 결과는 변경되지 않는다. - getTotalPageCount(): recordCountPerPage<=0 또는 totalRecordCount<=0 이면 0 반환 - getFirstPageNoOnPageList(): pageSize<=0 이면 1 반환 - PaginationTest 에 경계값(0 분모)·회귀 테스트 추가 --- .../tags/ui/pagination/PaginationInfo.java | 8 +++ .../tags/ui/pagination/PaginationTest.java | 51 +++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/Presentation/org.egovframe.rte.ptl.mvc/src/main/java/org/egovframe/rte/ptl/mvc/tags/ui/pagination/PaginationInfo.java b/Presentation/org.egovframe.rte.ptl.mvc/src/main/java/org/egovframe/rte/ptl/mvc/tags/ui/pagination/PaginationInfo.java index 254b8b11..ccc32ca9 100755 --- a/Presentation/org.egovframe.rte.ptl.mvc/src/main/java/org/egovframe/rte/ptl/mvc/tags/ui/pagination/PaginationInfo.java +++ b/Presentation/org.egovframe.rte.ptl.mvc/src/main/java/org/egovframe/rte/ptl/mvc/tags/ui/pagination/PaginationInfo.java @@ -122,6 +122,10 @@ public void setTotalRecordCount(int totalRecordCount) { } public int getTotalPageCount() { + if (getRecordCountPerPage() <= 0 || getTotalRecordCount() <= 0) { + totalPageCount = 0; + return totalPageCount; + } totalPageCount = ((getTotalRecordCount() - 1) / getRecordCountPerPage()) + 1; return totalPageCount; } @@ -135,6 +139,10 @@ public int getLastPageNo() { } public int getFirstPageNoOnPageList() { + if (getPageSize() <= 0) { + firstPageNoOnPageList = 1; + return firstPageNoOnPageList; + } firstPageNoOnPageList = ((getCurrentPageNo() - 1) / getPageSize()) * getPageSize() + 1; return firstPageNoOnPageList; } diff --git a/Presentation/org.egovframe.rte.ptl.mvc/src/test/java/org/egovframe/rte/ptl/mvc/tags/ui/pagination/PaginationTest.java b/Presentation/org.egovframe.rte.ptl.mvc/src/test/java/org/egovframe/rte/ptl/mvc/tags/ui/pagination/PaginationTest.java index 7ffc228c..d1600f69 100755 --- a/Presentation/org.egovframe.rte.ptl.mvc/src/test/java/org/egovframe/rte/ptl/mvc/tags/ui/pagination/PaginationTest.java +++ b/Presentation/org.egovframe.rte.ptl.mvc/src/test/java/org/egovframe/rte/ptl/mvc/tags/ui/pagination/PaginationTest.java @@ -47,4 +47,55 @@ public void paginationTagTest() throws JspException { assertEquals(0, tag.doStartTag()); } + /** + * recordCountPerPage 가 미설정(기본값 0)인 경우 getTotalPageCount() 에서 + * '/ by zero' ArithmeticException 이 발생하지 않고 0 을 반환하는지 검증한다. + */ + @Test + public void totalPageCountWithZeroRecordCountPerPageTest() { + PaginationInfo pageInfo = new PaginationInfo(); + pageInfo.setTotalRecordCount(51); + assertEquals(0, pageInfo.getTotalPageCount()); + } + + /** + * pageSize 가 미설정(기본값 0)인 경우 getFirstPageNoOnPageList() 에서 + * '/ by zero' ArithmeticException 이 발생하지 않고 1 을 반환하는지 검증한다. + */ + @Test + public void firstPageNoOnPageListWithZeroPageSizeTest() { + PaginationInfo pageInfo = new PaginationInfo(); + pageInfo.setCurrentPageNo(1); + assertEquals(1, pageInfo.getFirstPageNoOnPageList()); + } + + /** + * 전체 건수가 0 이면 페이지 수는 0 이어야 한다. + */ + @Test + public void totalPageCountWithZeroTotalRecordCountTest() { + PaginationInfo pageInfo = new PaginationInfo(); + pageInfo.setRecordCountPerPage(10); + pageInfo.setTotalRecordCount(0); + assertEquals(0, pageInfo.getTotalPageCount()); + } + + /** + * 정상 입력에 대한 계산 결과가 수정 전과 동일하게 유지되는지 회귀 검증한다. + */ + @Test + public void paginationCalculationRegressionTest() { + PaginationInfo pageInfo = new PaginationInfo(); + pageInfo.setCurrentPageNo(3); + pageInfo.setPageSize(5); + pageInfo.setRecordCountPerPage(10); + pageInfo.setTotalRecordCount(51); + + assertEquals(6, pageInfo.getTotalPageCount()); + assertEquals(1, pageInfo.getFirstPageNoOnPageList()); + assertEquals(5, pageInfo.getLastPageNoOnPageList()); + assertEquals(20, pageInfo.getFirstRecordIndex()); + assertEquals(30, pageInfo.getLastRecordIndex()); + } + }