sbase

suckless unix tools
git clone git://git.2f30.org/sbase
Log | Files | Refs | README | LICENSE

commit b7fb3a58e7ec12987706fd52f5361a944ddc1da8
parent 87f40834a329f4f526fd17b1be36c75da0323573
Author: Michael Forney <mforney@mforney.org>
Date:   Tue, 27 Dec 2016 13:48:31 +0100

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.

Diffstat:
Mxinstall.c | 2+-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git 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) {