Files
Sun1602/ProgramCommon/NOTICE_String_Process.txt
2022-10-26 12:25:11 +08:00

63 lines
1.8 KiB
Plaintext

========================================================================
!!! 클라이언트 스트링 처리 관련 주의 사항. !!!
- 오버런 문제.
작성일 : 오후 6:26 2006-05-30
작성자 : 유재영
NOTE : 잘못된 내용이 있다면 수정/보완 부탁 드립니다.
========================================================================
1. 개요
스트링 혹은 스트림 카피 부분에서 메모리 Overrun 이 발생하여
클라이언트가 크레쉬 될 수 있는 위험이 잠재해 있습니다.
2. 처리 방법
- 함수 사용
Sprintf -> Snprintf
strcpy -> _strncpy
Snprintf 는 메크로 이며 유니코드로 변환 했을때 지원가능한 함수로
메칭해 두었습니다.
이 함수는 NULL 종료자가 없더라도 크레쉬가 나지 않도록 특정 사이즈만큼의
스트링을 만들어 줍니다.
_strncpy은 Utility 프로젝트에 safe_String.h/cpp 에 정의 되어있습니다.
- 사이즈 관련 처리
멕스 사이즈 에 + 1을 한다음 초기화 후 정보를 특정 사이즈 만큼만 복사한다.
ex)
TCHAR szTest[MAX_SIZE+1];
ZeroMemroy(szTest, MAX_SIZE+1);
Snprintf(szTest, MAX_SIZE, "%s %d", param1, param2 );
//or
_strncpy(szTest, 특정 스트링, MAX_SIZE );
3. 관리
결과적으로 클라이언트에서 쓰는 스트링 관련 변수는 배열을 직접 사용하는것보다는
특정 배열로 받아진 스트링 정보를 std::_tstring 을 이용해서 사용하고
외부에선 해당 스트링을 직접 사용하기보다는 GetName(), SetName() 함수와 짝을 이뤄서
사용하는 편이 관리적으로 좋을듯 합니다.
#define SUNSTRING util::_tstring
const SUNSTRING & GetName() const;
const TCHAR * GetName() const;
void SetName( SUNSTRING & rStrName );
void SetName( const TCHAR * pszName );
!! 위 사항은 모두 알고 있는 내용이라 생각 됩니다.
허무하게 메모리 오버런을 양산하지 않으려면 위의 사항을
지켜주시기 바랍니다. 저도 조심 하겠습니다.
--> 추가작업은 물론이거니와 이전 코드도 위의 내용으로 수정작업을 진행 해야합니다.