如何使用IF..Statement使缓冲区溢出使代码安全

时间:2017-04-21 16:41:17

标签: c

#include <string.h>

void foo (char *bar)
{
    char  c[12];

    strcpy(c, bar);  // no bounds checking
}

int main (int argc, char **argv)
{
    foo(argv[1]);

    return 0;
}

3 个答案:

答案 0 :(得分:2)

另一个 ACTUAL 选项:

void foo (char *bar)
{
    char c[12];

    snprintf(c, sizeof c, "%s", bar);
}

函数strncpy无法确保结果字符串被NULL character终止,因此您可以拥有bad resulting string.

答案 1 :(得分:0)

检查bar的长度是否小于length of c

<强>码

#include <string.h>

void foo (char *bar)
{
    char  c[12];
    if ( strlen( bar ) < sizeof c ) {
      printf("avoiding buffer overflow");
      strcpy( c, bar );
    }
}

int main (int argc, char **argv)
{
    foo(argv[1]);

    return 0;
}

答案 2 :(得分:-1)

我安全了。否则,它与原始应用程序完全相同,即:没有。

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