Challenge 1: The Full UB Catalog, With Origin Chapter and Trigger — Possible Solution ==================================================================== 1. SIGNED INTEGER OVERFLOW (c1-2). Triggered when a signed integer arithmetic operation (e.g. addition) produces a result exceeding the type's representable range -- e.g. adding 1 to INT_MAX. 2. OUT-OF-BOUNDS ARRAY ACCESS (c1-6). Triggered by reading or writing an array index outside its declared valid range, e.g. arr[10] on an array of size 5. 3. DEREFERENCING NULL OR A DANGLING POINTER (c1-7). Triggered by reading or writing through a pointer that is either NULL or points to memory that's already been freed or gone out of scope. 4. BUFFER OVERFLOW VIA strcpy (c1-8). Triggered when strcpy copies a source string longer than the destination buffer's actual size, since strcpy performs no bounds checking at all. 5. USE-AFTER-FREE, DOUBLE-FREE (c2-2, c2-3). Triggered by dereferencing a pointer after free() was called on it, or calling free() a second time on the same already-freed pointer. 6. READING THE "WRONG" UNION MEMBER (c2-1). Triggered, in most cases, by reading a union member other than the one most recently written to that union. 7. EXCESSIVE OR NEGATIVE SHIFTS (c3-1). Triggered by shifting a value by an amount greater than or equal to its type's bit width, or left-shifting a negative signed value. 8. AN UNPROTECTED DATA RACE (c3-3). Triggered when two threads access the same shared data concurrently, with at least one thread writing, and no synchronization (e.g. a mutex) coordinating the access. WHY THIS WORKS AS AN ANSWER ------------------------------ This lists every entry from the chapter's own catalog with its correct origin chapter and a precise, one-sentence trigger condition for each -- rather than a vague restatement -- confirming the specific mechanical action that causes each category of UB.