FA-78906 / Image orientation metadata / Open access
Big-endian orientation SHORT is read as a LONG · case 01
Photos from big-endian (MM) writers always display unrotated while little-endian files work.
ROOT CAUSE
The value field is read as 32 bits; in MM files a left-justified SHORT 6 becomes 0x00060000 and is rejected as out of range.
VERIFIED REPAIR
Read a 16-bit value from the first two bytes of the value field for SHORT entries.
Unsuccessful approach: Reading the second half of the field picks up padding in both byte orders.
Case 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".
Why this case matters
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.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(data):
b = data
if len(b) < 14 or b[:6] != [69, 120, 105, 102, 0, 0]:
return 'malformed'
t = b[6:]
if t[:2] == [73, 73]:
le = True
elif t[:2] == [77, 77]:
le = False
else:
return 'malformed'
def u16(o):
if o + 2 > len(t):
return None
return t[o] | (t[o + 1] << 8) if le else (t[o] << 8) | t[o + 1]
def u32(o):
if o + 4 > len(t):
return None
v = t[o:o + 4]
if le:
v = v[::-1]
return (v[0] << 24) | (v[1] << 16) | (v[2] << 8) | v[3]
if u16(2) != 42:
return 'malformed'
ifd = u32(4)
count = u16(ifd)
if count is None:
return 'malformed'
for i in range(count):
e = ifd + 2 + 12 * i
if e + 12 > len(t):
return 'malformed'
tag = u16(e)
typ = u16(e + 2)
cnt = u32(e + 4)
if tag == 0x0112 and typ == 3 and cnt == 1:
val = u32(e + 8)
return val if 1 <= val <= 8 else 1
return 1
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 4, 1, 18, 0, 4, 0, 0, 0, 1, 0, 0, 0, 8, 1, 16, 0, 3, 0, 0, 0, 1, 1, 77, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 3, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 1, 10, 0, 0, 0, 0, 0, 0], 3], [[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, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 4, 1, 15, 0, 3, 0, 0, 0, 1, 1, 215, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 23, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 144, 0, 0, 0, 0, 0, 0], 6], [[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, 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, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 3, 1, 18, 0, 3, 0, 0, 0, 1, 0, 5, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 0, 155, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 58, 0, 0, 0, 0, 0, 0], 5]], [[[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 1, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0], 6], [[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, 77, 77, 0, 42, 0, 0, 0, 8, 0, 2, 1, 18, 0, 3, 0, 0, 0, 1, 0, 8, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 5, 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, 8, 0, 3, 1, 15, 0, 3, 0, 0, 0, 1, 1, 96, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 150], 1], [[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, 255, 77, 77, 0, 42, 0, 0, 0, 8, 0, 5, 1, 18, 0, 4, 0, 0, 0, 2, 0, 0, 0, 6, 1, 26, 0, 3, 0, 0, 0, 1, 1, 200, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 17, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 9, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 111, 0, 0, 0, 0, 0, 0], 'malformed'], [[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, 3, 0, 0, 0, 1, 0, 6, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 24, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 64, 0, 0, 0, 0, 0, 0], 6]], [[[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, 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, 242, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 8, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 214, 0, 0, 0, 0, 0, 0], 8], [[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, 5, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 174, 0, 0, 0, 0, 0, 0], 5], [[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, 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, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 2, 1, 26, 0, 3, 0, 0, 0, 1, 0, 126, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1], 'malformed'], [[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, 5, 1, 18, 0, 4, 0, 0, 0, 2, 0, 0, 0, 8, 1, 18, 0, 3, 0, 0, 0, 1, 0, 3, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 215, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 132, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 124], 3], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 3, 1, 15, 0, 3, 0, 0, 0, 1, 1, 171, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 3, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 47, 0], 3], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 1, 1, 18, 0, 3, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0], 7], [[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, 255, 225, 77, 77, 42, 0, 0, 0, 0, 8, 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, 77, 77, 0, 43, 0, 0, 0, 8, 0, 2, 1, 26, 0, 3, 0, 0, 0, 1, 0, 60, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 7, 0], 'malformed'], [[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, 82, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 1, 3, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0], 7]], [[[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, 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, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 1, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0], 6], [[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], 'malformed'], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 14, 0, 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, 8, 0, 3, 1, 16, 0, 3, 0, 0, 0, 1, 0, 214, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 228, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 173, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 2, 1, 18, 0, 3, 0, 0, 0, 1, 0, 2, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 135, 0, 0, 0, 0, 0, 0], 2]]]
labels = ["regression: SHORT value field width", "repair trap", "combined fault", "control", "control", "boundary", "boundary", "control"]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("%s %d" % (labels[i % len(labels)], i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: SHORT value field width 0 | 1 | 3 | Failed |
| repair trap 1 | 8 | 8 | Passed |
| combined fault 2 | 1 | 6 | Failed |
| control 3 | 1 | 1 | Passed |
| control 4 | malformed | malformed | Passed |
| boundary 5 | malformed | malformed | Passed |
| boundary 6 | 1 | 1 | Passed |
| control 7 | 1 | 5 | Failed |
SHA-256 / 1f87f0f005f755aa503e093a23553efea4adffd1a304e75216457fba7ccee727
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(data):
b = data
if len(b) < 14 or b[:6] != [69, 120, 105, 102, 0, 0]:
return 'malformed'
t = b[6:]
if t[:2] == [73, 73]:
le = True
elif t[:2] == [77, 77]:
le = False
else:
return 'malformed'
def u16(o):
if o + 2 > len(t):
return None
return t[o] | (t[o + 1] << 8) if le else (t[o] << 8) | t[o + 1]
def u32(o):
if o + 4 > len(t):
return None
v = t[o:o + 4]
if le:
v = v[::-1]
return (v[0] << 24) | (v[1] << 16) | (v[2] << 8) | v[3]
if u16(2) != 42:
return 'malformed'
ifd = u32(4)
count = u16(ifd)
if count is None:
return 'malformed'
for i in range(count):
e = ifd + 2 + 12 * i
if e + 12 > len(t):
return 'malformed'
tag = u16(e)
typ = u16(e + 2)
cnt = u32(e + 4)
if tag == 0x0112 and typ == 3 and cnt == 1:
val = u16(e + 10)
return val if 1 <= val <= 8 else 1
return 1
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 4, 1, 18, 0, 4, 0, 0, 0, 1, 0, 0, 0, 8, 1, 16, 0, 3, 0, 0, 0, 1, 1, 77, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 3, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 1, 10, 0, 0, 0, 0, 0, 0], 3], [[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, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 4, 1, 15, 0, 3, 0, 0, 0, 1, 1, 215, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 23, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 144, 0, 0, 0, 0, 0, 0], 6], [[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, 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, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 3, 1, 18, 0, 3, 0, 0, 0, 1, 0, 5, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 0, 155, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 58, 0, 0, 0, 0, 0, 0], 5]], [[[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 1, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0], 6], [[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, 77, 77, 0, 42, 0, 0, 0, 8, 0, 2, 1, 18, 0, 3, 0, 0, 0, 1, 0, 8, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 5, 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, 8, 0, 3, 1, 15, 0, 3, 0, 0, 0, 1, 1, 96, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 150], 1], [[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, 255, 77, 77, 0, 42, 0, 0, 0, 8, 0, 5, 1, 18, 0, 4, 0, 0, 0, 2, 0, 0, 0, 6, 1, 26, 0, 3, 0, 0, 0, 1, 1, 200, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 17, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 9, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 111, 0, 0, 0, 0, 0, 0], 'malformed'], [[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, 3, 0, 0, 0, 1, 0, 6, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 24, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 64, 0, 0, 0, 0, 0, 0], 6]], [[[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, 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, 242, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 8, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 214, 0, 0, 0, 0, 0, 0], 8], [[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, 5, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 174, 0, 0, 0, 0, 0, 0], 5], [[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, 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, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 2, 1, 26, 0, 3, 0, 0, 0, 1, 0, 126, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1], 'malformed'], [[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, 5, 1, 18, 0, 4, 0, 0, 0, 2, 0, 0, 0, 8, 1, 18, 0, 3, 0, 0, 0, 1, 0, 3, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 215, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 132, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 124], 3], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 3, 1, 15, 0, 3, 0, 0, 0, 1, 1, 171, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 3, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 47, 0], 3], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 1, 1, 18, 0, 3, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0], 7], [[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, 255, 225, 77, 77, 42, 0, 0, 0, 0, 8, 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, 77, 77, 0, 43, 0, 0, 0, 8, 0, 2, 1, 26, 0, 3, 0, 0, 0, 1, 0, 60, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 7, 0], 'malformed'], [[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, 82, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 1, 3, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0], 7]], [[[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, 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, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 1, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0], 6], [[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], 'malformed'], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 14, 0, 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, 8, 0, 3, 1, 16, 0, 3, 0, 0, 0, 1, 0, 214, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 228, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 173, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 2, 1, 18, 0, 3, 0, 0, 0, 1, 0, 2, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 135, 0, 0, 0, 0, 0, 0], 2]]]
labels = ["regression: SHORT value field width", "repair trap", "combined fault", "control", "control", "boundary", "boundary", "control"]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("%s %d" % (labels[i % len(labels)], i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: SHORT value field width 0 | 1 | 3 | Failed |
| repair trap 1 | 1 | 8 | Failed |
| combined fault 2 | 1 | 6 | Failed |
| control 3 | 1 | 1 | Passed |
| control 4 | malformed | malformed | Passed |
| boundary 5 | malformed | malformed | Passed |
| boundary 6 | 1 | 1 | Passed |
| control 7 | 1 | 5 | Failed |
SHA-256 / 60415d520710f3ffe736a269b35f6a619765d60098584098a677c9271f8aedf8
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(data):
b = data
if len(b) < 14 or b[:6] != [69, 120, 105, 102, 0, 0]:
return 'malformed'
t = b[6:]
if t[:2] == [73, 73]:
le = True
elif t[:2] == [77, 77]:
le = False
else:
return 'malformed'
def u16(o):
if o + 2 > len(t):
return None
return t[o] | (t[o + 1] << 8) if le else (t[o] << 8) | t[o + 1]
def u32(o):
if o + 4 > len(t):
return None
v = t[o:o + 4]
if le:
v = v[::-1]
return (v[0] << 24) | (v[1] << 16) | (v[2] << 8) | v[3]
if u16(2) != 42:
return 'malformed'
ifd = u32(4)
count = u16(ifd)
if count is None:
return 'malformed'
for i in range(count):
e = ifd + 2 + 12 * i
if e + 12 > len(t):
return 'malformed'
tag = u16(e)
typ = u16(e + 2)
cnt = u32(e + 4)
if tag == 0x0112 and typ == 3 and cnt == 1:
val = u16(e + 8)
return val if 1 <= val <= 8 else 1
return 1
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[[[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 4, 1, 18, 0, 4, 0, 0, 0, 1, 0, 0, 0, 8, 1, 16, 0, 3, 0, 0, 0, 1, 1, 77, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 3, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 1, 10, 0, 0, 0, 0, 0, 0], 3], [[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, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 4, 1, 15, 0, 3, 0, 0, 0, 1, 1, 215, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 23, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 144, 0, 0, 0, 0, 0, 0], 6], [[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, 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, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 3, 1, 18, 0, 3, 0, 0, 0, 1, 0, 5, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 0, 155, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 58, 0, 0, 0, 0, 0, 0], 5]], [[[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 1, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0], 6], [[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, 77, 77, 0, 42, 0, 0, 0, 8, 0, 2, 1, 18, 0, 3, 0, 0, 0, 1, 0, 8, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 5, 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, 8, 0, 3, 1, 15, 0, 3, 0, 0, 0, 1, 1, 96, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 0, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 150], 1], [[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, 255, 77, 77, 0, 42, 0, 0, 0, 8, 0, 5, 1, 18, 0, 4, 0, 0, 0, 2, 0, 0, 0, 6, 1, 26, 0, 3, 0, 0, 0, 1, 1, 200, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 17, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 9, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 111, 0, 0, 0, 0, 0, 0], 'malformed'], [[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, 3, 0, 0, 0, 1, 0, 6, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 24, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 64, 0, 0, 0, 0, 0, 0], 6]], [[[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, 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, 242, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 8, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 214, 0, 0, 0, 0, 0, 0], 8], [[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, 5, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 174, 0, 0, 0, 0, 0, 0], 5], [[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, 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, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 2, 1, 26, 0, 3, 0, 0, 0, 1, 0, 126, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1], 'malformed'], [[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, 5, 1, 18, 0, 4, 0, 0, 0, 2, 0, 0, 0, 8, 1, 18, 0, 3, 0, 0, 0, 1, 0, 3, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 215, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 0, 132, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 124], 3], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 10, 0, 0, 0, 3, 1, 15, 0, 3, 0, 0, 0, 1, 1, 171, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 3, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 1, 47, 0], 3], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 1, 1, 18, 0, 3, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0], 7], [[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, 255, 225, 77, 77, 42, 0, 0, 0, 0, 8, 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, 77, 77, 0, 43, 0, 0, 0, 8, 0, 2, 1, 26, 0, 3, 0, 0, 0, 1, 0, 60, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 7, 0], 'malformed'], [[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, 82, 0, 0, 1, 26, 0, 3, 0, 0, 0, 1, 1, 3, 0, 0, 1, 18, 0, 3, 0, 0, 0, 1, 0, 7, 0, 0, 0, 0, 0, 0], 7]], [[[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, 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, 77, 77, 0, 42, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 1, 1, 18, 0, 3, 0, 0, 0, 1, 0, 6, 0, 0, 0, 0, 0, 0], 6], [[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], 'malformed'], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 14, 0, 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, 8, 0, 3, 1, 16, 0, 3, 0, 0, 0, 1, 0, 214, 0, 0, 1, 16, 0, 3, 0, 0, 0, 1, 0, 228, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 173, 0, 0, 0, 0, 0, 0], 1], [[69, 120, 105, 102, 0, 0, 77, 77, 0, 42, 0, 0, 0, 8, 0, 2, 1, 18, 0, 3, 0, 0, 0, 1, 0, 2, 0, 0, 1, 15, 0, 3, 0, 0, 0, 1, 1, 135, 0, 0, 0, 0, 0, 0], 2]]]
labels = ["regression: SHORT value field width", "repair trap", "combined fault", "control", "control", "boundary", "boundary", "control"]
for i, (args, expected) in enumerate(fixtures[N-1]):
check("%s %d" % (labels[i % len(labels)], i), solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: SHORT value field width 0 | 3 | 3 | Passed |
| repair trap 1 | 8 | 8 | Passed |
| combined fault 2 | 6 | 6 | Passed |
| control 3 | 1 | 1 | Passed |
| control 4 | malformed | malformed | Passed |
| boundary 5 | malformed | malformed | Passed |
| boundary 6 | 1 | 1 | Passed |
| control 7 | 5 | 5 | Passed |
SHA-256 / 7dc7ac989d989825d4b2d9f9be0303d60a03a5b4457e85d9c58a18b99fe3f7c6
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:49:39.839287+00:00.
Case digest / 429aeb93fce3f0a9493541bb58060c9829a811b9ae60b95b8927a17f52df740f