--- zipfile.c +++ zipfile.c @@ -2166,7 +2166,7 @@ int readlocal(localz, z) #ifndef UTIL ulg start_disk = 0; uzoff_t start_offset = 0; - char *split_path; + char *split_path = NULL; start_disk = z->dsk; start_offset = z->off; @@ -2197,6 +2197,7 @@ int readlocal(localz, z) split_path = get_in_split_path(in_path, start_disk); } } + if (split_path) free(split_path); #endif /* For utilities assume archive is on one disk for now */ @@ -6014,7 +6015,7 @@ int zipcopy(z) ulg e = 0; /* extended local header size */ ulg start_disk = 0; uzoff_t start_offset = 0; - char *split_path; + char *split_path = NULL; char buf[LOCHEAD + 1]; struct zlist far *localz; int r; @@ -6063,6 +6064,7 @@ int zipcopy(z) split_path = get_in_split_path(in_path, start_disk); } } + if (split_path) free(split_path); if (zfseeko(in_file, start_offset, SEEK_SET) != 0) { fclose(in_file); --- zip.c +++ zip.c @@ -3450,6 +3450,7 @@ char **argv; /* command line } } */ + free(value); /* Added by Polo from forum */ if (kk == 3) { first_listarg = argnum; kk = 4; --- fileio.c +++ fileio.c @@ -696,6 +696,7 @@ int newnamew(namew, isdir, casesensitive return ZE_MEM; } strcpy(z->name, name); + if (z->oname) free(z->oname); z->oname = oname; oname = NULL; z->dosflag = dosflag; @@ -959,6 +960,7 @@ int newname(name, isdir, casesensitive) return ZE_MEM; } strcpy(z->name, name); + if (z->oname) free(z->oname); z->oname = oname; z->dosflag = dosflag;