我对 C 编码相当陌生,我有一个任务是在基本的 C 程序上运行 libFuzzer 以利用问题并修复它们。这是我的 C 程序(它需要一个字符串输入并将“&”更改为“&”,将“>”更改为“>”,将“<”更改为“<”):
char *checkString(char str[50]) {
int i;
char *newstr;
newstr = (char *)malloc(200);
for (i = 0; i < strlen(str); i++) {
if (str[i] == '&') {
const char *ch = "&";
strncat(newstr, ch, 4);
} else if (str[i] == '<') {
const char *ch = "<";
strncat(newstr, ch, 3);
} else if (str[i] == '>') {
const char *ch = ">";
strncat(newstr, ch, 3);
} else {
const char ch = str[i];
strncat(newstr, &ch, 1);
}
}
return newstr;
}
这是来自 libFuzzer 的错误消息:
SUMMARY: AddressSanitizer: heap-buffer-overflow (/path/to/a.out+0x50dc14) in strncat
谁知道如何解决这个堆缓冲区溢出问题?谢谢!