Date: Saturday, December 19, 2020 @ 23:10:16 Author: kkeen Revision: 780052
fix source url, groundwork for FS#65971 Added: bsdiff/trunk/e48209b03f.patch Modified: bsdiff/trunk/PKGBUILD ------------------+ PKGBUILD | 26 +++++++++-- e48209b03f.patch | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 140 insertions(+), 5 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2020-12-19 23:08:41 UTC (rev 780051) +++ PKGBUILD 2020-12-19 23:10:16 UTC (rev 780052) @@ -8,18 +8,34 @@ license=('BSD') arch=('x86_64') depends=('bzip2') -source=("https://www.daemonology.net/${pkgname}/${pkgname}-${pkgver}.tar.gz" +#source=("https://www.daemonology.net/bsdiff/bsdiff-$pkgver.tar.gz" +source=("https://sources.voidlinux.org/bsdiff-$pkgver/bsdiff-$pkgver.tar.gz" Makefile.patch - "https://security.freebsd.org/patches/SA-16:25/bspatch.patch") + "https://security.freebsd.org/patches/SA-16:25/bspatch.patch" + "https://github.com/freebsd/freebsd/commit/d0260bc283.patch" + "https://github.com/freebsd/freebsd/commit/59381119a4.patch" + "e48209b03f.patch" + "6e40d93.patch.b64::https://android-review.googlesource.com/changes/platform%2Fexternal%2Fbsdiff~961238/revisions/6/patch?download") md5sums=('e6d812394f0e0ecc8d5df255aa1db22a' 'f176d14d39c5784a2c824f6797544f4b' - '30e8ec771baea61bd9c25adb385b06fc') + '30e8ec771baea61bd9c25adb385b06fc' + 'f0a01c90ef3a9680017eacb81fbfdf02' + 'eb9cddcc3fce507256990b82cc0917ee' + 'bc8ecaecd841d9022a88a7c35151d598' + '56b07d7499454403903140ef44cd1b38') +# todo: get patches to apply cleanly + prepare() { cd "$srcdir/${pkgname}-${pkgver}" patch -p0 < ../Makefile.patch - sed -i 's|usr.bin/bsdiff/bspatch/||' ../bspatch.patch - patch -p0 < ../bspatch.patch + patch -p3 < ../bspatch.patch + #patch -p4 < ../d0260bc283.patch + #patch -p4 < ../59381119a4.patch + base64 -d ../6e40d93.patch.b64 > ../6e40d93.patch + sed -i 's|bspatch.cc|bspatch.c|g' ../6e40d93.patch + #patch -p1 < ../6e40d93.patch + #patch bspatch.c ../e48209b03f.patch } build() { Added: e48209b03f.patch =================================================================== --- e48209b03f.patch (rev 0) +++ e48209b03f.patch 2020-12-19 23:10:16 UTC (rev 780052) @@ -0,0 +1,119 @@ +@@ -27,7 +27,10 @@ + #include <sys/cdefs.h> + __FBSDID("$FreeBSD$"); + ++#include <assert.h> + #include <bzlib.h> ++#include <limits.h> ++#include <stdint.h> + #include <stdlib.h> + #include <stdio.h> + #include <string.h> +@@ -63,8 +66,8 @@ + BZFILE * cpfbz2, * dpfbz2, * epfbz2; + int cbz2err, dbz2err, ebz2err; + int fd; +- ssize_t oldsize,newsize; +- ssize_t bzctrllen,bzdatalen; ++ off_t oldsize,newsize; ++ off_t bzctrllen,bzdatalen; + u_char header[32],buf[8]; + u_char *old, *new; + off_t oldpos,newpos; +@@ -72,6 +75,8 @@ + off_t lenread; + off_t i; + ++ assert(OFF_MAX >= INT64_MAX); ++ + if(argc!=4) errx(1,"usage: %s oldfile newfile patchfile\n",argv[0]); + + /* Open patch file */ +@@ -107,8 +112,10 @@ + bzctrllen=offtin(header+8); + bzdatalen=offtin(header+16); + newsize=offtin(header+24); +- if((bzctrllen<0) || (bzdatalen<0) || (newsize<0)) +- errx(1,"Corrupt patch\n"); ++ if((bzctrllen<0) || (bzctrllen>OFF_MAX-32) || ++ (bzdatalen<0) || (bzctrllen+32>OFF_MAX-bzdatalen) || ++ (newsize<=0) || (newsize>SSIZE_MAX)) ++ errx(1,"Corrupt patch\n"); + + /* Close patch file and re-open it via libbzip2 at the right places */ + if (fclose(f)) +@@ -136,12 +143,13 @@ + errx(1, "BZ2_bzReadOpen, bz2err = %d", ebz2err); + + if(((fd=open(argv[1],O_RDONLY|O_BINARY,0))<0) || +- ((oldsize=lseek(fd,0,SEEK_END))==-1) || +- ((old=malloc(oldsize+1))==NULL) || ++ ((oldsize=lseek(fd,0,SEEK_END))<=0) || ++ (oldsize>SSIZE_MAX) || ++ ((old=malloc(oldsize))==NULL) || + (lseek(fd,0,SEEK_SET)!=0) || + (read(fd,old,oldsize)!=oldsize) || + (close(fd)==-1)) err(1,"%s",argv[1]); +- if((new=malloc(newsize+1))==NULL) err(1,NULL); ++ if((new=malloc(newsize))==NULL) err(1,NULL); + + oldpos=0;newpos=0; + while(newpos<newsize) { +@@ -152,18 +160,23 @@ + (cbz2err != BZ_STREAM_END))) + errx(1, "Corrupt patch\n"); + ctrl[i]=offtin(buf); +- }; ++ } + + /* Sanity-check */ +- if(newpos+ctrl[0]>newsize) +- errx(1,"Corrupt patch\n"); ++ if((ctrl[0]<0) || (ctrl[0]>INT_MAX) || ++ (newpos>OFF_MAX-ctrl[0]) || (newpos+ctrl[0]>newsize)) ++ errx(1,"Corrupt patch\n"); + +- /* Read diff string */ ++ /* Read diff string - 4th arg converted to int */ + lenread = BZ2_bzRead(&dbz2err, dpfbz2, new + newpos, ctrl[0]); + if ((lenread < ctrl[0]) || + ((dbz2err != BZ_OK) && (dbz2err != BZ_STREAM_END))) + errx(1, "Corrupt patch\n"); + ++ /* Sanity-check */ ++ if(oldpos>OFF_MAX-ctrl[0]) ++ errx(1,"Corrupt patch\n"); ++ + /* Add old data to diff string */ + for(i=0;i<ctrl[0];i++) + if((oldpos+i>=0) && (oldpos+i<oldsize)) +@@ -174,19 +187,25 @@ + oldpos+=ctrl[0]; + + /* Sanity-check */ +- if(newpos+ctrl[1]>newsize) +- errx(1,"Corrupt patch\n"); ++ if((ctrl[1]<0) || (ctrl[1]>INT_MAX) || ++ (newpos>OFF_MAX-ctrl[1]) || (newpos+ctrl[1]>newsize)) ++ errx(1,"Corrupt patch\n"); + +- /* Read extra string */ ++ /* Read extra string - 4th arg converted to int */ + lenread = BZ2_bzRead(&ebz2err, epfbz2, new + newpos, ctrl[1]); + if ((lenread < ctrl[1]) || + ((ebz2err != BZ_OK) && (ebz2err != BZ_STREAM_END))) + errx(1, "Corrupt patch\n"); + ++ /* Sanity-check */ ++ if((ctrl[2]<0) ? ++ (oldpos<OFF_MIN-ctrl[2]) : (oldpos>OFF_MAX-ctrl[2])) ++ errx(1,"Corrupt patch\n"); ++ + /* Adjust pointers */ + newpos+=ctrl[1]; + oldpos+=ctrl[2]; +- }; ++ } + + /* Clean up the bzip2 reads */ + BZ2_bzReadClose(&cbz2err, cpfbz2);