Fix a getcwd(3) bug and make our tests run correctly under valgrind.
The getcwd(3) bug was found by valgrind.
Bug: 7291287
Change-Id: I59f3bff1c1392a408b905934eebcd5d894d37492
diff --git a/libc/bionic/getcwd.cpp b/libc/bionic/getcwd.cpp
index 2ff22db..47c807f 100644
--- a/libc/bionic/getcwd.cpp
+++ b/libc/bionic/getcwd.cpp
@@ -40,22 +40,23 @@
// Allocate a buffer if necessary.
char* allocated_buf = NULL;
+ size_t allocated_size = size;
if (buf == NULL) {
- size_t allocated_size = size;
if (size == 0) {
// The Linux kernel won't return more than a page, so translate size 0 to 4KiB.
// TODO: if we need to support paths longer than that, we'll have to walk the tree ourselves.
- size = getpagesize();
+ allocated_size = getpagesize();
}
buf = allocated_buf = static_cast<char*>(malloc(allocated_size));
if (buf == NULL) {
- // malloc set errno.
+ // malloc should set errno, but valgrind's malloc wrapper doesn't.
+ errno = ENOMEM;
return NULL;
}
}
// Ask the kernel to fill our buffer.
- int rc = __getcwd(buf, size);
+ int rc = __getcwd(buf, allocated_size);
if (rc == -1) {
free(allocated_buf);
// __getcwd set errno.
diff --git a/tests/dlopen_test.cpp b/tests/dlopen_test.cpp
index c41c5e6..2fcfa0c 100644
--- a/tests/dlopen_test.cpp
+++ b/tests/dlopen_test.cpp
@@ -88,7 +88,7 @@
uintptr_t start = strtoul(line, 0, 16);
line[strlen(line) - 1] = '\0'; // Chomp the '\n'.
char* path = strchr(line, '/');
- if (strcmp(executable_path, path) == 0) {
+ if (path != NULL && strcmp(executable_path, path) == 0) {
base_address = reinterpret_cast<void*>(start);
break;
}