// Sadly boost::posix_time::to_time_t() was not added until 1.58,
// so do it ourselves.
ptime epoch(boost::gregorian::date(1970, 1, 1));
+ if (timestamp < epoch) {
+ isc_throw(isc::BadValue, "Time value is before the epoch");
+ }
+ ptime max_db_time = boost::posix_time::from_time_t(DatabaseConnection::MAX_DB_TIME);
time_duration::sec_type since_epoch = (timestamp - epoch).total_seconds();
time_t input_time(since_epoch);
-
- if (input_time > DatabaseConnection::MAX_DB_TIME) {
- isc_throw(isc::BadValue, "Time value is too large: " << input_time);
+ if (timestamp > max_db_time) {
+ isc_throw(isc::BadValue, "Time value is too large: " <<
+ (input_time < 0 ?
+ static_cast<int64_t>(static_cast<uint32_t>(input_time)) :
+ input_time));
}
// Converts to timestamp to local date/time string.
// Create an empty array.
PsqlBindArrayPtr bind_array(new PsqlBindArray());
+ // Make sure we catch values before the epoch.
+ ptime christmas1969(date(1969, Dec, 25));
+ ASSERT_THROW_MSG(bind_array->addTimestamp(christmas1969), BadValue,
+ "Time value is before the epoch");
+
// Make sure we catch values that are too big.
time_duration duration = hours(10) + minutes(14) + seconds(15);
ptime day_too_far(date(2038, Jan, 21), duration);