다음을 통해 공유


오류: strncat-param-overlap

삭제자 오류 해결: strncat-param-overlap

겹치는 버퍼에서 메모리를 이동하는 코드는 진단하기 어려운 오류를 일으킬 수 있습니다.

예시

이 예제에서는 AddressSanitizer가 CRT 함수에 겹친 매개 변수로 인한 오류를 catch하는 방법을 보여 줍니다.

(llvm-project/compiler-rt/test/asan/TestCases/strncat-overlap.cpp 기반)

// example1.cpp
// strncat-param-overlap error
#include <string.h>

void bad_function() {
    char buffer[] = "hello\0XXX";
    strncat(buffer, buffer + 1, 3); // BOOM
    return;
}

int main(int argc, char **argv) {
    bad_function();
    return 0;
}

이 예제를 빌드하고 테스트하려면 Visual Studio 2019 버전 16.9 이상 개발자 명령 프롬프트에서 다음 명령을 실행합니다.

cl example1.cpp /fsanitize=address /Zi
devenv /debugexe example1.exe

결과 오류

예제 1에서 strncat-param-overlap 오류를 표시하는 디버거의 스크린샷

참고 항목

AddressSanitizer 개요
AddressSanitizer 알려진 문제
AddressSanitizer 빌드 및 언어 참조
AddressSanitizer 런타임 참조
AddressSanitizer 섀도 바이트
AddressSanitizer 클라우드 또는 분산 테스트
AddressSanitizer 디버거 통합
AddressSanitizer 오류 예제