rem: strncat(buff, argv[i], strlen(argv[i]));
add: strlcat(buff, argv[i], sizeof(buff));
context: void write_batch_argvs_file(int orig_argc, int argc, char **argv){	int fdb;	int i;	char buff[256];	strcat(rsync_argvs_file, batch_file_ext);	/* Open batch argvs file for writing; create it if it doesn't exist */	fdb = do_open(rsync_argvs_file, O_WRONLY | O_CREAT | O_TRUNC,		      S_IREAD | S_IWRITE | S_IEXEC);	if (fdb == -1) {		rprintf(FERROR, "Batch file %s open error: %s\n",			rsync_argvs_file, strerror(errno));		close(fdb);		exit_cleanup(1);	}	buff[0] = '\0';	/* Write argvs info to batch file */	for (i = argc - orig_argc; i < argc; i++) {		/* FIXME: This apparently crashes if rsync is run with		 * just "rsync -F".  I think directly manipulating		 * argv[] is probably bogus -- what if -F is part of a		 * run of several short options? */		if (!strcmp(argv[i], "-F")) {	/* safer to change it here than script */			strncat(buff, "-f ", 3);	/* chg to -f + ext to get ready for remote */			strncat(buff, batch_file_ext,				strlen(batch_file_ext));		} else {			strncat(buff, argv[i], strlen(argv[i]));		}		if (i < (argc - 1)) {			strncat(buff, " ", 1);		}	}	if (!write(fdb, buff, strlen(buff))) {		rprintf(FERROR, "Batch file %s write error: %s\n",			rsync_argvs_file, strerror(errno));		close(fdb);		exit_cleanup(1);	}	close(fdb);}