다음 C 코드에서 `len`은 네트워크 패킷의 32비트 값이다. ```c char buf[256]; if (len + 1 <= sizeof(buf)) { memcpy(buf, src, len); buf[len] = '\0'; } ``` 경계검사를 안전하게 고치는 방법은?
char buf[256]
len은 네트워크의 32비트 부호 없는 값
검사식: len + 1 <= sizeof(buf)
검사 통과 후 memcpy(buf, src, len)
정답 2번
부호 없는 len이 최댓값에 가까우면 `len + 1`이 0으로 순환해 검사를 통과할 수 있다. 덧셈 전 `len < sizeof(buf)`처럼 상한을 직접 비교하고, 패킷에 실제로 존재하는 바이트 수까지 검증해야 범위를 벗어난 읽기·쓰기를 막는다.
콘텐츠 정보
- 자료 유형
- 편집복원
- 검수 상태
- 자동 검사 완료
- 해설 작성·검수
- 정처LAB 자동 검사
- 최종 검수
- 2026-08-23