Accommodate POSIX basename(3) that takes a non-const parameter and
may in fact modify the string buffer.

ok?

Index: usr.bin/rcs/rlog.c
===================================================================
RCS file: /cvs/src/usr.bin/rcs/rlog.c,v
retrieving revision 1.74
diff -u -p -r1.74 rlog.c
--- usr.bin/rcs/rlog.c  16 Oct 2016 13:35:51 -0000      1.74
+++ usr.bin/rcs/rlog.c  14 Oct 2020 20:18:55 -0000
@@ -28,6 +28,7 @@
 #include <ctype.h>
 #include <err.h>
 #include <libgen.h>
+#include <limits.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -348,7 +349,7 @@ rlog_select_daterev(RCSFILE *rcsfile, ch
 static void
 rlog_file(const char *fname, RCSFILE *file)
 {
-       char numb[RCS_REV_BUFSZ];
+       char fnamebuf[PATH_MAX], numb[RCS_REV_BUFSZ];
        u_int nrev;
        struct rcs_sym *sym;
        struct rcs_access *acp;
@@ -364,7 +365,10 @@ rlog_file(const char *fname, RCSFILE *fi
        } else
                nrev = file->rf_ndelta;
 
-       if ((workfile = basename(fname)) == NULL)
+       if (strlcpy(fnamebuf, fname, sizeof(fnamebuf)) >= sizeof(fnamebuf))
+               errx(1, "rlog_file: truncation");
+
+       if ((workfile = basename(fnamebuf)) == NULL)
                err(1, "basename");
 
        /*
-- 
Christian "naddy" Weisgerber                          na...@mips.inka.de

Reply via email to