From b7fb3a58e7ec12987706fd52f5361a944ddc1da8 Mon Sep 17 00:00:00 2001 From: Michael Forney Date: Tue, 27 Dec 2016 13:48:31 +0100 Subject: [PATCH] xinstall: Fix broken memmove with -t memmove moves a number of bytes, not pointers, so if you passed a number of arguments that is larger than the pointer byte size, you could end up crashing or skipping the install of a file and installing another twice. Also, argv was never decreased to match the moved arguments, so the -t parameter was added in the NULL argv slot. --- xinstall.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xinstall.c b/xinstall.c index 70d7097..38636f1 100644 --- a/xinstall.c +++ b/xinstall.c @@ -219,7 +219,7 @@ main(int argc, char *argv[]) mode = parsemode(mflag, mode, 0); if (tflag) { - memmove(argv - 1, argv, argc); + argv = memmove(argv - 1, argv, argc * sizeof(*argv)); argv[argc++] = tflag; } if (tflag || argc > 2) {