test_urldecode can print the following confusing message because strerror may be using a static buffer and therefore the two calls to xstrerror (and therefore strerror) as arguments to the fprintf will point to the same string.
test_inputs: iter = 6...TEST FAILED: urldecode failed with wrong error; expected 'Programming error', got 'Programming error'
See #34 about implementing xstrerror_r.