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);

Reply via email to