From 1b1693e6ff84dd19b7c5f30f2d4e3b7464456fc9 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Mon, 20 Jan 2014 17:17:58 +0100 Subject: [PATCH] libc: 'readlink' returns non-zero terminated buffer Make so to handle zero termination correctly for 'stat' calls and for debugging output. Issue #1048 --- libports/src/lib/libc/file_operations.cc | 5 ++++- libports/src/lib/libc_fs/plugin.cc | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/libports/src/lib/libc/file_operations.cc b/libports/src/lib/libc/file_operations.cc index db12c28f4..e4383c5cb 100644 --- a/libports/src/lib/libc/file_operations.cc +++ b/libports/src/lib/libc/file_operations.cc @@ -205,10 +205,13 @@ static void resolve_symlinks(char const *path, Absolute_path &resolved_path) PDBGV("found symlink: %s", next_iteration_working_path.base()); FNAME_FUNC_WRAPPER_GENERIC(res = , readlink, next_iteration_working_path.base(), - symlink_target, sizeof(symlink_target)); + symlink_target, sizeof(symlink_target) - 1); if (res < 1) throw Symlink_resolve_error(); + /* zero terminate target */ + symlink_target[res] = 0; + if (symlink_target[0] == '/') /* absolute target */ next_iteration_working_path.import(symlink_target, cwd().base()); diff --git a/libports/src/lib/libc_fs/plugin.cc b/libports/src/lib/libc_fs/plugin.cc index b69dcafa7..0efaf9f33 100644 --- a/libports/src/lib/libc_fs/plugin.cc +++ b/libports/src/lib/libc_fs/plugin.cc @@ -659,7 +659,8 @@ class Plugin : public Libc::Plugin ssize_t result = read(fd, buf, bufsiz); if (verbose) - PDBG("result = %zd, buf = %s", result, buf); + PDBG("result = %zd, buf = %s", result, buf[result] ? + "" : buf); close(fd); return result;