Boost
C++ Libraries
...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
This is an older version of Boost and was released in 2022. The current version is 1.90.0.
It's way too easy to overlook the checking of parameters received from outside the current program.
// Copyright (c) 2018 Robert Ramey // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #include <stdexcept> #include <sstream> #include <iostream> #include <boost/safe_numerics/safe_integer.hpp> int main(int, const char *[]){ // problem: checking of externally produced value can be overlooked std::cout << "example 6: "; std::cout << "checking of externally produced value can be overlooked" << std::endl; std::cout << "Not using safe numerics" << std::endl; std::istringstream is("12317289372189 1231287389217389217893"); try{ int x, y; is >> x >> y; // get integer values from the user std::cout << x << ' ' << y << std::endl; std::cout << "error NOT detected!" << std::endl; } catch(const std::exception &){ std::cout << "error detected!" << std::endl; } // solution: assign externally retrieved values to safe equivalents std::cout << "Using safe numerics" << std::endl; { using namespace boost::safe_numerics; safe<int> x, y; is.seekg(0); try{ is >> x >> y; // get integer values from the user std::cout << x << ' ' << y << std::endl; std::cout << "error NOT detected!" << std::endl; } catch(const std::exception & e){ std::cout << "error detected:" << e.what() << std::endl; } } return 0; }
example 6: checking of externally produced value can be overlooked Not using safe numerics 2147483647 0 error NOT detected! Using safe numerics error detected:error in file input: domain error
Without safe integer, one will have to insert new code every time an integer variable is retrieved. This is a tedious and error prone procedure. Here we have used program input. But in fact this problem can occur with any externally produced input.