gpt4 book ai didi

c - C 中 va_list 可能存在缓冲区溢出漏洞?

转载 作者:太空狗 更新时间:2023-10-29 15:09:59 25 4
gpt4 key购买 nike

我有以下代码:

int ircsocket_print(char *message, ...)
{
char buffer[512];
int iError;
va_list va;
va_start(va, message);
vsprintf(buffer, message, va);
va_end(va);
send(ircsocket_connection, buffer, strlen(buffer), 0);
return 1;
}

而且我想知道这段代码是否容易通过向变量列表提供大小大于 512 的字符数组而导致缓冲区溢出?如果是这样 - 我该如何解决这个问题?

谢谢。

最佳答案

是的,它很脆弱。

您可以这样实现您的功能:

int ircsocket_print(char *message, ...)
{
char buf[512];
char *buffer;
int len;
va_list va;

buffer = buf;
va_start(va, message);
len = vsnprintf(buffer, 512, message, va);
va_end(va);

if (len >= 512)
{
buffer = (char*)malloc(len + 1);
va_start(va, message);
len = vsnprintf(buffer, len + 1, message, va);
va_end(va);
}

send(ircsocket_connection, buffer, len, 0);

if (buffer != buf)
free(buffer);
return 1;
}

关于c - C 中 va_list 可能存在缓冲区溢出漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7215921/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com