diff --git a/src/unix/linux-core.c b/src/unix/linux-core.c index 3452dadb6..d77b13fd6 100644 --- a/src/unix/linux-core.c +++ b/src/unix/linux-core.c @@ -381,7 +381,10 @@ int uv_exepath(char* buffer, size_t* size) { if (buffer == NULL || size == NULL || *size == 0) return -EINVAL; - n = readlink("/proc/self/exe", buffer, *size - 1); + n = *size - 1; + if (n > 0) + n = readlink("/proc/self/exe", buffer, n); + if (n == -1) return -errno; diff --git a/test/test-get-currentexe.c b/test/test-get-currentexe.c index c6091ff75..0e9d69654 100644 --- a/test/test-get-currentexe.c +++ b/test/test-get-currentexe.c @@ -73,5 +73,14 @@ TEST_IMPL(get_currentexe) { ASSERT(size == 0); ASSERT(buffer[0] == '\0'); + memset(buffer, -1, sizeof(buffer)); + + size = 2; + r = uv_exepath(buffer, &size); + ASSERT(r == 0); + ASSERT(size == 1); + ASSERT(buffer[0] != '\0'); + ASSERT(buffer[1] == '\0'); + return 0; }