]> wimlib.net Git - wimlib/blobdiff - src/integrity.c
integrity.c: add casts when converting endianness in-place
[wimlib] / src / integrity.c
index 0a7ea0fb7f704f30bec751fdd2afe6187abcc33e..7494c3245057ff9ef0f6a582b6add37ef62ce6f6 100644 (file)
@@ -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
@@ -42,7 +42,7 @@
  * information. */
 #define INTEGRITY_CHUNK_SIZE 10485760
 
-/* Only use a different chunk size for compatiblity with an existing integrity
+/* Only use a different chunk size for compatibility with an existing integrity
  * table if the chunk size is between these two numbers. */
 #define INTEGRITY_MIN_CHUNK_SIZE 4096
 #define INTEGRITY_MAX_CHUNK_SIZE 134217728
@@ -113,17 +113,18 @@ 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)
                return ret;
        table = buf;
 
-       table->size        = le32_to_cpu(table->size);
-       table->num_entries = le32_to_cpu(table->num_entries);
-       table->chunk_size  = le32_to_cpu(table->chunk_size);
+       table->size        = le32_to_cpu((_force_attr le32)table->size);
+       table->num_entries = le32_to_cpu((_force_attr le32)table->num_entries);
+       table->chunk_size  = le32_to_cpu((_force_attr le32)table->chunk_size);
 
        if (table->size != wim->hdr.integrity_table_reshdr.uncompressed_size ||
            table->size != (u64)table->num_entries * SHA1_HASH_SIZE + 12 ||
@@ -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;
 }
 
 /*
@@ -315,9 +313,9 @@ write_integrity_table(WIMStruct *wim,
 
        new_table_size = new_table->size;
 
-       new_table->size        = cpu_to_le32(new_table->size);
-       new_table->num_entries = cpu_to_le32(new_table->num_entries);
-       new_table->chunk_size  = cpu_to_le32(new_table->chunk_size);
+       new_table->size        = (_force_attr u32)cpu_to_le32(new_table->size);
+       new_table->num_entries = (_force_attr u32)cpu_to_le32(new_table->num_entries);
+       new_table->chunk_size  = (_force_attr u32)cpu_to_le32(new_table->chunk_size);
 
        ret = write_wim_resource_from_buffer(new_table,
                                             new_table_size,