Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The oxymoron "safety by accident" came up in a conversation. It sounded very natural in context when we first mentioned it, and then we stopped for a second and realized it was kind of silly. The idea was that some code was flawed, but some unrelated thing just so happened to conveniently prevented the bug.
Some examples:
- When 2 bugs nullify each other. Fixing one bug may thus expose the other. This could happen with 2 off-by-one bugs canceling each other out; or perhaps a double-negative; or if a function returns the wrong value but nobody checks the return value.
- Code uses an undefined (or uninitalized) variable which conveniently happens to have a workable value.
- When a buggy codepath is avoided by some other unrelated check.
Code like this can be a maintenance nightmare; because while the behavior may be technically correct for current usage patterns, it's very brittle as usage patterns change.
Here's a simple example of 2 bugs nullifying each other:
static bool IsPositive(int x)
{
return x < 0; // bug #1, wrong check
}
static bool IsPositive(string s)
{
int x = -int.Parse(s); // Bug #2, parse gives inverted value.
return IsPositive(x);
}