설명
외부 입력을 정수 나눗셈의 분모로 쓰면서 0 여부를 확인하지 않으면 정의되지 않은 동작이 발생하며, 프로그램이 중단될 수 있습니다.
잠재적 영향
- 프로세스 중단이나 반복되는 요청 실패로 서비스 거부가 발생할 수 있습니다.
해결 방법
나눗셈 전에 분모가 0이 아니며 허용 범위 안에 있는지 확인하세요. 숫자 입력의 형식과 변환 오류도 확인하세요.
예시
변경 전
c
int divisor = atoi(argv[1]);
int result = 100 / divisor;
변경 후
c
int divisor = atoi(argv[1]);
if (divisor == 0) { return; }
int result = 100 / divisor;
설명:
- 변경 전: 사용자 입력을 분모로 사용하지만 0 검사가 없습니다.
- 변경 후: 0 값을 거부한 뒤에만 나눗셈을 수행합니다. 이 발췌는 0 검사만 비교합니다. 실제 입력 처리에서는 인자 존재 여부를 확인하고,
atoi대신 오류와 범위를 확인할 수 있는strtol등의 변환을 사용하세요.