티스토리 뷰

반응형

 

 

 

가. 원인

  - 재귀함수의 순환횟수를 제어하지 않아 자원을 과다하게 사용하는 경우

 

 

나. 영향

  - 귀납조건 없이 재귀함수를 호출하여 무한루프에 빠짐

  - 자원고갈을 유발하여 정상 서비스 불가

 

 

다. 보안대책

  - 재귀함수 사용 시 호출횟수를 제한

 

 

라. 안전한 코드

1. 재귀함수 종료조건

 

  int factorial( int num ) {

     // 팩토리얼 계산을 위한 재귀함수의 종료조건 적용

     if ( num <= 1 ){

        return 1;

     }

     return num * factorial( num - 1 );

  }

 

 

 

마. 진단방법

<재귀함수 종료조건 확인>

  1. 재귀함수의 사용여부를 확인

  2. 재귀함수 내의 제어문을 통해 종료가 가능한지 확인

 

 

바. 정/오탐 케이스

<정탐 케이스>

  1. 함수명, 파라미터 갯수, 파라미터 자료형이 일치하는 자신을 호출하는 경우

 

<오탐 케이스>

  1. 재귀함수가 아닌 다른 종류의 파라미터 갯수, 파라미터 자료형의 동일 함수를 호출할 경우

  2. 제어조건이 존재하여 제어가 되는 재귀인 경우

반응형
댓글
반응형
최근에 올라온 글
Total
Today
Yesterday