【C言語】
バッファオーバーフロー
(buffer overflow)の見つけ方

ERROR: AddressSanitizer: stack-buffer-overflow on address

[gcc -fsanitize=addres]
[gcc -Wall -Wextra -O3]


■バッファオーバーフローのバグ例

#include <stdio.h>
#include <string.h>
void buffer_overflow(char* input) {
    char buffer[5];
    strcpy(buffer, input);// バッファオーバーフローが発生する可能性がある
    puts(buffer);
}
int main(void) {
    char    *jugemu = "寿限無寿限無五劫のすり切れ海砂利水魚の水行末雲来末風来末~~~";
    buffer_overflow(jugemu);
}

この問題は以下のオプションで検出できます。

gcc -fsanitize=address    最適化すると検出できなくなる
gcc -Wall -Wextra -O3で   最適化しないと検出できない

参考:

汝が
“foo”とタイプするところで
“supercalifragilisticexpialidocious”とタイプする者が、
いつの日か必ずいるからである