Fixture 163

wire header parser

C · 5 functions · 4 lanes · 20 of 20 function-lanes behave identically

All 4 lanes recompile and return the same results as the original.

A real-shaped framing header: 10 fixed bytes, all multi-byte fields big-endian, followed by a variable payload whose length the header declares.

off 0..1 magic u16 be, must be 0x5A47 off 2 version u8, must be 2 off 3 flags u8, the top nibble is reserved and must be zero off 4..7 stream_id u32 be off 8..9 payload_len u16 be, must be <= 6 AND <= (len - 10) off 10.. payload payload_len bytes

Why this stresses a decompiler: the whole security property of this parser is one relationship -- the DECLARED length must be bounded by the RECEIVED length minus the header size -- and after lowering it is a single compare between two registers whose provenance the decompiler has to reconstruct. The two checks on payload_len are not redundant (one bounds the field against the format's own maximum, one against the bytes actually present), and a decompiler that merges them, drops either, flips the direction, or loses the - 10 produces C that still parses every valid frame identically and reads out of bounds on a crafted one. Every rejection path returns a DISTINCT negative code so a mis-recovered check shows up as the wrong code rather than as a coin flip.

The big-endian assembly is done with explicit shifts over individual bytes, so no unaligned access and no host-endianness dependence exists anywhere.

UB notes: every length is clamped into [0, 16] before it participates in arithmetic; the declared length is compared as an unsigned before any cast to int32_t; the payload loop is bounded by the validated declared length.

tests/decompiler_fixtures/src/163_wire_header_parser.c source
/* 163_wire_header_parser.c
 *
 * A real-shaped framing header: 10 fixed bytes, all multi-byte fields
 * big-endian, followed by a variable payload whose length the header declares.
 *
 *   off 0..1  magic      u16 be, must be 0x5A47
 *   off 2     version    u8,      must be 2
 *   off 3     flags      u8,      the top nibble is reserved and must be zero
 *   off 4..7  stream_id  u32 be
 *   off 8..9  payload_len u16 be, must be <= 6 AND <= (len - 10)
 *   off 10..  payload    payload_len bytes
 *
 * Why this stresses a decompiler: the whole security property of this parser is
 * one relationship -- the DECLARED length must be bounded by the RECEIVED
 * length minus the header size -- and after lowering it is a single compare
 * between two registers whose provenance the decompiler has to reconstruct. The
 * two checks on `payload_len` are not redundant (one bounds the field against
 * the format's own maximum, one against the bytes actually present), and a
 * decompiler that merges them, drops either, flips the direction, or loses the
 * `- 10` produces C that still parses every valid frame identically and reads
 * out of bounds on a crafted one. Every rejection path returns a DISTINCT
 * negative code so a mis-recovered check shows up as the wrong code rather than
 * as a coin flip.
 *
 * The big-endian assembly is done with explicit shifts over individual bytes,
 * so no unaligned access and no host-endianness dependence exists anywhere.
 *
 * UB notes: every length is clamped into [0, 16] before it participates in
 * arithmetic; the declared length is compared as an unsigned before any cast to
 * int32_t; the payload loop is bounded by the validated declared length.
 */
#include <stddef.h>
#include <stdint.h>

#define HDR163_MAGIC        0x5A47u
#define HDR163_VERSION      2u
#define HDR163_HEADER_BYTES 10
#define HDR163_MAX_TOTAL    16
#define HDR163_MAX_PAYLOAD  6
#define HDR163_BAD_ID       0xFFFFFFFFu

_Static_assert(HDR163_HEADER_BYTES + HDR163_MAX_PAYLOAD <= HDR163_MAX_TOTAL,
               "a maximal frame must fit inside the clamped buffer bound");

/* Clamp a caller length into [0, HDR163_MAX_TOTAL] before any arithmetic. */
static int32_t hdr163_clamp(int32_t n) {
    if (n < 0) {
        return 0;
    }
    if (n > HDR163_MAX_TOTAL) {
        return HDR163_MAX_TOTAL;
    }
    return n;
}

/* Big-endian 16-bit assembly from two individual byte loads. */
static uint32_t hdr163_be16(const uint8_t *p) {
    return ((uint32_t)p[0] << 8) | (uint32_t)p[1];
}

/* Big-endian 32-bit assembly from four individual byte loads. */
static uint32_t hdr163_be32(const uint8_t *p) {
    return ((uint32_t)p[0] << 24) | ((uint32_t)p[1] << 16) |
           ((uint32_t)p[2] << 8) | (uint32_t)p[3];
}

/* The whole validation policy in one place. `limit` must already be clamped.
 * On success returns 0 and writes the declared payload length to *payload_len;
 * otherwise returns a distinct negative code and writes 0. */
static int32_t hdr163_check(const uint8_t *buf, int32_t limit,
                            int32_t *payload_len) {
    uint32_t declared;

    *payload_len = 0;
    if (limit < HDR163_HEADER_BYTES) {
        return -2; /* truncated before the fixed header ends */
    }
    if (hdr163_be16(buf + 0) != HDR163_MAGIC) {
        return -3; /* not our framing */
    }
    if ((uint32_t)buf[2] != HDR163_VERSION) {
        return -4; /* unsupported version */
    }
    if (((uint32_t)buf[3] & 0xF0u) != 0u) {
        return -5; /* reserved flag bits set */
    }
    declared = hdr163_be16(buf + 8);
    if (declared > (uint32_t)HDR163_MAX_PAYLOAD) {
        return -6; /* larger than the format allows */
    }
    if ((int32_t)declared > limit - HDR163_HEADER_BYTES) {
        return -7; /* larger than the bytes we actually received */
    }
    *payload_len = (int32_t)declared;
    return 0;
}

/* Validate a frame. Returns the declared payload length (0..6) when the frame
 * is well formed, or a distinct negative code. */
__attribute__((noinline)) int32_t
hdr163_validate(const uint8_t *buf, int32_t len) {
    int32_t payload_len = 0;
    int32_t rc;

    if (buf == NULL) {
        return -1;
    }
    rc = hdr163_check(buf, hdr163_clamp(len), &payload_len);
    return (rc != 0) ? rc : payload_len;
}

/* The big-endian 32-bit stream id, or 0xFFFFFFFF when the frame is rejected. */
__attribute__((noinline)) uint32_t
hdr163_stream_id(const uint8_t *buf, int32_t len) {
    int32_t payload_len = 0;

    if (buf == NULL) {
        return HDR163_BAD_ID;
    }
    if (hdr163_check(buf, hdr163_clamp(len), &payload_len) != 0) {
        return HDR163_BAD_ID;
    }
    return hdr163_be32(buf + 4);
}

/* Fold exactly `payload_len` payload bytes -- never one more, never one fewer.
 * Returns a positive summary, or the validation code. */
__attribute__((noinline)) int32_t
hdr163_payload_digest(const uint8_t *buf, int32_t len) {
    int32_t payload_len = 0;
    int32_t rc;
    int32_t i;
    uint32_t acc = 0x9E37u;

    if (buf == NULL) {
        return -1;
    }
    rc = hdr163_check(buf, hdr163_clamp(len), &payload_len);
    if (rc != 0) {
        return rc;
    }
    for (i = 0; i < payload_len; i++) {
        acc += (uint32_t)buf[HDR163_HEADER_BYTES + i];
        acc = (acc << 3) ^ (acc >> 29);
    }
    acc += (uint32_t)buf[3]; /* flags participate, so a dropped byte shows up */
    return 1000 + payload_len * 100 + (int32_t)(acc & 0x3FFu);
}

/* Copy the validated payload out to a caller buffer. Returns the number of
 * bytes copied (0..6), or a distinct negative code. */
__attribute__((noinline)) int32_t
hdr163_copy_payload(const uint8_t *buf, int32_t len, uint8_t *out,
                    int32_t out_len) {
    int32_t payload_len = 0;
    int32_t room = hdr163_clamp(out_len);
    int32_t rc;
    int32_t i;

    if (buf == NULL || out == NULL) {
        return -1;
    }
    rc = hdr163_check(buf, hdr163_clamp(len), &payload_len);
    if (rc != 0) {
        return rc;
    }
    if (payload_len > room) {
        return -8; /* the caller's sink is smaller than the declared payload */
    }
    for (i = 0; i < payload_len; i++) {
        out[i] = buf[HDR163_HEADER_BYTES + i];
    }
    return payload_len;
}

/* Emit a well-formed frame, so the accepting path is reachable without a
 * hand-built vector. Returns the total frame size, or a negative code. */
__attribute__((noinline)) int32_t
hdr163_build(uint8_t *out, int32_t out_len, uint32_t stream_id,
             int32_t payload_len) {
    int32_t room = hdr163_clamp(out_len);
    int32_t want = payload_len;
    int32_t total;
    int32_t i;

    if (out == NULL) {
        return -1;
    }
    if (want < 0) {
        want = 0;
    }
    if (want > HDR163_MAX_PAYLOAD) {
        want = HDR163_MAX_PAYLOAD;
    }
    total = HDR163_HEADER_BYTES + want;
    if (room < total) {
        return -2;
    }

    out[0] = (uint8_t)((HDR163_MAGIC >> 8) & 0xFFu);
    out[1] = (uint8_t)(HDR163_MAGIC & 0xFFu);
    out[2] = (uint8_t)HDR163_VERSION;
    out[3] = 0x03u;
    out[4] = (uint8_t)((stream_id >> 24) & 0xFFu);
    out[5] = (uint8_t)((stream_id >> 16) & 0xFFu);
    out[6] = (uint8_t)((stream_id >> 8) & 0xFFu);
    out[7] = (uint8_t)(stream_id & 0xFFu);
    out[8] = (uint8_t)(((uint32_t)want >> 8) & 0xFFu);
    out[9] = (uint8_t)((uint32_t)want & 0xFFu);
    for (i = 0; i < want; i++) {
        out[HDR163_HEADER_BYTES + i] = (uint8_t)(0x40u + (uint32_t)i);
    }
    return total;
}

Recovered C

Generated by glaurung decompile --style decbench at b47f6b43. baseline.json records the result after recompiling the C and calling it beside the original with seeded inputs.

clang -O0

5/5
hdr163_build pass 42 lines
// glaurung: hdr163_build @ 0x1550
int32_t hdr163_build(uint8_t * arg0, int32_t arg1, uint32_t arg2, int32_t arg3) {
    extern int hdr163_clamp(int);
    int room;
    int want;
    int total;
    int i;
    int var0;
    // x86-64 prologue: save rbp, frame 48 bytes
    var0 = hdr163_clamp((unsigned long)((unsigned int)(arg1)));
    room = var0;
    want = arg3;
    if ((arg0 != 0)) {
        if (((long)(want) < 0)) {
            want = 0;
        }
        if (((((unsigned long)((unsigned int)(want)) == 6) | ((long)(want) < 6)) == 0)) {
            want = 6;
        }
        total = ((unsigned int)(want) + 10);
        if ((total <= room)) {
            *(signed char *)((long)arg0) = 90;
            *(signed char *)(((long)arg0 + 0x1)) = 71;
            *(signed char *)(((long)arg0 + 0x2)) = 2;
            *(signed char *)(((long)arg0 + 0x3)) = 3;
            *(signed char *)(((long)arg0 + 0x4)) = ((unsigned int)(arg2) >> 24);
            *(signed char *)(((long)arg0 + 0x5)) = ((unsigned int)(arg2) >> 16);
            *(signed char *)(((long)arg0 + 0x6)) = ((unsigned int)(arg2) >> 8);
            *(signed char *)(((long)arg0 + 0x7)) = arg2;
            *(signed char *)(((long)arg0 + 0x8)) = ((unsigned long)((unsigned int)(want)) >> 8);
            *(signed char *)(((long)arg0 + 0x9)) = want;
            for (i = 0; (i < want); i++) {
                arg0[(long)((int)(((unsigned long)((unsigned int)(i)) + 10)))] = ((unsigned long)((unsigned int)(i)) + 64);
            }
            return (unsigned int)(total);
        } else {
            return (unsigned int)(-2);
        }
    } else {
        return (unsigned int)(-1);
    }
}
hdr163_copy_payload pass 44 lines
// glaurung: hdr163_copy_payload @ 0x1460
__attribute__((no_stack_protector)) int32_t hdr163_copy_payload(const uint8_t * arg0, int32_t arg1, uint8_t * arg2, int32_t arg3) {
    extern int hdr163_check(char *, int, int *);
    extern int hdr163_clamp(int);
    unsigned char payload_len[4];
    int room;
    int rc;
    int i;
    int local_4;
    int var0;
    int var3;
    int var5;
    long var7;
    // x86-64 prologue: save rbp, frame 64 bytes
    *(int *)(&payload_len[0]) = 0;
    var0 = hdr163_clamp((unsigned long)((unsigned int)(arg3)));
    room = var0;
    if ((arg0 == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    if ((arg2 == 0)) {
        local_4 = -1;
        // x86-64 epilogue: restore rbp
        return (unsigned int)(local_4);
    }
    var3 = hdr163_clamp((unsigned long)((unsigned int)(arg1)));
    var5 = hdr163_check((char *)(arg0), (unsigned long)((unsigned int)(var3)), (int *)(&payload_len[0]));
    rc = var5;
    if (((unsigned long)((unsigned int)(rc)) == 0)) {
        var7 = (unsigned long)((unsigned int)(*(int *)(&payload_len[0])));
        if ((((unsigned int)(var7) == (unsigned int)(room)) | ((long)((int)(var7)) < (long)(room)))) {
            for (i = 0; ((long)(i) < (long)((int)(*(int *)(&payload_len[0])))); i++) {
                arg2[i] = arg0[(long)((int)(((unsigned long)((unsigned int)(i)) + 10)))];
            }
            return (unsigned int)(*(int *)(&payload_len[0]));
        } else {
            return (unsigned int)(-8);
        }
    } else {
        return (unsigned int)(rc);
    }
}
hdr163_payload_digest pass 31 lines
// glaurung: hdr163_payload_digest @ 0x1370
__attribute__((no_stack_protector)) int32_t hdr163_payload_digest(const uint8_t * arg0, int32_t arg1) {
    extern int hdr163_check(char *, int, int *);
    extern int hdr163_clamp(int);
    unsigned char payload_len[4];
    unsigned int acc;
    int rc;
    int i;
    int var1;
    int var3;
    // x86-64 prologue: save rbp, frame 48 bytes
    *(int *)(&payload_len[0]) = 0;
    acc = 0x9e37;
    if ((arg0 != 0)) {
        var1 = hdr163_clamp((unsigned long)((unsigned int)(arg1)));
        var3 = hdr163_check((char *)(arg0), (unsigned long)((unsigned int)(var1)), (int *)(&payload_len[0]));
        rc = var3;
        if (((unsigned long)((unsigned int)(rc)) == 0)) {
            for (i = 0; ((long)(i) < (long)((int)(*(int *)(&payload_len[0])))); i++) {
                acc = ((unsigned int)((unsigned char)(arg0[(long)((int)(((unsigned long)((unsigned int)(i)) + 10)))])) + acc);
                acc = ((unsigned int)((acc << 3)) ^ (unsigned int)(((unsigned int)(acc) >> 29)));
            }
            acc = ((unsigned int)((unsigned char)(*(char *)(((long)arg0 + 0x3)))) + acc);
            return (unsigned int)(((unsigned long)((unsigned int)(((*(int *)(&payload_len[0]) * 100) + 1000))) + (unsigned long)((unsigned int)(((unsigned long)(acc) & 1023)))));
        } else {
            return (unsigned int)(rc);
        }
    } else {
        return (unsigned int)(-1);
    }
}
hdr163_stream_id pass 24 lines
// glaurung: hdr163_stream_id @ 0x12b0
__attribute__((no_stack_protector)) uint32_t hdr163_stream_id(const uint8_t * arg0, int32_t arg1) {
    extern unsigned int hdr163_be32(char *);
    extern int hdr163_check(char *, int, int *);
    extern int hdr163_clamp(int);
    unsigned char payload_len[4];
    int var1;
    int var3;
    unsigned int var6;
    // x86-64 prologue: save rbp, frame 32 bytes
    *(int *)(&payload_len[0]) = 0;
    if ((arg0 != 0)) {
        var1 = hdr163_clamp((unsigned long)((unsigned int)(arg1)));
        var3 = hdr163_check((char *)(arg0), (unsigned long)((unsigned int)(var1)), (int *)(&payload_len[0]));
        if (((unsigned long)((unsigned int)(var3)) == 0)) {
            var6 = hdr163_be32((char *)((arg0 + 4)));
            return (unsigned int)(var6);
        } else {
            return (unsigned int)(-1);
        }
    } else {
        return (unsigned int)(-1);
    }
}
hdr163_validate pass 21 lines
// glaurung: hdr163_validate @ 0x1100
__attribute__((no_stack_protector)) int32_t hdr163_validate(const uint8_t * arg0, int32_t arg1) {
    extern int hdr163_check(char *, int, int *);
    extern int hdr163_clamp(int);
    unsigned char payload_len[4];
    int rc;
    int local_2c;
    int var1;
    int var3;
    // x86-64 prologue: save rbp, frame 48 bytes
    *(int *)(&payload_len[0]) = 0;
    if ((arg0 != 0)) {
        var1 = hdr163_clamp((unsigned long)((unsigned int)(arg1)));
        var3 = hdr163_check((char *)(arg0), (unsigned long)((unsigned int)(var1)), (int *)(&payload_len[0]));
        rc = var3;
        local_2c = (((unsigned long)((unsigned int)(rc)) == 0) ? *(int *)(&payload_len[0]) : rc);
        return (unsigned int)(local_2c);
    } else {
        return (unsigned int)(-1);
    }
}

clang -O2

5/5
hdr163_build pass 56 lines
// glaurung: hdr163_build @ 0x13f0
int32_t hdr163_build(uint8_t * arg0, int32_t arg1, uint32_t arg2, int32_t arg3) {
    int want;
    int total;
    int i;
    int room;
    long ret;
    long var1;
    int var18;
    int var7;
    var1 = (((long)(arg1) < 16) ? arg1 : 16);
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    want = ((0 <= (long)(arg3)) ? arg3 : 0);
    var7 = (((unsigned long)((unsigned long)((unsigned int)(want))) < (unsigned long)(6)) ? want : 6);
    total = (unsigned long)((unsigned int)((var7 + 10)));
    ret = 0xfffffffe;
    if (((unsigned long)((unsigned long)((unsigned int)((((long)((int)(var1)) < 0) ? 0 : var1)))) < (unsigned long)((unsigned long)((unsigned int)(total))))) {
        return ret;
    }
    *(int *)(((long)arg0)) = 0x302475a;
    *(signed char *)(((long)arg0 + 0x4)) = ((unsigned int)(arg2) >> 24);
    *(signed char *)(((long)arg0 + 0x5)) = ((unsigned int)(arg2) >> 16);
    *(signed char *)(((long)arg0 + 0x6)) = ((unsigned int)(arg2) >> 8);
    *(signed char *)(((long)arg0 + 0x7)) = arg2;
    *(signed char *)(((long)arg0 + 0x8)) = 0;
    *(signed char *)(((long)arg0 + 0x9)) = var7;
    if (((((unsigned long)((unsigned int)(arg3)) == 0) | ((long)(arg3) < 0)) != 0)) {
        if (((unsigned long)((unsigned long)((unsigned int)(want))) < (unsigned long)(6))) {
            return (unsigned int)(total);
        }
    }
    *(signed char *)(((long)arg0 + 0xa)) = 64;
    var18 = ((2 <= (long)((int)(var7))) ? var7 : 1);
    if ((2 <= (long)((int)(var7)))) {
        *(signed char *)(((long)arg0 + 0xb)) = 65;
        if (((unsigned long)((unsigned int)(var18)) == 2)) {
            return (unsigned int)(total);
        }
        *(signed char *)(((long)arg0 + 0xc)) = 66;
        if (((unsigned long)((unsigned int)(var18)) == 3)) {
            return (unsigned int)(total);
        }
        *(signed char *)(((long)arg0 + 0xd)) = 67;
        if (((unsigned long)((unsigned int)(var18)) == 4)) {
            return (unsigned int)(total);
        }
        *(signed char *)(((long)arg0 + 0xe)) = 68;
        if (((unsigned long)((unsigned int)(var18)) == 5)) {
            return (unsigned int)(total);
        }
        *(signed char *)(((long)arg0 + 0xf)) = 69;
    }
    return (unsigned int)(total);
}
hdr163_copy_payload pass 74 lines
// glaurung: hdr163_copy_payload @ 0x12f0
int32_t hdr163_copy_payload(const uint8_t * arg0, int32_t arg1, uint8_t * arg2, int32_t arg3) {
    unsigned int declared;
    int i;
    int rc;
    int room;
    long ret;
    long var1;
    long var12;
    long var16;
    long var6;
    int var9;
    var1 = (((long)(arg3) < 16) ? arg3 : 16);
    ret = 0xffffffff;
    if ((arg0 == 0)) {
        return ret;
    }
    if ((arg2 == 0)) {
        return ret;
    }
    var6 = (((long)(arg1) < 16) ? arg1 : 16);
    var9 = ((0 <= (long)((int)(var6))) ? var6 : 0);
    ret = 0xfffffffe;
    if (((unsigned long)((unsigned long)((unsigned int)(var9))) < (unsigned long)(10))) {
        return ret;
    }
    var12 = (unsigned long)((unsigned int)(((unsigned int)((unsigned short)(*(short *)(((long)arg0)))) << 16)));
    ret = 0xfffffffd;
    if (((unsigned long)((unsigned int)(((((((unsigned int)(var12) & 255) << 24) | ((((unsigned int)(var12) >> 8) & 255) << 16)) | ((((unsigned int)(var12) >> 16) & 255) << 8)) | (((unsigned int)(var12) >> 24) & 255)))) != 0x5a47)) {
        return ret;
    }
    ret = 0xfffffffc;
    if (((unsigned long)((unsigned char)(*(char *)(((long)arg0 + 0x2)))) != 2)) {
        return ret;
    }
    ret = 0xfffffffb;
    if (((unsigned long)(15) < (unsigned long)((unsigned long)((unsigned char)(*(char *)(((long)arg0 + 0x3))))))) {
        return ret;
    }
    var16 = (unsigned long)((unsigned int)(((unsigned int)((unsigned short)(*(short *)(((long)arg0 + 0x8)))) << 16)));
    declared = (unsigned int)(((((((unsigned int)(var16) & 255) << 24) | ((((unsigned int)(var16) >> 8) & 255) << 16)) | ((((unsigned int)(var16) >> 16) & 255) << 8)) | (((unsigned int)(var16) >> 24) & 255)));
    ret = 0xfffffffa;
    if (((unsigned long)(6) < (unsigned long)(declared))) {
        return ret;
    }
    ret = 0xfffffff9;
    if (((unsigned long)((unsigned long)((unsigned int)((var9 - 10)))) < (unsigned long)(declared))) {
        return ret;
    }
    ret = 0xfffffff8;
    if (((unsigned long)((unsigned long)((unsigned int)(((0 <= (long)((int)(var1))) ? var1 : 0)))) < (unsigned long)(declared))) {
        return ret;
    }
    if ((declared == 0)) {
        return 0;
    }
    *(signed char *)(((long)arg2)) = *(char *)(((long)arg0 + 0xa));
    if ((declared != 1)) {
        *(signed char *)(((long)arg2 + 0x1)) = *(char *)(((long)arg0 + 0xb));
        if ((declared != 2)) {
            *(signed char *)(((long)arg2 + 0x2)) = *(char *)(((long)arg0 + 0xc));
            if ((declared != 3)) {
                *(signed char *)(((long)arg2 + 0x3)) = *(char *)(((long)arg0 + 0xd));
                if ((declared != 4)) {
                    *(signed char *)(((long)arg2 + 0x4)) = *(char *)(((long)arg0 + 0xe));
                    if ((declared != 5)) {
                        *(signed char *)(((long)arg2 + 0x5)) = *(char *)(((long)arg0 + 0xf));
                    }
                }
            }
        }
    }
    return declared;
}
hdr163_payload_digest pass 81 lines
// glaurung: hdr163_payload_digest @ 0x11e0
int32_t hdr163_payload_digest(const uint8_t * arg0, int32_t arg1) {
    unsigned int declared;
    unsigned int acc;
    int i;
    long ret;
    long var1;
    long var12;
    int var17;
    int var30;
    long var32;
    int var34;
    long var36;
    int var38;
    int var4;
    long var40;
    int var42;
    long var7;
    int var9;
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    var1 = (((long)(arg1) < 16) ? arg1 : 16);
    var4 = ((0 <= (long)((int)(var1))) ? var1 : 0);
    ret = 0xfffffffe;
    if (((unsigned long)((unsigned long)((unsigned int)(var4))) < (unsigned long)(10))) {
        return ret;
    }
    var7 = (unsigned long)((unsigned int)(((unsigned int)((unsigned short)(*(short *)(((long)arg0)))) << 16)));
    ret = 0xfffffffd;
    if (((unsigned long)((unsigned int)(((((((unsigned int)(var7) & 255) << 24) | ((((unsigned int)(var7) >> 8) & 255) << 16)) | ((((unsigned int)(var7) >> 16) & 255) << 8)) | (((unsigned int)(var7) >> 24) & 255)))) != 0x5a47)) {
        return ret;
    }
    ret = 0xfffffffc;
    if (((unsigned long)((unsigned char)(*(char *)(((long)arg0 + 0x2)))) != 2)) {
        return ret;
    }
    var9 = (unsigned int)((unsigned char)(*(char *)(((long)arg0 + 0x3))));
    ret = 0xfffffffb;
    if (((unsigned long)(15) < (unsigned long)((unsigned long)((unsigned int)(var9))))) {
        return ret;
    }
    var12 = (unsigned long)((unsigned int)(((unsigned int)((unsigned short)(*(short *)(((long)arg0 + 0x8)))) << 16)));
    declared = (unsigned int)(((((((unsigned int)(var12) & 255) << 24) | ((((unsigned int)(var12) >> 8) & 255) << 16)) | ((((unsigned int)(var12) >> 16) & 255) << 8)) | (((unsigned int)(var12) >> 24) & 255)));
    ret = 0xfffffffa;
    if (((unsigned long)(6) < (unsigned long)(declared))) {
        return ret;
    }
    ret = 0xfffffff9;
    if (((unsigned long)((unsigned long)((unsigned int)((var4 - 10)))) < (unsigned long)(declared))) {
        return ret;
    }
    if ((declared == 0)) {
        var17 = 0x9e37;
    } else {
        var17 = ((((unsigned long)(0x9e00) >> 29) | ((unsigned long)((unsigned int)(((unsigned int)((unsigned char)(*(char *)(((long)arg0 + 0xa)))) + 0x9e37))) << 3)) & 0xffffffff);
        if ((declared != 1)) {
            var17 = ((((unsigned long)(0x40000) >> 29) | ((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(var17)) + (unsigned int)((unsigned char)(*(char *)(((long)arg0 + 0xb))))))) << 3)) & 0xffffffff);
            if ((declared != 2)) {
                var30 = (var17 + (unsigned int)((unsigned char)(*(char *)(((long)arg0 + 0xc)))));
                var32 = (((unsigned long)((unsigned int)(var30)) << 3) | ((unsigned long)((unsigned int)(var30)) >> 29));
                var17 = var32;
                if ((declared != 3)) {
                    var34 = (var32 + (unsigned int)((unsigned char)(*(char *)(((long)arg0 + 0xd)))));
                    var36 = (((unsigned long)((unsigned int)(var34)) << 3) | ((unsigned long)((unsigned int)(var34)) >> 29));
                    var17 = var36;
                    if ((declared != 4)) {
                        var38 = (var36 + (unsigned int)((unsigned char)(*(char *)(((long)arg0 + 0xe)))));
                        var40 = (((unsigned long)((unsigned int)(var38)) << 3) | ((unsigned long)((unsigned int)(var38)) >> 29));
                        var17 = var40;
                        if ((declared != 5)) {
                            var42 = (var40 + (unsigned int)((unsigned char)(*(char *)(((long)arg0 + 0xf)))));
                            var17 = (((unsigned long)((unsigned int)(var42)) << 3) | ((unsigned long)((unsigned int)(var42)) >> 29));
                        }
                    }
                }
            }
        }
    }
    return (unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var17 + var9))) & 1023))) + (declared * 100)))) + 1000));
}
hdr163_stream_id pass 38 lines
// glaurung: hdr163_stream_id @ 0x1180
uint32_t hdr163_stream_id(const uint8_t * arg0, int32_t arg1) {
    unsigned int declared;
    long ret;
    long var1;
    long var11;
    long var15;
    int var4;
    long var7;
    ret = 0xffffffff;
    if ((arg0 != 0)) {
        var1 = (((long)(arg1) < 16) ? arg1 : 16);
        var4 = ((0 <= (long)((int)(var1))) ? var1 : 0);
        if (((unsigned long)((unsigned long)((unsigned int)(var4))) < (unsigned long)(10))) {
            return ret;
        }
        var7 = (unsigned long)((unsigned int)(((unsigned int)((unsigned short)(*(short *)(((long)arg0)))) << 16)));
        if (((unsigned long)((unsigned int)(((((((unsigned int)(var7) & 255) << 24) | ((((unsigned int)(var7) >> 8) & 255) << 16)) | ((((unsigned int)(var7) >> 16) & 255) << 8)) | (((unsigned int)(var7) >> 24) & 255)))) != 0x5a47)) {
            return ret;
        }
        if (((unsigned long)((unsigned char)(*(char *)(((long)arg0 + 0x2)))) != 2)) {
            return ret;
        }
        if (((unsigned long)(15) < (unsigned long)((unsigned long)((unsigned char)(*(char *)(((long)arg0 + 0x3))))))) {
            return ret;
        }
        var11 = (unsigned long)((unsigned int)(((unsigned int)((unsigned short)(*(short *)(((long)arg0 + 0x8)))) << 16)));
        declared = (unsigned int)(((((((unsigned int)(var11) & 255) << 24) | ((((unsigned int)(var11) >> 8) & 255) << 16)) | ((((unsigned int)(var11) >> 16) & 255) << 8)) | (((unsigned int)(var11) >> 24) & 255)));
        if (((unsigned long)(6) < (unsigned long)(declared))) {
            return ret;
        }
        if (((unsigned long)(declared) <= (unsigned long)((unsigned long)((unsigned int)((var4 - 10)))))) {
            var15 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4))));
            ret = (unsigned int)(((((((unsigned int)(var15) & 255) << 24) | ((((unsigned int)(var15) >> 8) & 255) << 16)) | ((((unsigned int)(var15) >> 16) & 255) << 8)) | (((unsigned int)(var15) >> 24) & 255)));
        }
    }
    return ret;
}
hdr163_validate pass 44 lines
// glaurung: hdr163_validate @ 0x1100
int32_t hdr163_validate(const uint8_t * arg0, int32_t arg1) {
    unsigned int declared;
    int rc;
    long ret;
    long var1;
    long var12;
    int var4;
    int var5;
    long var8;
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    var1 = (((long)(arg1) < 16) ? arg1 : 16);
    var4 = ((0 <= (long)((int)(var1))) ? var1 : 0);
    var5 = 0xfffffffe;
    if (((unsigned long)(10) <= (unsigned long)((unsigned long)((unsigned int)(var4))))) {
        var8 = (unsigned long)((unsigned int)(((unsigned int)((unsigned short)(*(short *)(((long)arg0)))) << 16)));
        var5 = 0xfffffffd;
        if (((unsigned long)((unsigned int)(((((((unsigned int)(var8) & 255) << 24) | ((((unsigned int)(var8) >> 8) & 255) << 16)) | ((((unsigned int)(var8) >> 16) & 255) << 8)) | (((unsigned int)(var8) >> 24) & 255)))) != 0x5a47)) {
            return (unsigned int)(var5);
        }
        var5 = 0xfffffffc;
        if (((unsigned long)((unsigned char)(*(char *)(((long)arg0 + 0x2)))) != 2)) {
            return (unsigned int)(var5);
        }
        var5 = 0xfffffffb;
        if (((unsigned long)(15) < (unsigned long)((unsigned long)((unsigned char)(*(char *)(((long)arg0 + 0x3))))))) {
            return (unsigned int)(var5);
        }
        var12 = (unsigned long)((unsigned int)(((unsigned int)((unsigned short)(*(short *)(((long)arg0 + 0x8)))) << 16)));
        declared = (unsigned int)(((((((unsigned int)(var12) & 255) << 24) | ((((unsigned int)(var12) >> 8) & 255) << 16)) | ((((unsigned int)(var12) >> 16) & 255) << 8)) | (((unsigned int)(var12) >> 24) & 255)));
        var5 = 0xfffffffa;
        if (((unsigned long)(6) < (unsigned long)(declared))) {
            return (unsigned int)(var5);
        }
        var5 = 0xfffffff9;
        ret = (unsigned long)(declared);
        if (((unsigned long)(declared) <= (unsigned long)((unsigned long)((unsigned int)((var4 - 10)))))) {
            return ret;
        }
    }
    return (unsigned int)(var5);
}

gcc -O0

5/5
hdr163_build pass 42 lines
// glaurung: hdr163_build @ 0x1541
int32_t hdr163_build(uint8_t * arg0, int32_t arg1, uint32_t arg2, int32_t arg3) {
    extern int hdr163_clamp(int);
    int room;
    int want;
    int total;
    int i;
    int var1;
    // x86-64 prologue: save rbp, frame 40 bytes
    var1 = hdr163_clamp((unsigned long)((unsigned int)(arg1)));
    room = var1;
    want = arg3;
    if ((arg0 != 0)) {
        if (((long)(want) < 0)) {
            want = 0;
        }
        if (((((unsigned long)((unsigned int)(want)) == 6) | ((long)(want) < 6)) == 0)) {
            want = 6;
        }
        total = ((unsigned int)(want) + 10);
        if ((total <= room)) {
            *(signed char *)((long)arg0) = 90;
            arg0[1] = 71;
            arg0[2] = 2;
            arg0[3] = 3;
            arg0[4] = ((unsigned int)(arg2) >> 24);
            arg0[5] = ((unsigned int)(arg2) >> 16);
            arg0[6] = ((unsigned int)(arg2) >> 8);
            arg0[7] = arg2;
            arg0[8] = ((unsigned long)((unsigned int)(want)) >> 8);
            arg0[9] = want;
            for (i = 0; (i < want); i++) {
                arg0[(long)((int)(((unsigned long)((unsigned int)(i)) + 10)))] = ((unsigned long)((unsigned int)(i)) + 64);
            }
            return (unsigned int)(total);
        } else {
            return 0xfffffffe;
        }
    } else {
        return 0xffffffff;
    }
}
hdr163_copy_payload pass 44 lines
// glaurung: hdr163_copy_payload @ 0x1464
int32_t hdr163_copy_payload(const uint8_t * arg0, int32_t arg1, uint8_t * arg2, int32_t arg3) {
    extern __attribute__((noreturn)) void __stack_chk_fail(void);
    extern int hdr163_check(char *, int, int *);
    extern int hdr163_clamp(int);
    unsigned char payload_len[4];
    int room;
    int rc;
    int i;
    long local_8;
    long ret;
    int var11;
    int var4;
    int var7;
    // x86-64 prologue: save rbp, frame 64 bytes
    local_8 = (long)(0x28);
    *(int *)(&payload_len[0]) = 0;
    var4 = hdr163_clamp((unsigned long)((unsigned int)(arg3)));
    room = var4;
    if (((arg0 == 0) || (arg2 == 0))) {
        ret = 0xffffffff;
    } else {
        var7 = hdr163_clamp((unsigned long)((unsigned int)(arg1)));
        var11 = hdr163_check((char *)(arg0), (unsigned long)((unsigned int)(var7)), (int *)(&payload_len[0]));
        rc = var11;
        if (((unsigned long)((unsigned int)(rc)) == 0)) {
            if (((long)((int)(*(int *)(&payload_len[0]))) <= (long)(room))) {
                for (i = 0; ((long)(i) < (long)((int)(*(int *)(&payload_len[0])))); i++) {
                    arg2[i] = arg0[(long)((int)(((unsigned long)((unsigned int)(i)) + 10)))];
                }
                ret = (unsigned long)((unsigned int)(*(int *)(&payload_len[0])));
            } else {
                ret = 0xfffffff8;
            }
        } else {
            ret = (unsigned long)((unsigned int)(rc));
        }
    }
    if ((local_8 != 0x28)) {
        __stack_chk_fail();
    }
    // x86-64 epilogue: restore rbp
    return ret;
}
hdr163_payload_digest pass 40 lines
// glaurung: hdr163_payload_digest @ 0x1388
int32_t hdr163_payload_digest(const uint8_t * arg0, int32_t arg1) {
    extern __attribute__((noreturn)) void __stack_chk_fail(void);
    extern int hdr163_check(char *, int, int *);
    extern int hdr163_clamp(int);
    unsigned char payload_len[4];
    unsigned int acc;
    int rc;
    int i;
    long local_8;
    long ret;
    int var4;
    int var8;
    // x86-64 prologue: save rbp, frame 48 bytes
    local_8 = (long)(0x28);
    *(int *)(&payload_len[0]) = 0;
    acc = 0x9e37;
    if ((arg0 != 0)) {
        var4 = hdr163_clamp((unsigned long)((unsigned int)(arg1)));
        var8 = hdr163_check((char *)(arg0), (unsigned long)((unsigned int)(var4)), (int *)(&payload_len[0]));
        rc = var8;
        if (((unsigned long)((unsigned int)(rc)) == 0)) {
            for (i = 0; ((long)(i) < (long)((int)(*(int *)(&payload_len[0])))); i++) {
                acc = (acc + (unsigned int)((unsigned char)(((unsigned int)((unsigned char)(arg0[(long)((int)(((unsigned long)((unsigned int)(i)) + 10)))])) & 255))));
                acc = ((acc << 3) | ((unsigned int)(acc) >> 29));
            }
            acc = (acc + (unsigned int)((unsigned char)(((unsigned int)((unsigned char)(arg0[3])) & 255))));
            ret = (unsigned long)((unsigned int)(((unsigned long)((unsigned int)((acc & 1023))) + (unsigned long)((unsigned int)((((unsigned long)((unsigned int)(*(int *)(&payload_len[0]))) * 100) + 1000))))));
        } else {
            ret = (unsigned long)((unsigned int)(rc));
        }
    } else {
        ret = 0xffffffff;
    }
    if ((local_8 != 0x28)) {
        __stack_chk_fail();
    }
    // x86-64 epilogue: restore rbp
    return ret;
}
hdr163_stream_id pass 33 lines
// glaurung: hdr163_stream_id @ 0x1302
uint32_t hdr163_stream_id(const uint8_t * arg0, int32_t arg1) {
    extern __attribute__((noreturn)) void __stack_chk_fail(void);
    extern unsigned int hdr163_be32(char *);
    extern int hdr163_check(char *, int, int *);
    extern int hdr163_clamp(int);
    unsigned char payload_len[4];
    long local_8;
    long ret;
    unsigned int var12;
    int var4;
    int var8;
    // x86-64 prologue: save rbp, frame 32 bytes
    local_8 = (long)(0x28);
    *(int *)(&payload_len[0]) = 0;
    if ((arg0 != 0)) {
        var4 = hdr163_clamp((unsigned long)((unsigned int)(arg1)));
        var8 = hdr163_check((char *)(arg0), (unsigned long)((unsigned int)(var4)), (int *)(&payload_len[0]));
        if (((unsigned long)((unsigned int)(var8)) == 0)) {
            var12 = hdr163_be32((char *)((arg0 + 4)));
            ret = (unsigned long)(var12);
        } else {
            ret = 0xffffffff;
        }
    } else {
        ret = 0xffffffff;
    }
    if ((local_8 != 0x28)) {
        __stack_chk_fail();
    }
    // x86-64 epilogue: restore rbp
    return ret;
}
hdr163_validate pass 28 lines
// glaurung: hdr163_validate @ 0x1286
int32_t hdr163_validate(const uint8_t * arg0, int32_t arg1) {
    extern __attribute__((noreturn)) void __stack_chk_fail(void);
    extern int hdr163_check(char *, int, int *);
    extern int hdr163_clamp(int);
    unsigned char payload_len[4];
    int rc;
    long local_8;
    long ret;
    int var4;
    int var8;
    // x86-64 prologue: save rbp, frame 32 bytes
    local_8 = (long)(0x28);
    *(int *)(&payload_len[0]) = 0;
    if ((arg0 != 0)) {
        var4 = hdr163_clamp((unsigned long)((unsigned int)(arg1)));
        var8 = hdr163_check((char *)(arg0), (unsigned long)((unsigned int)(var4)), (int *)(&payload_len[0]));
        rc = var8;
        ret = (((unsigned long)((unsigned int)(rc)) == 0) ? (unsigned long)((unsigned int)(*(int *)(&payload_len[0]))) : (unsigned long)((unsigned int)(rc)));
    } else {
        ret = 0xffffffff;
    }
    if ((local_8 != 0x28)) {
        __stack_chk_fail();
    }
    // x86-64 epilogue: restore rbp
    return ret;
}

gcc -O2

5/5
hdr163_build pass 35 lines
// glaurung: hdr163_build @ 0x1410
int32_t hdr163_build(uint8_t * arg0, int32_t arg1, uint32_t arg2, int32_t arg3) {
    int want;
    int total;
    int i;
    int room;
    long var1;
    long var15;
    long var2;
    long var9;
    var1 = (long)arg0;
    var2 = (((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) == 0) ? 16 : arg1);
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    var9 = ((((unsigned long)((unsigned int)(arg3)) == 6) | ((long)(arg3) < 6)) ? arg3 : 6);
    want = (((long)((int)(var9)) < 0) ? 0 : var9);
    total = (unsigned long)((unsigned int)((want + 10)));
    if (((((long)((int)(var2)) < 0) ? 0 : var2) < total)) {
        return 0xfffffffe;
    }
    *(int *)((long)arg0) = 0x302475a;
    *(int *)((var1 + 0x4)) = (((((arg2 & 255) << 24) | (((arg2 >> 8) & 255) << 16)) | (((arg2 >> 16) & 255) << 8)) | ((arg2 >> 24) & 255));
    *(signed char *)((var1 + 0x8)) = 0;
    *(signed char *)((var1 + 0x9)) = want;
    if ((((unsigned long)((unsigned int)(arg3)) != 0) && (0 <= (long)(arg3)))) {
        i = 0;
        do {
            *(signed char *)((var1 + i + 0xa)) = (i + 64);
            var15 = ((unsigned long)((unsigned int)(i)) + 1);
            i = var15;
        } while (((((unsigned int)(want) == (unsigned int)(var15)) | ((long)(want) < (long)((int)(var15)))) == 0));
    }
    return (unsigned int)(total);
}
hdr163_copy_payload pass 53 lines
// glaurung: hdr163_copy_payload @ 0x1350
int32_t hdr163_copy_payload(const uint8_t * arg0, int32_t arg1, uint8_t * arg2, int32_t arg3) {
    extern __attribute__((noreturn)) void __stack_chk_fail(void);
    extern int hdr163_check_constprop_0(char *, int, int *);
    unsigned char payload_len[4];
    int rc;
    int i;
    long local_10;
    int var10;
    long var12;
    int var15;
    long var17;
    long var21;
    long var4;
    long var6;
    local_10 = (long)(0x28);
    *(int *)(&payload_len[0]) = 0;
    if ((arg0 == 0)) {
        L_13ef: ;
        rc = 0xffffffff;
    } else {
        var4 = (long)arg2;
        if ((arg2 == 0)) {
            goto L_13ef;
        } else {
            var6 = (unsigned long)((unsigned int)(arg3));
            var10 = hdr163_check_constprop_0((char *)(arg0), (((long)((int)((((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) == 0) ? 16 : arg1))) < 0) ? 0 : (((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) == 0) ? 16 : arg1)), (int *)(&payload_len[0]));
            rc = (unsigned long)((unsigned int)(var10));
            if (((unsigned long)((unsigned int)(var10)) == 0)) {
                rc = (unsigned long)((unsigned int)(*(int *)(&payload_len[0])));
                var12 = ((((unsigned long)((unsigned int)(var6)) == 16) | ((long)((int)(var6)) < 16)) ? var6 : 16);
                var15 = (((long)((int)(var12)) < 0) ? 0 : var12);
                if (((((unsigned int)(rc) == (unsigned int)(var15)) | ((long)(rc) < (long)((int)(var15)))) == 0)) {
                    rc = 0xfffffff8;
                } else {
                    if (((((unsigned long)((unsigned int)(rc)) == 0) | ((long)(rc) < 0)) == 0)) {
                        var17 = (long)(rc);
                        i = 0;
                        do {
                            *(signed char *)((var4 + i)) = *(char *)(((long)arg0 + i + 0xa));
                            var21 = ((unsigned long)((unsigned int)(i)) + 1);
                            i = var21;
                        } while ((var21 != var17));
                    }
                }
            }
        }
    }
    if ((local_10 != 0x28)) {
        __stack_chk_fail();
    }
    return rc;
}
hdr163_payload_digest pass 48 lines
// glaurung: hdr163_payload_digest @ 0x1290
int32_t hdr163_payload_digest(const uint8_t * arg0, int32_t arg1) {
    extern __attribute__((noreturn)) void __stack_chk_fail(void);
    extern int hdr163_check_constprop_0(char *, int, int *);
    unsigned char payload_len[4];
    int rc;
    unsigned int acc;
    int i;
    long local_10;
    long var11;
    long var13;
    long var15;
    long var16;
    int var17;
    int var18;
    int var8;
    long var9;
    local_10 = (long)(0x28);
    *(int *)(&payload_len[0]) = 0;
    if ((arg0 == 0)) {
        rc = 0xffffffff;
    } else {
        var8 = hdr163_check_constprop_0((char *)(arg0), (((long)((int)((((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) == 0) ? 16 : arg1))) < 0) ? 0 : (((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) == 0) ? 16 : arg1)), (int *)(&payload_len[0]));
        rc = (unsigned long)((unsigned int)(var8));
        if (((unsigned long)((unsigned int)(var8)) == 0)) {
            var9 = (unsigned long)((unsigned int)(*(int *)(&payload_len[0])));
            if ((((unsigned long)((unsigned int)(var9)) == 0) | ((long)((int)(var9)) < 0))) {
                var11 = 0x9e37;
            } else {
                var13 = (long)((arg0 + 10));
                var15 = (long)(((unsigned long)((unsigned int)((var9 + 10))) + (long)arg0));
                var16 = 0x9e37;
                do {
                    var17 = (unsigned int)((unsigned char)(*(char *)((var13))));
                    var13 = (var13 + 1);
                    var18 = (var16 + var17);
                    var16 = (((unsigned long)((unsigned int)(var18)) << 3) | ((unsigned long)((unsigned int)(var18)) >> 29));
                    var11 = var16;
                } while ((var15 != var13));
            }
            rc = (unsigned long)((unsigned int)((((unsigned long)((unsigned int)(((unsigned long)((unsigned int)((var11 + (unsigned int)((unsigned char)(*(char *)(((long)arg0 + 0x3))))))) & 1023))) + (var9 * 100)) + 1000)));
        }
    }
    if ((local_10 != 0x28)) {
        __stack_chk_fail();
    }
    return rc;
}
hdr163_stream_id pass 37 lines
// glaurung: hdr163_stream_id @ 0x1230
uint32_t hdr163_stream_id(const uint8_t * arg0, int32_t arg1) {
    int payload_len;
    long t40;
    long var1;
    long var10;
    long var11;
    long var7;
    int var8;
    if ((arg0 != 0)) {
        var1 = ((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) ? arg1 : 16);
        if ((((unsigned long)((unsigned int)(arg1)) == 9) | ((long)(arg1) < 9))) {
            return 0xffffffff;
        }
        if (((unsigned long)((unsigned short)(*(short *)(((long)arg0)))) != 0x475a)) {
            return 0xffffffff;
        }
        if (((unsigned long)((unsigned char)(*(char *)(((long)arg0 + 0x2)))) != 2)) {
            return 0xffffffff;
        }
        if (((unsigned long)((unsigned char)((*(char *)(((long)arg0 + 0x3)) & -16))) != 0)) {
            return 0xffffffff;
        }
        t40 = ((unsigned int)((unsigned short)(*(short *)(((long)arg0 + 0x8)))) & 0xffff);
        var7 = (((t40 << 8) | ((unsigned long)(t40) >> 8)) & 0xffff);
        var8 = (unsigned int)((unsigned short)((var7 & 0xffff)));
        if (((unsigned long)(6) < (unsigned long)((unsigned long)((unsigned short)((var7 & 0xffff)))))) {
            return 0xffffffff;
        }
        var10 = (unsigned long)((unsigned int)(((((long)((int)(var1)) < 0) ? 0 : var1) - 9)));
        if (((((unsigned int)(var10) == (unsigned int)(var8)) | ((long)((int)(var10)) < (long)((int)(var8)))) == 0)) {
            var11 = (unsigned long)((unsigned int)(*(int *)(((long)arg0 + 0x4))));
            return (unsigned int)(((((((unsigned int)(var11) & 255) << 24) | ((((unsigned int)(var11) >> 8) & 255) << 16)) | ((((unsigned int)(var11) >> 16) & 255) << 8)) | (((unsigned int)(var11) >> 24) & 255)));
        }
    }
    return 0xffffffff;
}
hdr163_validate pass 33 lines
// glaurung: hdr163_validate @ 0x11a0
int32_t hdr163_validate(const uint8_t * arg0, int32_t arg1) {
    int payload_len;
    long t40;
    long var1;
    long var10;
    long var7;
    int var8;
    if ((arg0 == 0)) {
        return 0xffffffff;
    }
    var1 = ((((unsigned long)((unsigned int)(arg1)) == 16) | ((long)(arg1) < 16)) ? arg1 : 16);
    if ((((unsigned long)((unsigned int)(arg1)) == 9) | ((long)(arg1) < 9))) {
        return 0xfffffffe;
    }
    if (((unsigned long)((unsigned short)(*(short *)(((long)arg0)))) != 0x475a)) {
        return 0xfffffffd;
    }
    if (((unsigned long)((unsigned char)(*(char *)(((long)arg0 + 0x2)))) != 2)) {
        return 0xfffffffc;
    }
    if (((unsigned long)((unsigned char)((*(char *)(((long)arg0 + 0x3)) & -16))) != 0)) {
        return 0xfffffffb;
    }
    t40 = ((unsigned int)((unsigned short)(*(short *)(((long)arg0 + 0x8)))) & 0xffff);
    var7 = (((t40 << 8) | ((unsigned long)(t40) >> 8)) & 0xffff);
    var8 = (unsigned int)((unsigned short)((var7 & 0xffff)));
    if (((unsigned long)(6) < (unsigned long)((unsigned long)((unsigned short)((var7 & 0xffff)))))) {
        return 0xfffffffa;
    }
    var10 = (unsigned long)((unsigned int)(((((long)((int)(var1)) < 0) ? 0 : var1) - 9)));
    return ((((unsigned int)(var10) == (unsigned int)(var8)) | ((long)((int)(var10)) < (long)((int)(var8)))) ? 0xfffffff9 : var8);
}

← 213 fixtures