Skip to content

fix: EgovDateUtil.getDayOfWeekCount 미인식 요일 입력 시 무한 루프 방지#250

Open
z3rotig4r wants to merge 1 commit into
eGovFramework:mainfrom
z3rotig4r:fix/dateutil-dayofweekcount-infinite-loop
Open

fix: EgovDateUtil.getDayOfWeekCount 미인식 요일 입력 시 무한 루프 방지#250
z3rotig4r wants to merge 1 commit into
eGovFramework:mainfrom
z3rotig4r:fix/dateutil-dayofweekcount-infinite-loop

Conversation

@z3rotig4r

Copy link
Copy Markdown
Contributor

변경 이유

EgovDateUtil.getDayOfWeekCount(from, to, yoil)에 유효 요일 집합 {일, 월, 화, 수, 목, 금, 토} 밖의 yoil 값이 들어오면 무한 루프가 발생합니다.

while (!sYoil[(dayOfWeek - 1) % 7].equals(yoil)) {
    dayOfWeek++;
}

(dayOfWeek - 1) % 7 인덱스는 0~6만 순환하므로, yoil이 어떤 요일과도 일치하지 못하면 dayOfWeek는 무한히 증가하지만 루프는 빠져나오지 못합니다. 영문 입력("Mon"), 길이 2 입력("월요"), 빈 문자열, 3자리 오타, null 등이 이에 해당합니다. 기존 line 418의 정규화는 길이 3("X요일") 형태만 처리하고 입력 검증은 없습니다.

해당 메서드는 public static이고 호출 가드가 없어 외부에서 임의의 요일 문자열을 전달할 수 있습니다. 미인식 입력 시 CPU 100% 점유로 이어지는 무한 루프(DoS)가 발생합니다.

변경 내용

  • 요일 정규화 직후 유효 요일 여부를 사전 검증합니다.
  • 미인식 또는 null 입력이면 IllegalArgumentException을 던지며, 허용 요일을 메시지에 명시합니다.
  • 기존 while 루프 로직은 변경하지 않아 유효 입력 경로의 동작을 그대로 보존합니다.

테스트 방법

  • 미인식 입력 5종(영문, 길이 2, 빈 문자열, 3자리 오타, null)에 대해 assertThrows(IllegalArgumentException) 검증을 추가했습니다.
  • 무한 루프 회귀를 막기 위해 @Timeout을 적용했습니다.
  • 기존 유효 요일 테스트를 포함해 org.egovframe.rte.fdl.string 모듈 47개 테스트가 모두 통과합니다.

영향 범위

  • 변경 전에는 미인식 yoil이 무한 루프였으므로, 미인식 값으로 정상 결과를 받던 호출자는 존재할 수 없습니다. 따라서 기존 동작과의 호환성은 깨지지 않습니다.
  • 유효 요일 입력에 대한 반환 결과는 변경되지 않습니다.

유효 요일집합(일~토) 밖의 yoil이나 null이 들어오면 while 루프가
영원히 종료되지 않아 무한루프(DoS)에 빠지는 문제를 수정한다.
정규화 후 요일을 검증하여 미인식 시 IllegalArgumentException을 던진다.
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