blob: b8df10a51c1305ae18b7d3134df820798bd41755 [file] [log] [blame]
Mark internal types used in ntfs packets as unaligned to avoid crashes.
These types are used everywhere in packed structs and
the source code freely takes addresses of these types.
Clang crashes because it assumed that the types are aligned
(https://crbug.com/739958).
diff -Nur ntfs-3g_ntfsprogs-2017.3.23/include/ntfs-3g/types.h ntfs-3g_ntfsprogs-2017.3.23_new/include/ntfs-3g/types.h
--- ntfs-3g_ntfsprogs-2017.3.23/include/ntfs-3g/types.h
+++ ntfs-3g_ntfsprogs-2017.3.23_new/include/ntfs-3g/types.h
@@ -44,25 +44,30 @@
typedef int32_t s32;
typedef int64_t s64;
-typedef u16 le16;
-typedef u32 le32;
-typedef u64 le64;
+/*
+ * The source code takes the addresses of these types.
+ * The types should be marked unaligned as they are used in packed
+ * structures to avoid crashes on ARM32.
+ */
+typedef __attribute__((__aligned__(1))) u16 le16;
+typedef __attribute__((__aligned__(1))) u32 le32;
+typedef __attribute__((__aligned__(1))) u64 le64;
-typedef u16 be16;
-typedef u32 be32;
-typedef u64 be64;
+typedef __attribute__((__aligned__(1))) u16 be16;
+typedef __attribute__((__aligned__(1))) u32 be32;
+typedef __attribute__((__aligned__(1))) u64 be64;
/*
* Declare s{l,b}e{16,32,64} to be unsigned because we do not want sign
* extension on BE architectures.
*/
-typedef u16 sle16;
-typedef u32 sle32;
-typedef u64 sle64;
+typedef __attribute__((__aligned__(1))) u16 sle16;
+typedef __attribute__((__aligned__(1))) u32 sle32;
+typedef __attribute__((__aligned__(1))) u64 sle64;
-typedef u16 sbe16;
-typedef u32 sbe32;
-typedef u64 sbe64;
+typedef __attribute__((__aligned__(1))) u16 sbe16;
+typedef __attribute__((__aligned__(1))) u32 sbe32;
+typedef __attribute__((__aligned__(1))) u64 sbe64;
typedef le16 ntfschar; /* 2-byte Unicode character type. */
#define UCHAR_T_SIZE_BITS 1