다음 C 코드의 실행 환경에서 unsigned int는 32비트이며, len은 패킷에서 읽어 초기화한 unsigned int 변수이다. src는 실제 수신 데이터를 가리킨다. 경계검사를 안전하게 고치는 방법은? ```c char buf[256]; if (len + 1 <= sizeof(buf)) { memcpy(buf, src, len); buf[len] = '\0'; } ```
unsigned int는 32비트이며 len의 형식은 unsigned int이다.
buf는 256바이트이고 문자열 끝의 널 문자 한 자리도 필요하다.
src에 실제로 수신된 바이트 수는 별도로 확인할 수 있다.
정답 2번
32비트 부호 없는 len이 최댓값이면 len+1이 0으로 순환해 기존 검사를 통과할 수 있다. 덧셈 없이 len<256을 확인하면 복사 뒤 기록할 널 문자 한 자리도 확보된다. 동시에 len이 src에 실제로 수신된 바이트 수 이하여야 원본 범위를 벗어나 읽지 않는다. 예를 들어 len=100인데 수신 데이터가 50바이트라면 목적지에는 들어가더라도 복사를 거부해야 한다.
콘텐츠 정보
출제범위 기반 실전 연습을 위해 정처LAB이 독립 제작했습니다. 표시 연도는 학습 범위의 맥락이며 특정 시행 회차의 출제문항이나 복원 원문을 뜻하지 않습니다.
- 자료 유형
- 정처LAB 자체 제작
- 검수 상태
- 내용 검수 완료
- 해설 작성·검수
- 정처LAB 편집 기준
- 최종 검수
- 2026-09-04