|
| 1 | +#include <stdint.h> |
| 2 | +#include <stdlib.h> |
| 3 | +#include <string.h> |
| 4 | + |
| 5 | +#define MAGIC_U16 ((uint16_t)0xAABB) |
| 6 | +#define MAGIC_U32 ((uint32_t)0x11223344) |
| 7 | +#define MAGIC_U64 ((uint64_t)0x0102030405060708ULL) |
| 8 | + |
| 9 | +static inline uint16_t load_u16(const uint8_t *p) { |
| 10 | + uint16_t v; |
| 11 | + memcpy(&v, p, sizeof(v)); |
| 12 | + return v; |
| 13 | +} |
| 14 | + |
| 15 | +static inline uint16_t bswap_u16(const uint16_t v) { |
| 16 | + return ((v & 0xff00) >> 8) | ((v & 0xff) << 8); |
| 17 | +} |
| 18 | + |
| 19 | +static inline uint32_t load_u32(const uint8_t *p) { |
| 20 | + uint32_t v; |
| 21 | + memcpy(&v, p, sizeof(v)); |
| 22 | + return v; |
| 23 | +} |
| 24 | + |
| 25 | +static inline uint32_t bswap_u32(const uint32_t v) { |
| 26 | + return ((v & 0xff000000UL) >> 24) | ((v & 0x00ff0000UL) >> 8) | |
| 27 | + ((v & 0x0000ff00UL) << 8) | ((v & 0x000000ffUL) << 24); |
| 28 | +} |
| 29 | + |
| 30 | +static inline uint64_t load_u64(const uint8_t *p) { |
| 31 | + uint64_t v; |
| 32 | + memcpy(&v, p, sizeof(v)); |
| 33 | + return v; |
| 34 | +} |
| 35 | + |
| 36 | +static inline uint64_t bswap_u64(const uint64_t v) { |
| 37 | + return ((v & 0xff00000000000000ULL) >> 56) | |
| 38 | + ((v & 0x00ff000000000000ULL) >> 40) | |
| 39 | + ((v & 0x0000ff0000000000ULL) >> 24) | |
| 40 | + ((v & 0x000000ff00000000ULL) >> 8) | |
| 41 | + ((v & 0x00000000ff000000ULL) << 8) | |
| 42 | + ((v & 0x0000000000ff0000ULL) << 24) | |
| 43 | + ((v & 0x000000000000ff00ULL) << 40) | |
| 44 | + ((v & 0x00000000000000ffULL) << 56); |
| 45 | +} |
| 46 | + |
| 47 | +int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { |
| 48 | + if (size < 28) { return 0; } |
| 49 | + |
| 50 | + if (load_u16(data + 0) == MAGIC_U16) { |
| 51 | + if (bswap_u16(load_u16(data + 2)) == MAGIC_U16) { |
| 52 | + if (load_u32(data + 4) == MAGIC_U32) { |
| 53 | + if (bswap_u32(load_u32(data + 8)) == MAGIC_U32) { |
| 54 | + if (load_u64(data + 12) == MAGIC_U64) { |
| 55 | + if (bswap_u64(load_u64(data + 20)) == MAGIC_U64) { abort(); } |
| 56 | + } |
| 57 | + } |
| 58 | + } |
| 59 | + } |
| 60 | + } |
| 61 | + |
| 62 | + return 0; |
| 63 | +} |
0 commit comments