opkg

statically linked package installer
git clone anongit@rnpnr.xyz:opkg.git
Log | Files | Refs | Feed | Submodules | README | LICENSE

0024-rsync-Avoid-pointer-arithmetic-on-void.patch (5203B)


      1 From 2dc242877741913abaf8685c616406812d507e17 Mon Sep 17 00:00:00 2001
      2 From: Michael Forney <mforney@mforney.org>
      3 Date: Sat, 15 Jun 2019 20:06:13 -0700
      4 Subject: [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 
     13 diff --git a/usr.bin/rsync/blocks.c b/usr.bin/rsync/blocks.c
     14 index 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;
     71 diff --git a/usr.bin/rsync/downloader.c b/usr.bin/rsync/downloader.c
     72 index 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.
     84 diff --git a/usr.bin/rsync/io.c b/usr.bin/rsync/io.c
     85 index 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  
    142 diff --git a/usr.bin/rsync/sender.c b/usr.bin/rsync/sender.c
    143 index 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 -- 
    166 2.49.0
    167