diff --git a/src/lua/fio.lua b/src/lua/fio.lua
index 9f6b10d92fa7efefd86f443c2c1862829b144aa0..ee6d46bae1155914e2834bf7bdf0a89f6218815b 100644
--- a/src/lua/fio.lua
+++ b/src/lua/fio.lua
@@ -210,7 +210,7 @@ fio.dirname = function(path)
         return nil
     end
     path = tostring(path)
-    path = ffi.new('char[?]', #path, path)
+    path = ffi.new('char[?]', #path + 1, path)
     return ffi.string(ffi.C.dirname(path))
 end
 
diff --git a/src/util.cc b/src/util.cc
index 0e2165f650e39cdb0492e1180e2f25b298b6ba1d..574f6c5b7aac97db14ec6b44041c0778c3c0c3db 100644
--- a/src/util.cc
+++ b/src/util.cc
@@ -364,7 +364,7 @@ abspath(const char *filename)
 	if (filename[0] == '/')
 		return strdup(filename);
 
-	char *abspath = (char *) malloc(PATH_MAX);
+	char *abspath = (char *) malloc(PATH_MAX + 1);
 	if (abspath == NULL)
 		return NULL;
 
diff --git a/third_party/proctitle.c b/third_party/proctitle.c
index 92eca759c18e194448481049a1b38fa0f4e0406d..2e7009a695646ad54755362735392d02982d1d37 100644
--- a/third_party/proctitle.c
+++ b/third_party/proctitle.c
@@ -220,7 +220,7 @@ init_set_proc_title(int argc, char **argv)
 	ps_buffer_fixed_size = 0;
 #else
 	{
-		char basename_buf[PATH_MAX];
+		char basename_buf[PATH_MAX+1];
 
 		/*
 		 * At least partially mimic FreeBSD, which for
@@ -228,7 +228,7 @@ init_set_proc_title(int argc, char **argv)
 		 *
 		 * a.out: custom title here (a.out)
 	         */
-		snprintf(basename_buf, sizeof basename_buf, "%s", argv[0]);
+		snprintf(basename_buf, PATH_MAX, "%s", argv[0]);
 		snprintf(ps_buffer, ps_buffer_size, "%s: ", basename(basename_buf));
 	}