Fuzz puzzles
Are you ready to test your skills as a human fuzzer? Here’s a collection of puzzles where the objective is to find an input that leads to the execution of what appears to be dead code.
JavaScript
Puzzle 1: Cyclic ordering
function f(a, b, c) {
if (a < b && b < c && c < a) {
throw Error();
}
}
Goal: Find values for a
, b
and c
such that f(a,b,c)
throws an error.
Constraint: All input values should be of primitive type (i.e. not objects or arrays).
Puzzle 2: And but not Or
function f(a, b) {
if (a > b || a == b) {
return true;
} else if (a >= b) {
throw Error();
} else {
return false;
}
}
Goal: Find values for a
and b
such that f(a, b)
throws an error.
Constraint: All input values should be of primitive type (i.e. not objects or arrays).
Puzzle 3: Sort descending by default
function f(a, b) {
var min = a <= b ? a : b;
var max = a >= b ? a : b;
var [first, second] = [a, b].sort();
if (a != b && first === max && second === min) {
throw Error();
}
}
Goal: Find values for a
and b
such that f(a, b)
throws an error.
Constraint: All input values should be of primitive type (i.e. not objects or arrays).
Python
Puzzle 4: To be and not to be
def h(x, y):
return x is y+1
def g(x):
return h(x, x-1)
def f(x):
if g(x) and not g(x+1):
raise Exception()
Goal: Find a value for x
such that f(x)
raises an exception.
Constraint: The input value is of a primitive type (i.e. it is a number). Use the reference implementation of Python (aka CPython).
Hint: No solutions exist on some other implementations of Python such as PyPy.
Credit to Kevin Laeufer for introducing me to this phenemenon.