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