]> wimlib.net Git - wimlib/blobdiff - include/wimlib/header.h
mount_image.c: add fallback definitions of RENAME_* constants
[wimlib] / include / wimlib / header.h
index feb31764847d59303724564b7ed688e288eb2b2e..49ccf0b2fd5b8eee5410332fb8ee0e49b2bb1a36 100644 (file)
@@ -3,17 +3,15 @@
 
 #include <limits.h>
 
+#include "wimlib/guid.h"
 #include "wimlib/resource.h"
 #include "wimlib/types.h"
 
-/* Length of "Globally Unique ID" field in WIM header.  */
-#define WIM_GUID_LEN    16
-
 /* Length of the WIM header on disk.  wimlib currently requires that the header
  * be exactly this size.  */
 #define WIM_HEADER_DISK_SIZE 208
 
-/* Default WIM version number.  Streams are always compressed independently.  */
+/* Default WIM version number.  Blobs are always compressed independently.  */
 #define WIM_VERSION_DEFAULT 0x10d00
 
 /* Version number used for WIMs that allow multiple blobs combined into one
@@ -57,35 +55,34 @@ struct wim_header_disk {
 
        /* +0x08: Size of the WIM header, in bytes; WIM_HEADER_DISK_SIZE
         * expected (currently the only supported value).  */
-       u32 hdr_size;
+       le32 hdr_size;
 
        /* +0x0c: Version of the WIM file.  Recognized values are the
         * WIM_VERSION_* constants from above.  */
-       u32 wim_version;
+       le32 wim_version;
 
        /* +0x10: Flags for the WIM file (WIM_HDR_FLAG_*).  */
-       u32 wim_flags;
+       le32 wim_flags;
 
        /* +0x14: Uncompressed chunk size for non-solid compressed resources in
-        * the WIM or 0 if the WIM is uncompressed.  (However wimlib will accept
-        * any value here if the WIM is uncompressed.)  */
-       u32 chunk_size;
+        * the WIM or 0 if the WIM is uncompressed.  */
+       le32 chunk_size;
 
        /* +0x18: Globally unique identifier for the WIM file.  Basically a
         * bunch of random bytes.  */
-       u8 guid[WIM_GUID_LEN];
+       u8 guid[GUID_SIZE];
 
        /* +0x28: Number of this WIM part in the split WIM file, indexed from 1,
         * or 1 if the WIM is not split.  */
-       u16 part_number;
+       le16 part_number;
 
        /* +0x2a: Total number of parts of the split WIM file, or 1 if the WIM
         * is not split.  */
-       u16 total_parts;
+       le16 total_parts;
 
        /* +0x2c: Number of images in the WIM.  WIMGAPI requires that this be at
         * least 1.  wimlib allows 0.  */
-       u32 image_count;
+       le32 image_count;
 
        /* +0x30: Location and size of the WIM's blob table.  */
        struct wim_reshdr_disk blob_table_reshdr;
@@ -99,23 +96,28 @@ struct wim_header_disk {
 
        /* +0x78: 1-based index of the bootable image of the WIM, or 0 if no
         * image is bootable.  */
-       u32 boot_idx;
+       le32 boot_idx;
 
        /* +0x7c: Location and size of the WIM's integrity table, or all zeroes
         * if the WIM has no integrity table.
         *
         * Note the integrity_table_reshdr here is 4-byte aligned even though it
-        * would ordinarily be 8-byte aligned--- hence, the _packed_attribute on
-        * this structure is essential.  */
+        * would ordinarily be 8-byte aligned--- hence, the
+        * __attribute__((packed)) on this structure is essential.  */
        struct wim_reshdr_disk integrity_table_reshdr;
 
        /* +0x94: Unused bytes.  */
        u8 unused[60];
 
        /* +0xd0 (208)  */
-} _packed_attribute;
+} __attribute__((packed));
 
-#define MAX_IMAGES (((INT_MAX < INT32_MAX) ? INT_MAX : INT32_MAX) - 1)
+/*
+ * Arbitrarily limit the maximum number of images to 65535, to prevent huge
+ * memory allocations when processing fuzzed files.  This can be increased if
+ * ever needed (up to INT_MAX - 1).
+ */
+#define MAX_IMAGES     65535
 
 /* In-memory representation of a WIM header.  See `struct wim_header_disk' for
  * field descriptions.  */
@@ -124,7 +126,7 @@ struct wim_header {
        u32 wim_version;
        u32 flags;
        u32 chunk_size;
-       u8 guid[WIM_GUID_LEN];
+       u8 guid[GUID_SIZE];
        u16 part_number;
        u16 total_parts;
        u32 image_count;