From 976338f84c1ddfd3f7a284c27eb13a40f925f3e9 Mon Sep 17 00:00:00 2001 From: Andrea Mazzoleni Date: Tue, 12 Dec 2017 00:01:25 +0100 Subject: [PATCH] Use a more explicit check on readlink result This should help the static analyzer to understand the code. --- cmdline/pool.c | 2 +- cmdline/unix.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cmdline/pool.c b/cmdline/pool.c index 6cbd83fe..44e35107 100644 --- a/cmdline/pool.c +++ b/cmdline/pool.c @@ -247,7 +247,7 @@ static void read_dir(tommy_hashdyn* poolset, const char* base_dir, const char* s int ret; ret = readlink(path_next, linkto, sizeof(linkto)); - if (ret < 0 || ret == sizeof(linkto)) { + if (ret < 0 || ret >= PATH_MAX) { /* LCOV_EXCL_START */ log_fatal("Error in readlink symlink '%s'. %s.\n", path_next, strerror(errno)); exit(EXIT_FAILURE); diff --git a/cmdline/unix.c b/cmdline/unix.c index 81011119..cf3f1627 100644 --- a/cmdline/unix.c +++ b/cmdline/unix.c @@ -448,7 +448,7 @@ static int devuuid_dev(uint64_t device, char* uuid, size_t uuid_size) /* resolve the link */ pathprint(path, sizeof(path), "/dev/disk/by-uuid/%s", dd->d_name); ret = readlink(path, buf, sizeof(buf)); - if (ret < 0 || ret == sizeof(buf)) { + if (ret < 0 || ret >= PATH_MAX) { log_tag("uuid:by-uuid:%u:%u: readlink(/dev/disk/by-uuid/%s) failed, %s\n", major(device), minor(device), dd->d_name, strerror(errno)); /* generic error, ignore and continue the search */ continue;