bspatch: use #define for header size instead of magic number
Reviewed by: allanjude, kib Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D7861
This commit is contained in:
parent
a883471b40
commit
6731fa768a
@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <fcntl.h>
|
||||
#include <libgen.h>
|
||||
#include <limits.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
@ -52,6 +53,7 @@ __FBSDID("$FreeBSD$");
|
||||
#ifndef O_BINARY
|
||||
#define O_BINARY 0
|
||||
#endif
|
||||
#define HEADER_SIZE 32
|
||||
|
||||
static char *newfile;
|
||||
static int dirfd = -1;
|
||||
@ -101,12 +103,11 @@ int main(int argc, char *argv[])
|
||||
int newfd, oldfd;
|
||||
off_t oldsize, newsize;
|
||||
off_t bzctrllen, bzdatalen;
|
||||
u_char header[32], buf[8];
|
||||
u_char header[HEADER_SIZE], buf[8];
|
||||
u_char *old, *new;
|
||||
off_t oldpos, newpos;
|
||||
off_t ctrl[3];
|
||||
off_t lenread;
|
||||
off_t i;
|
||||
off_t i, lenread, offset;
|
||||
#ifdef HAVE_CAPSICUM
|
||||
cap_rights_t rights_dir, rights_ro, rights_wr;
|
||||
#endif
|
||||
@ -181,7 +182,7 @@ int main(int argc, char *argv[])
|
||||
*/
|
||||
|
||||
/* Read header */
|
||||
if (fread(header, 1, 32, f) < 32) {
|
||||
if (fread(header, 1, HEADER_SIZE, f) < HEADER_SIZE) {
|
||||
if (feof(f))
|
||||
errx(1, "Corrupt patch");
|
||||
err(1, "fread(%s)", argv[3]);
|
||||
@ -195,27 +196,27 @@ int main(int argc, char *argv[])
|
||||
bzctrllen = offtin(header + 8);
|
||||
bzdatalen = offtin(header + 16);
|
||||
newsize = offtin(header + 24);
|
||||
if (bzctrllen < 0 || bzctrllen > OFF_MAX - 32 ||
|
||||
bzdatalen < 0 || bzctrllen + 32 > OFF_MAX - bzdatalen ||
|
||||
if (bzctrllen < 0 || bzctrllen > OFF_MAX - HEADER_SIZE ||
|
||||
bzdatalen < 0 || bzctrllen + HEADER_SIZE > OFF_MAX - bzdatalen ||
|
||||
newsize < 0 || newsize > SSIZE_MAX)
|
||||
errx(1, "Corrupt patch");
|
||||
|
||||
/* Close patch file and re-open it via libbzip2 at the right places */
|
||||
if (fclose(f))
|
||||
err(1, "fclose(%s)", argv[3]);
|
||||
if (fseeko(cpf, 32, SEEK_SET))
|
||||
err(1, "fseeko(%s, %lld)", argv[3],
|
||||
(long long)32);
|
||||
offset = HEADER_SIZE;
|
||||
if (fseeko(cpf, offset, SEEK_SET))
|
||||
err(1, "fseeko(%s, %jd)", argv[3], (intmax_t)offset);
|
||||
if ((cpfbz2 = BZ2_bzReadOpen(&cbz2err, cpf, 0, 0, NULL, 0)) == NULL)
|
||||
errx(1, "BZ2_bzReadOpen, bz2err = %d", cbz2err);
|
||||
if (fseeko(dpf, 32 + bzctrllen, SEEK_SET))
|
||||
err(1, "fseeko(%s, %lld)", argv[3],
|
||||
(long long)(32 + bzctrllen));
|
||||
offset += bzctrllen;
|
||||
if (fseeko(dpf, offset, SEEK_SET))
|
||||
err(1, "fseeko(%s, %jd)", argv[3], (intmax_t)offset);
|
||||
if ((dpfbz2 = BZ2_bzReadOpen(&dbz2err, dpf, 0, 0, NULL, 0)) == NULL)
|
||||
errx(1, "BZ2_bzReadOpen, bz2err = %d", dbz2err);
|
||||
if (fseeko(epf, 32 + bzctrllen + bzdatalen, SEEK_SET))
|
||||
err(1, "fseeko(%s, %lld)", argv[3],
|
||||
(long long)(32 + bzctrllen + bzdatalen));
|
||||
offset += bzdatalen;
|
||||
if (fseeko(epf, offset, SEEK_SET))
|
||||
err(1, "fseeko(%s, %jd)", argv[3], (intmax_t)offset);
|
||||
if ((epfbz2 = BZ2_bzReadOpen(&ebz2err, epf, 0, 0, NULL, 0)) == NULL)
|
||||
errx(1, "BZ2_bzReadOpen, bz2err = %d", ebz2err);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user