Defensive Programming
Input Validation
Validation checks incoming values before the rest of the program trusts them.
input validation
Defensive code chooses a safe path when input falls outside the allowed range.
Input Validation
input_validation.cpp
Replay: real traced execution (multi-file project)
#include <iostream>
int main() {
int requestedSeats = -2;
int fallbackSeats = 1;
int maxSeats = 6;
bool valid = requestedSeats >= 1 && requestedSeats <= maxSeats;
int seats = valid ? requestedSeats : fallbackSeats;
std::cout << "requestedSeats=" << requestedSeats << std::endl;
std::cout << "valid=" << valid << std::endl;
std::cout << "seats=" << seats << std::endl;
return 0;
}
#include <iostream>
int main() {
int requestedSeats = 2;
int fallbackSeats = 1;
int maxSeats = 6;
bool valid = requestedSeats >= 1 && requestedSeats <= maxSeats;
int seats = valid ? requestedSeats : fallbackSeats;
std::cout << "requestedSeats=" << requestedSeats << std::endl;
std::cout << "valid=" << valid << std::endl;
std::cout << "seats=" << seats << std::endl;
return 0;
}
#include <iostream>
int main() {
int requestedSeats = 8;
int fallbackSeats = 1;
int maxSeats = 6;
bool valid = requestedSeats >= 1 && requestedSeats <= maxSeats;
int seats = valid ? requestedSeats : fallbackSeats;
std::cout << "requestedSeats=" << requestedSeats << std::endl;
std::cout << "valid=" << valid << std::endl;
std::cout << "seats=" << seats << std::endl;
return 0;
}
requestedSeats ← -2, fallbackSeats ← 1, maxSeats ← 6, valid ← 0
3int main() {4 int requestedSeats→ -2 = -2; //@requestedSeats=2, 85 int fallbackSeats→ 1 = 1;6 int maxSeats→ 6 = 6;78 bool valid→ 0 = requestedSeats-2 >= 1 && requestedSeats <= maxSeats6;9 int seats→ 1 = valid0 ? requestedSeats-2 : fallbackSeats1;1011 std::cout << "requestedSeats=" << requestedSeats-2 << std::endl;12 std::cout << "valid=" << valid0 << std::endl;13 std::cout << "seats=" << seats1 << std::endl;14 return 0;15}outputrequestedSeats=-2 valid=0 seats=1
requestedSeats ← 2, fallbackSeats ← 1, maxSeats ← 6, valid ← 1
3int main() {4 int requestedSeats→ 2 = 2;5 int fallbackSeats→ 1 = 1;6 int maxSeats→ 6 = 6;78 bool valid→ 1 = requestedSeats2 >= 1 && requestedSeats <= maxSeats6;9 int seats→ 2 = valid1 ? requestedSeats2 : fallbackSeats1;1011 std::cout << "requestedSeats=" << requestedSeats2 << std::endl;12 std::cout << "valid=" << valid1 << std::endl;13 std::cout << "seats=" << seats2 << std::endl;14 return 0;15}outputrequestedSeats=2 valid=1 seats=2
requestedSeats ← 8, fallbackSeats ← 1, maxSeats ← 6, valid ← 0
3int main() {4 int requestedSeats→ 8 = 8;5 int fallbackSeats→ 1 = 1;6 int maxSeats→ 6 = 6;78 bool valid→ 0 = requestedSeats8 >= 1 && requestedSeats <= maxSeats6;9 int seats→ 1 = valid0 ? requestedSeats8 : fallbackSeats1;1011 std::cout << "requestedSeats=" << requestedSeats8 << std::endl;12 std::cout << "valid=" << valid0 << std::endl;13 std::cout << "seats=" << seats1 << std::endl;14 return 0;15}outputrequestedSeats=8 valid=0 seats=1