반응형
strncat_safe(3)
char *strncat_safe(char *dest, size_t dest_size, const char *src, size_t src_len)
strncat(3)함수는 buffer overflow를 유발할 수 있어서, 보안 취약함수로 정의되어 있습니다. 보안 취약 함수로 지정된 이유는 dest의 buffer 크기보다 dest와 src의 문자열을 합친 것이 크면 제어하는 방법이 없는 함수이기 때문입니다. 그래서 큰 규모의 프로젝트에서는 대체로 사용금지 함수로 지정되어 있습니다.
일부 UNIX에서는 snprintf(dest, sizeof(dest), "%s%.*s", dest, src_len, src);와 같이 사용할 수 있습니다만, LINUX에서는 오류가 발생합니다.
이 결과는 snprintf(dest, sizeof(dest), "%.*s", src_len, src);와 같습니다.
따라서 strncat(3)를 대체할 표준함수로 없기 때문에 별도로 만들어 사용해야 합니다.
파라미터
dest
- 문자열을 붙여서 저장할 저장소
dest_size
- dest에 할당된 buffer의 크기
src
- 문자열에 추가할 데이터
src_len
- 문자열에 추가할 최대 길이
RETURN
dest
- dest 문자열이 그대로 return 됩니다.
Source 구현
strncat_safe 소스
#include <stdio.h>
#include <string.h>
char *strncat_safe(char *dest, size_t dest_size, const char *src, size_t src_len)
{
int dest_len = strlen(dest);
if(dest_len >= dest_size) {
return dest;
}
snprintf(dest + dest_len, dest_size - dest_len, "%.*s", (int)src_len, src);
return dest;
}
strncat_safe( ) 사용 예제
#include <stdio.h>
#include <string.h>
......
int main(int argc, char **argv)
{
char dest[40];
char src[15];
......
strncat_safe(dest, sizeof(dest), src, sizeof(src));
......
}
반응형
'C언어 응용 > 활용' 카테고리의 다른 글
getch( ), getche( ) 대체 함수 구현 (LINUX용) (0) | 2019.11.03 |
---|---|
snprintf(3)의 기능 대체 함수 구현 (0) | 2019.10.07 |
strcat(3) - 대체 함수 구현 (0) | 2019.10.04 |
log 생성 API 구현 (0) | 2019.10.04 |
copy_file( ) - 원본 파일의 속성까지 복사하기 (0) | 2019.10.04 |