]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
rename: use readlink() in more robust way
authorKarel Zak <kzak@redhat.com>
Thu, 17 Jun 2021 11:25:43 +0000 (13:25 +0200)
committerKarel Zak <kzak@redhat.com>
Thu, 17 Jun 2021 11:25:43 +0000 (13:25 +0200)
Reported-by: Jan Pazdziora <jpazdziora@redhat.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
misc-utils/rename.c

index 0f0d883224a9ec60fe229d7b8a0c78dd77d32690..fbabfe2841b66565e9c530318fd6804cd5f20465 100644 (file)
@@ -105,6 +105,7 @@ static int do_symlink(char *from, char *to, char *s, int verbose, int noact,
 {
        char *newname = NULL, *target = NULL;
        int ret = 1;
+       ssize_t ssz;
        struct stat sb;
 
        if ( faccessat(AT_FDCWD, s, F_OK, AT_SYMLINK_NOFOLLOW) != 0 &&
@@ -125,12 +126,15 @@ static int do_symlink(char *from, char *to, char *s, int verbose, int noact,
                return 2;
        }
        target = xmalloc(sb.st_size + 1);
-       if (readlink(s, target, sb.st_size + 1) < 0) {
+
+       ssz = readlink(s, target, sb.st_size + 1);
+       if (ssz < 0) {
                warn(_("%s: readlink failed"), s);
                free(target);
                return 2;
        }
-       target[sb.st_size] = '\0';
+       target[ssz] = '\0';
+
        if (string_replace(from, to, target, target, &newname) != 0)
                ret = 0;