make cdiff_apply() compatible with old zlib versions (closes bug#76)

git-svn: trunk@2459
remotes/push_mirror/metadata
Tomasz Kojm 19 years ago
parent d43a8a5c6e
commit edaff93e66
  1. 5
      clamav-devel/ChangeLog
  2. 24
      clamav-devel/shared/cdiff.c

@ -1,3 +1,8 @@
Sun Oct 29 16:33:01 CET 2006 (tk)
---------------------------------
* shared/cdiff.c: make cdiff_apply() compatible with old zlib versions
(closes bug#76), patch from Ian Abbott <abbotti*mev.co.uk>
Sun Oct 29 16:10:08 CET 2006 (tk)
---------------------------------
* clamd/others.c: fix compilation error under w32 (closes bug#68)

@ -766,7 +766,8 @@ int cdiff_apply(int fd, unsigned short mode)
gzFile *gzh;
char line[1024], buff[FILEBUFF], *dsig = NULL;
unsigned int lines = 0, cmds = 0;
int end, i;
unsigned int difflen, diffremain;
int end, i, n;
struct stat sb;
int desc;
#ifdef HAVE_GMP
@ -859,12 +860,15 @@ int cdiff_apply(int fd, unsigned short mode)
}
i = 0;
while(read(desc, buff, 1) > 0)
if(buff[0] == ':')
n = 0;
while(n < FILEBUFF - 1 && read(desc, &buff[n], 1) > 0) {
if(buff[n++] == ':')
if(++i == 3)
break;
}
buff[n] = 0;
if(i != 3) {
if(sscanf(buff, "ClamAV-Diff:%*u:%u:", &difflen) != 1) {
logg("!cdiff_apply: Incorrect file format\n");
close(desc);
return -1;
@ -876,7 +880,17 @@ int cdiff_apply(int fd, unsigned short mode)
return -1;
}
while(gzgets(gzh, line, sizeof(line))) {
diffremain = difflen;
while(diffremain) {
unsigned int bufsize = diffremain < sizeof(line) ? diffremain + 1 : sizeof(line);
if(!gzgets(gzh, line, bufsize)) {
logg("!cdiff_apply: Premature EOF at line %d\n", lines + 1);
cdiff_ctx_free(&ctx);
gzclose(gzh);
return -1;
}
diffremain -= strlen(line);
lines++;
cli_chomp(line);

Loading…
Cancel
Save