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);

    ......

}

 

블로그 이미지

사용자 자연&사람

행복한 개발자 programmer since 1995.

Tag , , ,

댓글을 달아 주세요