본문 바로가기
Language & Library/etc

[C++] memory safety한 mysql_real_escape_string 래핑 함수

by 미네마네모 2020. 3. 5.

동적 할당을 이용한 mysql_real_escape_string 래핑 함수

char* Convert(const char* str) {
    // 모든 문자열이 escape 문자가 추가될 수 있으니 x2, 널문자를 위한 +1
    int size = sizeof(str) * 2 + 1;
    char *convert = new char[size];
    std::string ret = "";

    memset(convert, 0x00, size);
    
    mysql_real_escape_string(db, convert, str, sizeof(str));
    ret = convert;
        
    delete [] convert;
    
    return ret.c_str();
}

메모리를 할당할때는 Memory Safety 한지 확인이 필요하다!!!

생각 없이 source 문자열이 모두 escape 문자가 추가될걸 고려하지 않고 메모리 할당하면 큰일 난다.

Vector를 이용한 mysql_real_escpae_string 래핑 함수

 

std::string Convert(const std::string str) {
    if (str.empty())
        return "";

    int size = data.length();
    
    // 모든 문자열이 escape 문자가 추가될 수 있으니 x2, 널문자를 위한 +1
    std::vector<char> convert((size * 2) + 1, '\0');
    
    mysql_real_escape_string(db, convert.data(), data.c_str(), size);
    
    return convert.data();
}

Vector도 마찬가지! 컨테이너라고 쉽게 생각했다가 vector의 사이즈 설정할때 실수할 수 있다.

 

댓글