From eed183fbd5d121049d5965d7c60abd65f44d0376 Mon Sep 17 00:00:00 2001
From: Tobias Markmann <tm@ayena.de>
Date: Mon, 21 Sep 2015 12:06:57 +0200
Subject: Stop throwing out of range exception from dateTimeToLocalString

The dateTimeToLocalString uses boost functions that may throw
an out of range exception for times earlier than 1970.
This commit caches this exception and just returns an empty
string in this case.

Test-Information:

Added a unit test to verify this behavior.

Change-Id: I05eb17605331e14d9eac04fbfd286362e7d4eb46

diff --git a/Swiften/Base/DateTime.cpp b/Swiften/Base/DateTime.cpp
index 4f55a8e..d19e9c7 100644
--- a/Swiften/Base/DateTime.cpp
+++ b/Swiften/Base/DateTime.cpp
@@ -13,6 +13,7 @@
 #include <boost/date_time/c_local_time_adjustor.hpp>
 
 #include <Swiften/Base/String.h>
+#include <Swiften/Base/Log.h>
 
 namespace Swift {
 
@@ -33,7 +34,14 @@ std::string dateTimeToString(const boost::posix_time::ptime& time) {
 }
 
 std::string dateTimeToLocalString(const boost::posix_time::ptime& time) {
-	return boost::posix_time::to_simple_string(boost::date_time::c_local_adjustor<boost::posix_time::ptime>::utc_to_local(time));
+	std::string localString;
+	try {
+		localString = boost::posix_time::to_simple_string(boost::date_time::c_local_adjustor<boost::posix_time::ptime>::utc_to_local(time));
+	}
+	catch(std::out_of_range& exception) {
+		SWIFT_LOG(debug) << exception.what() << std::endl;
+	}
+	return localString;
 }
 
 }
diff --git a/Swiften/Base/UnitTest/DateTimeTest.cpp b/Swiften/Base/UnitTest/DateTimeTest.cpp
index 936a3ec..a9350fa 100644
--- a/Swiften/Base/UnitTest/DateTimeTest.cpp
+++ b/Swiften/Base/UnitTest/DateTimeTest.cpp
@@ -18,6 +18,7 @@ class DateTimeTest : public CppUnit::TestFixture {
 		CPPUNIT_TEST(testStringToDateTime_UTC);
 		CPPUNIT_TEST(testStringToDateTime_WithTimezone);
 		CPPUNIT_TEST(testDateTimeToString);
+		CPPUNIT_TEST(testDateTimeToLocalStringNotThrowingException);
 		CPPUNIT_TEST_SUITE_END();
 
 	public:
@@ -38,6 +39,12 @@ class DateTimeTest : public CppUnit::TestFixture {
 
 			CPPUNIT_ASSERT_EQUAL(std::string("1969-07-21T02:56:15Z"), dateTimeToString(time));
 		}
+
+		void testDateTimeToLocalStringNotThrowingException() {
+			boost::posix_time::ptime time = stringToDateTime("1954-07-20T21:56:15-05:00");
+
+			CPPUNIT_ASSERT_EQUAL(std::string(""), dateTimeToLocalString(time));
+		}
 };
 
 CPPUNIT_TEST_SUITE_REGISTRATION(DateTimeTest);
-- 
cgit v0.10.2-6-g49f6