у меня есть функция
int foo() {
...
char* real_path_buffer = (char*)malloc(sizeof(char)*PATH_MAX);
realpath("a/certain/path/that/doesnt/exist", real_path_buffer);
...
}
Это вызов realpath
в Android bionic.
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
из производственного сценария я получаю segfault при доступе к path2
любым способом (это происходит, когда я просто пытаюсь напечатать его, а также memcpy
к нему).
Я проверил, что программе не не хватает памяти, когда происходит segfault (сделав вызов malloc и убедившись, что он возвращает не NULL
), но вы можете быть уверены, что этот вызов происходит на довольно большом стеке.
Я также проверил, что в менее интенсивных путях кода realpath
точно возвращает NULL
без ошибок сегментации.
У кого-нибудь есть идеи, почему это происходит?
realpath
. - person user3386109   schedule 19.02.2015char *
, чтобы получить глубину стека в байтах. - person user3386109   schedule 19.02.2015