master hovercats/oakiss / pkg / openbsd / patch / 0024-rsync-Avoid-pointer-arithmetic-on-void.patch
  1From 2dc242877741913abaf8685c616406812d507e17 Mon Sep 17 00:00:00 2001
  2From: Michael Forney <mforney@mforney.org>
  3Date: Sat, 15 Jun 2019 20:06:13 -0700
  4Subject: [PATCH] rsync: Avoid pointer arithmetic on `void *`
  5
  6---
  7 usr.bin/rsync/blocks.c     | 12 ++++++------
  8 usr.bin/rsync/downloader.c |  2 +-
  9 usr.bin/rsync/io.c         | 12 ++++++------
 10 usr.bin/rsync/sender.c     |  5 +++--
 11 4 files changed, 16 insertions(+), 15 deletions(-)
 12
 13diff --git a/usr.bin/rsync/blocks.c b/usr.bin/rsync/blocks.c
 14index d1d9b19c31e..9aca8c217a6 100644
 15--- a/usr.bin/rsync/blocks.c
 16+++ b/usr.bin/rsync/blocks.c
 17@@ -163,7 +163,7 @@ blk_find(struct sess *sess, struct blkstat *st,
 18 	if (!recomp) {
 19 		fhash = (st->s1 & 0xFFFF) | (st->s2 << 16);
 20 	} else {
 21-		fhash = hash_fast(st->map + st->offs, (size_t)osz);
 22+		fhash = hash_fast((char *)st->map + st->offs, (size_t)osz);
 23 		st->s1 = fhash & 0xFFFF;
 24 		st->s2 = fhash >> 16;
 25 	}
 26@@ -176,7 +176,7 @@ blk_find(struct sess *sess, struct blkstat *st,
 27 	if (st->hint < blks->blksz &&
 28 	    fhash == blks->blks[st->hint].chksum_short &&
 29 	    (size_t)osz == blks->blks[st->hint].len) {
 30-		hash_slow(st->map + st->offs, (size_t)osz, md, sess);
 31+		hash_slow((char *)st->map + st->offs, (size_t)osz, md, sess);
 32 		have_md = 1;
 33 		if (memcmp(md, blks->blks[st->hint].chksum_long, blks->csum) == 0) {
 34 			LOG4("%s: found matching hinted match: "
 35@@ -209,7 +209,7 @@ blk_find(struct sess *sess, struct blkstat *st,
 36 		    (intmax_t)ent->blk->offs, ent->blk->len);
 37 
 38 		if (have_md == 0) {
 39-			hash_slow(st->map + st->offs, (size_t)osz, md, sess);
 40+			hash_slow((char *)st->map + st->offs, (size_t)osz, md, sess);
 41 			have_md = 1;
 42 		}
 43 
 44@@ -227,7 +227,7 @@ blk_find(struct sess *sess, struct blkstat *st,
 45 	 * block in the sequence.
 46 	 */
 47 
 48-	map = st->map + st->offs;
 49+	map = (char *)st->map + st->offs;
 50 	st->s1 -= map[0];
 51 	st->s2 -= osz * map[0];
 52 
 53@@ -287,7 +287,7 @@ blk_match(struct sess *sess, const struct blkset *blks,
 54 		    blk->len, blk->idx);
 55 		tok = -(blk->idx + 1);
 56 
 57-		hash_file_buf(&st->ctx, st->map + last, sz + blk->len);
 58+		hash_file_buf(&st->ctx, (char *)st->map + last, sz + blk->len);
 59 
 60 		/*
 61 		 * Write the data we have, then follow it with
 62@@ -312,7 +312,7 @@ blk_match(struct sess *sess, const struct blkset *blks,
 63 	LOG4("%s: flushing %s %jd B", path,
 64 	    last == 0 ? "whole" : "remaining", (intmax_t)sz);
 65 
 66-	hash_file_buf(&st->ctx, st->map + last, sz);
 67+	hash_file_buf(&st->ctx, (char *)st->map + last, sz);
 68 
 69 	st->total += sz;
 70 	st->dirty += sz;
 71diff --git a/usr.bin/rsync/downloader.c b/usr.bin/rsync/downloader.c
 72index cab6eb23f9f..07ec334f6b4 100644
 73--- a/usr.bin/rsync/downloader.c
 74+++ b/usr.bin/rsync/downloader.c
 75@@ -495,7 +495,7 @@ again:
 76 		sz = tok == p->blk.blksz - 1 ? p->blk.rem : p->blk.len;
 77 		assert(sz);
 78 		assert(p->map != MAP_FAILED);
 79-		buf = p->map + (tok * p->blk.len);
 80+		buf = (char *)p->map + (tok * p->blk.len);
 81 
 82 		/*
 83 		 * Now we read from our block.
 84diff --git a/usr.bin/rsync/io.c b/usr.bin/rsync/io.c
 85index dc224ae8aed..fcf9e92dbaa 100644
 86--- a/usr.bin/rsync/io.c
 87+++ b/usr.bin/rsync/io.c
 88@@ -117,7 +117,7 @@ io_write_blocking(int fd, const void *buf, size_t sz)
 89 			ERRX("io_write_nonblocking: short write");
 90 			return 0;
 91 		}
 92-		buf += wsz;
 93+		buf = (char *)buf + wsz;
 94 		sz -= wsz;
 95 	}
 96 
 97@@ -156,7 +156,7 @@ io_write_buf(struct sess *sess, int fd, const void *buf, size_t sz)
 98 		}
 99 		sess->total_write += wsz;
100 		sz -= wsz;
101-		buf += wsz;
102+		buf = (char *)buf + wsz;
103 	}
104 
105 	return 1;
106@@ -250,7 +250,7 @@ io_read_blocking(int fd, void *buf, size_t sz)
107 			ERRX("io_read_nonblocking: short read");
108 			return 0;
109 		}
110-		buf += rsz;
111+		buf = (char *)buf + rsz;
112 		sz -= rsz;
113 	}
114 
115@@ -367,7 +367,7 @@ io_read_buf(struct sess *sess, int fd, void *buf, size_t sz)
116 			}
117 			sz -= rsz;
118 			sess->mplex_read_remain -= rsz;
119-			buf += rsz;
120+			buf = (char *)buf + rsz;
121 			sess->total_read += rsz;
122 			continue;
123 		}
124@@ -463,7 +463,7 @@ io_buffer_buf(void *buf, size_t *bufpos, size_t buflen, const void *val,
125 {
126 
127 	assert(*bufpos + valsz <= buflen);
128-	memcpy(buf + *bufpos, val, valsz);
129+	memcpy((char *)buf + *bufpos, val, valsz);
130 	*bufpos += valsz;
131 }
132 
133@@ -662,7 +662,7 @@ io_unbuffer_buf(const void *buf, size_t *bufpos, size_t bufsz, void *val,
134 {
135 
136 	assert(*bufpos + valsz <= bufsz);
137-	memcpy(val, buf + *bufpos, valsz);
138+	memcpy(val, (char *)buf + *bufpos, valsz);
139 	*bufpos += valsz;
140 }
141 
142diff --git a/usr.bin/rsync/sender.c b/usr.bin/rsync/sender.c
143index c54fbc2dae0..6469e7f27e5 100644
144--- a/usr.bin/rsync/sender.c
145+++ b/usr.bin/rsync/sender.c
146@@ -128,7 +128,7 @@ send_up_fsm(struct sess *sess, size_t *phase,
147 			return 0;
148 		}
149 		io_lowbuffer_buf(sess, *wb, &pos, *wbsz,
150-			up->stat.map + up->stat.curpos, sz);
151+			(char *)up->stat.map + up->stat.curpos, sz);
152 
153 		up->stat.curpos += sz;
154 		if (up->stat.curpos == up->stat.curlen)
155@@ -561,7 +561,8 @@ rsync_sender(struct sess *sess, int fdin,
156 		if ((pfd[1].revents & POLLOUT) && wbufsz > 0) {
157 			assert(pfd[2].fd == -1);
158 			assert(wbufsz - wbufpos);
159-			ssz = write(fdout, wbuf + wbufpos, wbufsz - wbufpos);
160+			ssz = write(fdout,
161+				(char *)wbuf + wbufpos, wbufsz - wbufpos);
162 			if (ssz == -1) {
163 				ERR("write");
164 				goto out;
165-- 
1662.49.0
167