more friendly extract-checksum verification for unknown or usupported compression formats.

remotes/push_mirror/0.98.1
Steve Morgan 12 years ago
parent ab1a0665c3
commit 2599f40b56
  1. 23
      libclamav/xar.c

@ -525,6 +525,7 @@ int cli_scanxar(cli_ctx *ctx)
tmpname = NULL;
while (CL_SUCCESS == (rc = xar_get_toc_data_values(reader, &length, &offset, &size, &encoding,
&a_cksum, &a_hash, &e_cksum, &e_hash))) {
int do_extract_cksum = 1;
char * blockp;
SHA1Context a_sc, e_sc;
cli_md5_ctx a_mc, e_mc;
@ -727,9 +728,10 @@ int cli_scanxar(cli_ctx *ctx)
__lzma_wrap_free(NULL, buff);
}
break;
case CL_TYPE_ANY:
default:
case CL_TYPE_BZ:
case CL_TYPE_ANY:
do_extract_cksum = 0;
{
/* for uncompressed, bzip2, and unknown, just pull the file, cli_magic_scandesc does the rest */
unsigned long write_len;
@ -747,7 +749,6 @@ int cli_scanxar(cli_ctx *ctx)
}
xar_hash_update(a_hash_ctx, blockp, length, a_hash);
xar_hash_update(e_hash_ctx, blockp, length, e_hash);
if (cli_writen(fd, blockp, write_len) < 0) {
cli_dbgmsg("cli_scanxar: cli_writen error %li bytes @ %li.\n", length, at);
@ -772,15 +773,17 @@ int cli_scanxar(cli_ctx *ctx)
a_cksum = NULL;
}
if (e_cksum != NULL) {
xar_hash_final(e_hash_ctx, result, e_hash);
expected = cli_hex2str(e_cksum);
if (xar_hash_check(e_hash, result, expected) != 0) {
cli_dbgmsg("cli_scanxar: extracted-checksum missing or mismatch.\n");
cksum_fails++;
} else {
cli_dbgmsg("cli_scanxar: extracted-checksum matched.\n");
if (do_extract_cksum) {
xar_hash_final(e_hash_ctx, result, e_hash);
expected = cli_hex2str(e_cksum);
if (xar_hash_check(e_hash, result, expected) != 0) {
cli_dbgmsg("cli_scanxar: extracted-checksum missing or mismatch.\n");
cksum_fails++;
} else {
cli_dbgmsg("cli_scanxar: extracted-checksum matched.\n");
}
free(expected);
}
free(expected);
xmlFree(e_cksum);
e_cksum = NULL;
}

Loading…
Cancel
Save