我有一个功能
int foo() {
...
char* real_path_buffer = (char*)malloc(sizeof(char)*PATH_MAX);
realpath("a/certain/path/that/doesnt/exist", real_path_buffer);
...
}
在Android bionic中调用realpath
char* realpath(const __restrict char*, __restrict char*){
char path1[PATH_MAX], path2[PATH_MAX], path3[PATH_MAX];
...
path1 = something_valid; //recall, this is a library function
...
memcpy(path2, path1, a_valid_size);
...
}
当从类似生产的场景中将某条不存在的路径传递给realpath
时,我会以任何方式访问path2
时出现段错误(当我只是尝试打印它时会发生这种情况作为memcpy
。
我已经验证了当发生segfault时程序没有内存不足(通过调用malloc并验证它的返回不是NULL
)但是你可以确信这个调用是在一个公平的堆叠很大。
我还验证了在不太强烈的代码路径中,realpath
会准确地返回NULL
而不会出现分段错误。
有没有人知道为什么会这样?
答案 0 :(得分:0)
我无法完全验证这一点,但我相信这是一个堆栈溢出。