Skip to content

fix: PaginationInfo 0 분모 나눗셈 예외(/ by zero) 방지 가드 추가#253

Open
z3rotig4r wants to merge 1 commit into
eGovFramework:mainfrom
z3rotig4r:fix/pagination-divide-by-zero
Open

fix: PaginationInfo 0 분모 나눗셈 예외(/ by zero) 방지 가드 추가#253
z3rotig4r wants to merge 1 commit into
eGovFramework:mainfrom
z3rotig4r:fix/pagination-divide-by-zero

Conversation

@z3rotig4r

Copy link
Copy Markdown
Contributor

변경 이유

PaginationInfo.getTotalPageCount()((getTotalRecordCount() - 1) / getRecordCountPerPage()) + 1을 계산합니다(PaginationInfo.java:122 부근). recordCountPerPage는 plain int 필드이며 public 세터로 외부에서 설정되는데, 미설정 시 기본값이 0이라 분모가 0이 되어 정수 나눗셈에서 ArithmeticException: / by zero가 발생합니다.

getFirstPageNoOnPageList()도 동일하게 ((getCurrentPageNo() - 1) / getPageSize()) * getPageSize() + 1에서 pageSize == 0이면 같은 예외가 발생합니다(PaginationInfo.java:139 부근).

필드가 plain int이고 public 세터로 노출되어 있어, 세터를 호출하지 않은 인스턴스가 그대로 사용되는 미설정 상태에 도달 가능합니다.

변경 내용

  • getTotalPageCount(): recordCountPerPage <= 0 또는 totalRecordCount <= 0이면 totalPageCount = 0을 반환하도록 가드를 추가했습니다(페이지 없음).
  • getFirstPageNoOnPageList(): pageSize <= 0이면 firstPageNoOnPageList = 1을 반환하도록 가드를 추가했습니다(첫 페이지).
  • 정상 입력(분모 > 0)에서는 기존 계산식과 결과가 동일하며, 0/음수 분모에서만 예외 대신 안전한 폴백을 반환합니다.

테스트 방법

PaginationTest에 버그 재현 및 회귀 테스트를 추가했습니다.

  • 수정 전: recordCountPerPage == 0에서 getTotalPageCount()가, pageSize == 0에서 getFirstPageNoOnPageList()가 각각 ArithmeticException을 던지는 것을 재현합니다.
  • 수정 후: 동일 입력에서 예외 없이 폴백 값(0, 1)을 반환합니다.
  • 정상 입력에서 페이지 수·첫 페이지 번호 계산 결과가 변하지 않음을 함께 검증합니다(총 4건).

영향 범위

  • 대상: org.egovframe.rte.ptl.mvc.tags.ui.pagination.PaginationInfogetTotalPageCount, getFirstPageNoOnPageList.
  • public 메서드 시그니처 변경 없음. 정상 입력 결과 불변이므로 기존 페이징 동작과 하위 호환됩니다.
  • 외부 의존성·설정 변경 없음.

recordCountPerPage 또는 pageSize 가 미설정(기본값 0)일 때 getTotalPageCount(),
getFirstPageNoOnPageList() 에서 발생하던 '/ by zero' ArithmeticException 을
안전 폴백으로 회피한다. totalRecordCount 가 0 이면 페이지 수는 0 으로 반환한다.
정상 입력에 대한 계산 결과는 변경되지 않는다.

- getTotalPageCount(): recordCountPerPage<=0 또는 totalRecordCount<=0 이면 0 반환
- getFirstPageNoOnPageList(): pageSize<=0 이면 1 반환
- PaginationTest 에 경계값(0 분모)·회귀 테스트 추가
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant