// // Test program to help demonstrate lexical_cast overflow bug // #include #include #include using namespace boost; using namespace std; int main(int argc, char** argv) { int rc = 0; // assume success // ------------Set up program options ---------------------- unsigned int number; // a number parameter program_options::options_description desc("Allowed options"); desc.add_options() ("help", "produce this help message") ("number", program_options::value(&number)->default_value(0), "a number parameter") ; try // boost throws an exception on a bad parameter { program_options::variables_map vm; program_options::store(program_options::parse_command_line(argc, argv, desc), vm); program_options::notify(vm); if ((argc <= 1) || (vm.count("help"))) { cout << "Usage: options_description [options]\n"; cout << desc; } else { cout << "The value this code thinks was supplied for --number was: " << number << endl; } } catch (const boost::program_options::error& error) { cout << "ERROR: " << error.what() << endl; cout << desc; rc = 2; } catch(const std::exception& error) { cout << "ERROR: " << error.what() << endl; rc = 2; } catch (...) { cout << "Unknown exception." << endl; rc = 2; } return rc; }