Find the bug before you read the fix.
One real bug a day, from a real fix commit. Questions you get right come back 1, 3, 7, 21 and 45 days later.
Today · day 1 · 10 min
Off-by-one between a column and an offset
0 of 40 chapters done
The path
Counting
- Off-by-one between a column and an offset 1
- Integer overflow in a NumPy element count 2
- Floating point error when converting dollars to cents 3
- Sizing a UTF-8 buffer with the string length 4
- Daylight saving time in monthly log rotation 5
- The last Thursday of February 6
- A remainder of zero 7
- One character past the template 8
Inputs
State and time
- Double-checked locking: assign the field last 17
- Thread names from an unlocked counter 18
- A missing await on asyncio.gather 19
- An idempotent StopContainer in containerd 20
- A rate limit key without the controller 21
- A loop variable captured by a goroutine 22
- Two signal handlers, pushed in the wrong order 23
- A fetch with no timeout 24
Resources
- A connection close skipped by a throw in finally 25
- An OAuth task still waiting at shutdown 26
- A timeupdate listener left on a removed audio element 27
- A lease heap that only the etcd leader empties 28
- A waker dropped while the JoinSet mutex is held 29
- Sidekiq drain_all loops on a job outside its default queue 30
- Copying a list from the head every time 31
- A connection counted but never pooled 32
Logic
- A locale that stays set 33
- A headers dict shared by every session 34
- An empty IV that passed the length check 35
- The cancel function that stays nil 36
- A config parse error reported as an unknown command 37
- Hashes that were never freed 38
- CAST5 CFB and OFB default to an 8-byte key 39
- An array that passes as a severity 40