{"abstract":"Files that write orientation 0 propagate an invalid tag to renderers.","category":"Image orientation metadata","checks":8,"contract":"Parse the orientation from an APP1 Exif payload given as a list of byte values: a 6-byte \"Exif\\0\\0\" header, then a TIFF header (II little-endian or MM big-endian, magic 42 as a 16-bit value, 32-bit IFD0 offset relative to the TIFF header). Scan IFD0 12-byte entries; the first entry with tag 0x0112, type SHORT (3) and count 1 supplies the value from the first two bytes of its value field. Values outside 1..8 and a missing entry yield 1; structural problems (short payload, bad header, byte order, magic, truncated entry) yield \"malformed\".","contract_signature":"data","evaluation_group":"w2-image-orientation-metadata-tiff-ifd0-parse","failed_approach":"An exclusive upper bound discards the valid tag 8.","family":"w2-image-orientation-metadata-tiff-ifd0-parse-value-range","id":"FA-78936","implementations":{"attempt":{"sha256":"6fe226da99cfee054a0c02040a482e5b63410caa3989efebece84c13db35bd4b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(data):\n    b = data\n    if len(b) < 14 or b[:6] != [69, 120, 105, 102, 0, 0]:\n        return 'malformed'\n    t = b[6:]\n    if t[:2] == [73, 73]:\n        le = True\n    elif t[:2] == [77, 77]:\n        le = False\n    else:\n        return 'malformed'\n    def u16(o):\n        if o + 2 > len(t):\n            return None\n        return t[o] | (t[o + 1] << 8) if le else (t[o] << 8) | t[o + 1]\n    def u32(o):\n        if o + 4 > len(t):\n            return None\n        v = t[o:o + 4]\n        if le:\n            v = v[::-1]\n        return (v[0] << 24) | (v[1] << 16) | (v[2] << 8) | v[3]\n    if u16(2) != 42:\n        return 'malformed'\n    ifd = u32(4)\n    count = u16(ifd)\n    if count is None:\n        return 'malformed'\n    for i in range(count):\n        e = ifd + 2 + 12 * i\n        if e + 12 > len(t):\n            return 'malformed'\n        tag = u16(e)\n        typ = u16(e + 2)\n        cnt = u32(e + 4)\n        if tag == 0x0112 and typ == 3 and cnt == 1:\n            val = u16(e + 8)\n            return val if 1 <= val < 8 else 1\n    return 1\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 3, 1, 15, 0, 3, 0, 0, 0, 1, 0, 7, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 114, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 4, 0, 18, 1, 3, 0, 1, 0, 0, 0, 8, 0, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 3, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 94, 1, 0, 0, 16, 1, 3, 0, 1, 0], 8], [[69, 120, 105, 102, 0, 0, 73, 73, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 26, 1, 3, 0, 1, 0, 0, 0, 126, 1, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 43, 0, 0, 0, 8, 0, 1, 1, 18, 0, 3, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 2, 0, 15, 1, 3, 0, 1, 0, 0, 0, 73, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 2, 0, 16, 1, 3, 0, 1, 0, 0, 0, 247, 0, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 124, 1, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 255, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 1, 1, 18, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 3, 0, 15, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0], 1]], [[[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 1, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 3, 0, 16, 1, 3, 0, 1, 0, 0, 0, 158, 1, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 70, 0, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0], 8], [[69, 120, 105, 102, 0, 255, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 2, 1, 18, 0, 3, 0, 0, 0, 1, 0, 1, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 46, 0, 0, 0, 0, 0, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 5, 1, 18, 0, 4, 0, 0, 0, 2, 0, 0, 0, 8, 1, 26, 0, 3, 0, 0, 0, 1, 1, 15, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 0, 190, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 77, 0, 0, 0, 0, 0, 0], 6], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 1, 0, 18, 1, 3, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0], 4], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 3, 0, 18, 1, 3, 0, 1, 0, 0, 0, 7, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 181, 1, 0, 0, 16, 1, 3, 0, 1, 0, 0, 0, 34, 1, 0, 0, 0, 0, 0, 0], 7], [[69, 120, 105, 102, 0, 0, 73, 73, 43, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 1, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1]], [[[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 2, 0, 16, 1, 3, 0, 1, 0, 0, 0, 36, 1, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 2, 1, 18, 0, 3, 0, 0, 0, 1, 0, 8, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0], 8], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 4, 1, 18, 0, 3, 0, 0, 0, 1, 0, 9, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 1, 115, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 244, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 186, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 1, 1, 18, 0, 4, 0, 0, 0, 2, 0, 0, 0, 6], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 4, 1, 18, 0, 3, 0, 0, 0, 2, 0, 3, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 0, 195, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 238, 0, 0, 0, 0, 0, 0], 6], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 18, 1, 4, 0, 2, 0, 0, 0, 8, 0, 0, 0, 16, 1, 3, 0, 1, 0, 0, 0, 133, 1, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 3, 0, 16, 1, 3, 0, 1, 0, 0, 0, 105, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 145, 1, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1]], [[[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 4, 0, 16, 1, 3, 0, 1, 0, 0, 0, 23, 1, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 134, 0, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 159, 0, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 2, 0, 18, 1, 3, 0, 1, 0, 0, 0, 8, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 120, 1, 0], 8], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 3, 1, 26, 0, 3, 0, 0, 0, 1, 1, 79, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 177, 0, 0, 1, 26, 0, 3, 0, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 3, 0, 26, 1, 3, 0, 1, 0, 0, 0, 17, 0, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 37, 1, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 1, 1, 15, 0, 3], 'malformed'], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 4, 0, 18, 1, 3, 0, 1, 0, 0, 0, 6, 0, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 147, 0, 0, 0, 16, 1, 3, 0, 1, 0, 0, 0, 88, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 151, 1, 0, 0, 0, 0, 0, 0], 6], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 18, 1, 3, 0, 2, 0, 0, 0, 8, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 6, 1, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 125, 1, 0, 0, 16, 1, 3, 0, 1, 0, 0, 0, 225, 1, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0], 5], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16, 1, 3, 0, 1, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0], 1]], [[[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 3, 1, 18, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 1, 16, 0, 3, 0, 0, 0, 1, 1, 154, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 2, 1, 18, 0, 3, 0, 0, 0, 1, 0, 8, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 171, 0, 0, 0, 0, 0, 0], 8], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 2, 0, 15, 1, 3, 0, 1, 0, 0, 0, 215, 1, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0], 7], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 4, 1, 18, 0, 3, 0, 0, 0, 2, 0, 8, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 0, 173, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 83, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 181, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 3, 1, 16, 0, 3, 0, 0, 0, 1, 0, 196, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 1, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 141, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 1, 0, 18, 1, 3, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0], 7], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 3, 0, 15, 1, 3, 0, 1, 0, 0, 0, 119, 0, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0], 1]]]\nlabels = [\"regression: orientation value range\", \"repair trap\", \"combined fault\", \"control\", \"control\", \"boundary\", \"boundary\", \"control\"]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (labels[i % len(labels)], i), solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"e1a1ce484653521ec9836193ae06c4cbe2c1cbf52a7d6488487b516aaaa36bb0","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(data):\n    b = data\n    if len(b) < 14 or b[:6] != [69, 120, 105, 102, 0, 0]:\n        return 'malformed'\n    t = b[6:]\n    if t[:2] == [73, 73]:\n        le = True\n    elif t[:2] == [77, 77]:\n        le = False\n    else:\n        return 'malformed'\n    def u16(o):\n        if o + 2 > len(t):\n            return None\n        return t[o] | (t[o + 1] << 8) if le else (t[o] << 8) | t[o + 1]\n    def u32(o):\n        if o + 4 > len(t):\n            return None\n        v = t[o:o + 4]\n        if le:\n            v = v[::-1]\n        return (v[0] << 24) | (v[1] << 16) | (v[2] << 8) | v[3]\n    if u16(2) != 42:\n        return 'malformed'\n    ifd = u32(4)\n    count = u16(ifd)\n    if count is None:\n        return 'malformed'\n    for i in range(count):\n        e = ifd + 2 + 12 * i\n        if e + 12 > len(t):\n            return 'malformed'\n        tag = u16(e)\n        typ = u16(e + 2)\n        cnt = u32(e + 4)\n        if tag == 0x0112 and typ == 3 and cnt == 1:\n            val = u16(e + 8)\n            return val if 0 <= val <= 8 else 1\n    return 1\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[[[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 3, 1, 15, 0, 3, 0, 0, 0, 1, 0, 7, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 114, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 4, 0, 18, 1, 3, 0, 1, 0, 0, 0, 8, 0, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 3, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 94, 1, 0, 0, 16, 1, 3, 0, 1, 0], 8], [[69, 120, 105, 102, 0, 0, 73, 73, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 26, 1, 3, 0, 1, 0, 0, 0, 126, 1, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 43, 0, 0, 0, 8, 0, 1, 1, 18, 0, 3, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 2, 0, 15, 1, 3, 0, 1, 0, 0, 0, 73, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 2, 0, 16, 1, 3, 0, 1, 0, 0, 0, 247, 0, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 124, 1, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 255, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 1, 1, 18, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 3, 0, 15, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 111, 0, 0, 0, 0, 0, 0, 0], 1]], [[[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 1, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 3, 0, 16, 1, 3, 0, 1, 0, 0, 0, 158, 1, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 70, 0, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0], 8], [[69, 120, 105, 102, 0, 255, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 2, 1, 18, 0, 3, 0, 0, 0, 1, 0, 1, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 46, 0, 0, 0, 0, 0, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 5, 1, 18, 0, 4, 0, 0, 0, 2, 0, 0, 0, 8, 1, 26, 0, 3, 0, 0, 0, 1, 1, 15, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 0, 190, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 77, 0, 0, 0, 0, 0, 0], 6], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 1, 0, 18, 1, 3, 0, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0], 4], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 3, 0, 18, 1, 3, 0, 1, 0, 0, 0, 7, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 181, 1, 0, 0, 16, 1, 3, 0, 1, 0, 0, 0, 34, 1, 0, 0, 0, 0, 0, 0], 7], [[69, 120, 105, 102, 0, 0, 73, 73, 43, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 1, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1]], [[[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 2, 0, 16, 1, 3, 0, 1, 0, 0, 0, 36, 1, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 2, 1, 18, 0, 3, 0, 0, 0, 1, 0, 8, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0], 8], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 4, 1, 18, 0, 3, 0, 0, 0, 1, 0, 9, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 1, 115, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 244, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 186, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 1, 1, 18, 0, 4, 0, 0, 0, 2, 0, 0, 0, 6], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 4, 1, 18, 0, 3, 0, 0, 0, 2, 0, 3, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 0, 195, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 238, 0, 0, 0, 0, 0, 0], 6], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 18, 1, 4, 0, 2, 0, 0, 0, 8, 0, 0, 0, 16, 1, 3, 0, 1, 0, 0, 0, 133, 1, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 3, 0, 16, 1, 3, 0, 1, 0, 0, 0, 105, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 145, 1, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1]], [[[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 4, 0, 16, 1, 3, 0, 1, 0, 0, 0, 23, 1, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 134, 0, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 159, 0, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 2, 0, 18, 1, 3, 0, 1, 0, 0, 0, 8, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 120, 1, 0], 8], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 3, 1, 26, 0, 3, 0, 0, 0, 1, 1, 79, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 177, 0, 0, 1, 26, 0, 3, 0, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 3, 0, 26, 1, 3, 0, 1, 0, 0, 0, 17, 0, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 37, 1, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 233, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 1, 1, 15, 0, 3], 'malformed'], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 4, 0, 18, 1, 3, 0, 1, 0, 0, 0, 6, 0, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 147, 0, 0, 0, 16, 1, 3, 0, 1, 0, 0, 0, 88, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 151, 1, 0, 0, 0, 0, 0, 0], 6], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 18, 1, 3, 0, 2, 0, 0, 0, 8, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 6, 1, 0, 0, 15, 1, 3, 0, 1, 0, 0, 0, 125, 1, 0, 0, 16, 1, 3, 0, 1, 0, 0, 0, 225, 1, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0], 5], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16, 1, 3, 0, 1, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0], 1]], [[[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 3, 1, 18, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 1, 16, 0, 3, 0, 0, 0, 1, 1, 154, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 2, 1, 18, 0, 3, 0, 0, 0, 1, 0, 8, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 171, 0, 0, 0, 0, 0, 0], 8], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 2, 0, 15, 1, 3, 0, 1, 0, 0, 0, 215, 1, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0], 7], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 4, 1, 18, 0, 3, 0, 0, 0, 2, 0, 8, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 0, 173, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 83, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 181, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 3, 1, 16, 0, 3, 0, 0, 0, 1, 0, 196, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 1, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 141, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0, 0, 1, 0, 18, 1, 3, 0, 1, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0], 7], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 10, 0, 0, 0, 0], 'malformed'], [[69, 120, 105, 102, 0, 0, 73, 73, 42, 0, 8, 0, 0, 0, 3, 0, 15, 1, 3, 0, 1, 0, 0, 0, 119, 0, 0, 0, 18, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 26, 1, 3, 0, 1, 0, 0, 0, 210, 0, 0, 0, 0, 0, 0, 0], 1]]]\nlabels = [\"regression: orientation value range\", \"repair trap\", \"combined fault\", \"control\", \"control\", \"boundary\", \"boundary\", \"control\"]\nfor i, (args, expected) in enumerate(fixtures[N-1]):\n    check(\"%s %d\" % (labels[i % len(labels)], i), solve(args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"A deterministic bounded teaching model with a stipulated contract; it makes no claim of conformance to any published specification. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-image-orientation-metadata-tiff-ifd0-parse-value-range","generated_at":"2026-09-29T14:49:39.888923+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Camera, phone and scanner images carry an orientation hint separately from the stored pixels; galleries, thumbnailers, editors and upload pipelines must interpret it consistently or photos appear sideways, mirrored or doubly rotated.","root_cause":"The accepted range starts at 0, so the undefined value 0 is returned instead of the default 1.","sha256":"eb53fe9c2ec714f3ef0af508ec816934dc18d02bca382479069dd312ff3561af","title":"Orientation value zero passes through the parser · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":40.036,"exit_code":1,"observations":[{"actual":1,"check":"regression: orientation value range 0","expected":1,"passed":true},{"actual":1,"check":"repair trap 1","expected":8,"passed":false},{"actual":"malformed","check":"combined fault 2","expected":"malformed","passed":true},{"actual":"malformed","check":"control 3","expected":"malformed","passed":true},{"actual":1,"check":"control 4","expected":1,"passed":true},{"actual":1,"check":"boundary 5","expected":1,"passed":true},{"actual":"malformed","check":"boundary 6","expected":"malformed","passed":true},{"actual":1,"check":"control 7","expected":1,"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: orientation value range 0\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"repair trap 1\", \"actual\": 1, \"expected\": 8, \"passed\": false}, {\"check\": \"combined fault 2\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control 3\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control 4\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control 7\", \"actual\": 1, \"expected\": 1, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.419,"exit_code":1,"observations":[{"actual":0,"check":"regression: orientation value range 0","expected":1,"passed":false},{"actual":8,"check":"repair trap 1","expected":8,"passed":true},{"actual":"malformed","check":"combined fault 2","expected":"malformed","passed":true},{"actual":"malformed","check":"control 3","expected":"malformed","passed":true},{"actual":1,"check":"control 4","expected":1,"passed":true},{"actual":1,"check":"boundary 5","expected":1,"passed":true},{"actual":"malformed","check":"boundary 6","expected":"malformed","passed":true},{"actual":0,"check":"control 7","expected":1,"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: orientation value range 0\", \"actual\": 0, \"expected\": 1, \"passed\": false}, {\"check\": \"repair trap 1\", \"actual\": 8, \"expected\": 8, \"passed\": true}, {\"check\": \"combined fault 2\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control 3\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control 4\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"boundary 5\", \"actual\": 1, \"expected\": 1, \"passed\": true}, {\"check\": \"boundary 6\", \"actual\": \"malformed\", \"expected\": \"malformed\", \"passed\": true}, {\"check\": \"control 7\", \"actual\": 0, \"expected\": 1, \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}