X-Git-Url: https://wimlib.net/git/?a=blobdiff_plain;f=src%2Fintegrity.c;h=fc9b8859b53e632062821df0afa1682cec97d803;hb=ec0ddfdcfb88119f6918a3901ca865a72b89e9fd;hp=0054c40219a381f954a36bd08c31becb3d924394;hpb=21da2526eff64cdb8e3cb509d34af182d764c701;p=wimlib diff --git a/src/integrity.c b/src/integrity.c index 0054c402..fc9b8859 100644 --- a/src/integrity.c +++ b/src/integrity.c @@ -7,7 +7,7 @@ */ /* - * Copyright (C) 2012, 2013 Eric Biggers + * Copyright (C) 2012-2016 Eric Biggers * * This file is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free @@ -113,8 +113,9 @@ read_integrity_table(WIMStruct *wim, u64 num_checked_bytes, struct integrity_table *table; int ret; - if (wim->hdr.integrity_table_reshdr.uncompressed_size < 8) - goto invalid; + STATIC_ASSERT(sizeof(struct integrity_table) == 12); + if (wim->hdr.integrity_table_reshdr.uncompressed_size < 12) + return WIMLIB_ERR_INVALID_INTEGRITY_TABLE; ret = wim_reshdr_to_data(&wim->hdr.integrity_table_reshdr, wim, &buf); if (ret) @@ -131,14 +132,11 @@ read_integrity_table(WIMStruct *wim, u64 num_checked_bytes, table->num_entries != DIV_ROUND_UP(num_checked_bytes, table->chunk_size)) { FREE(table); - goto invalid; + return WIMLIB_ERR_INVALID_INTEGRITY_TABLE; } *table_ret = table; return 0; - -invalid: - return WIMLIB_ERR_INVALID_INTEGRITY_TABLE; } /*