connectivity/source/commontools/dbconversion.cxx | 54 ++++++++++++++++------- 1 file changed, 39 insertions(+), 15 deletions(-)
New commits: commit 764e7d873f8568ff4981de0139d09401d7f64c02 Author: Lionel Elie Mamane <lio...@mamane.lu> Date: Wed Aug 2 15:28:40 2017 +0200 add a few const purely for documentation reasons Change-Id: I6b7e5dac24e7aa5d48d6661235059ba29207e1d7 diff --git a/connectivity/source/commontools/dbconversion.cxx b/connectivity/source/commontools/dbconversion.cxx index d863d299f60c..964b98672eb2 100644 --- a/connectivity/source/commontools/dbconversion.cxx +++ b/connectivity/source/commontools/dbconversion.cxx @@ -120,7 +120,7 @@ namespace dbtools return aTemp.makeStringAndClear(); } - css::util::Date DBTypeConversion::toDate(sal_Int32 _nVal) + css::util::Date DBTypeConversion::toDate(const sal_Int32 _nVal) { css::util::Date aReturn; aReturn.Day = (sal_uInt16)(_nVal % 100); @@ -130,7 +130,7 @@ namespace dbtools } - css::util::Time DBTypeConversion::toTime(sal_Int64 _nVal) + css::util::Time DBTypeConversion::toTime(const sal_Int64 _nVal) { css::util::Time aReturn; sal_uInt64 unVal = static_cast<sal_uInt64>(_nVal >= 0 ? _nVal : -_nVal); @@ -202,7 +202,7 @@ namespace dbtools return nDays; } - static void implBuildFromRelative( sal_Int32 nDays, sal_uInt16& rDay, sal_uInt16& rMonth, sal_Int16& rYear) + static void implBuildFromRelative( const sal_Int32 nDays, sal_uInt16& rDay, sal_uInt16& rMonth, sal_Int16& rYear) { sal_Int32 nTempDays; sal_Int32 i = 0; @@ -274,7 +274,7 @@ namespace dbtools return ((double)nTime) + toDouble(aTimePart); } - static void addDays(sal_Int32 nDays, css::util::Date& _rDate) + static void addDays(const sal_Int32 nDays, css::util::Date& _rDate) { sal_Int32 nTempDays = implRelativeToAbsoluteNull( _rDate ); @@ -291,13 +291,13 @@ namespace dbtools { _rDate.Day = 1; _rDate.Month = 1; - _rDate.Year = 00; + _rDate.Year = 1; } else implBuildFromRelative( nTempDays, _rDate.Day, _rDate.Month, _rDate.Year ); } - static void subDays( sal_Int32 nDays, css::util::Date& _rDate ) + static void subDays(const sal_Int32 nDays, css::util::Date& _rDate ) { sal_Int32 nTempDays = implRelativeToAbsoluteNull( _rDate ); @@ -314,13 +314,13 @@ namespace dbtools { _rDate.Day = 1; _rDate.Month = 1; - _rDate.Year = 00; + _rDate.Year = 1; } else implBuildFromRelative( nTempDays, _rDate.Day, _rDate.Month, _rDate.Year ); } - css::util::Date DBTypeConversion::toDate(double dVal, const css::util::Date& _rNullDate) + css::util::Date DBTypeConversion::toDate(const double dVal, const css::util::Date& _rNullDate) { css::util::Date aRet = _rNullDate; @@ -333,9 +333,9 @@ namespace dbtools return aRet; } - css::util::Time DBTypeConversion::toTime(double dVal, short nDigits) + css::util::Time DBTypeConversion::toTime(const double dVal, short nDigits) { - sal_Int32 nDays = (sal_Int32)dVal; + const sal_Int32 nDays = (sal_Int32)dVal; sal_Int64 nNS; { double fSeconds((dVal - (double)nDays) * (fNanoSecondsPerDay / nanoSecInSec)); @@ -381,7 +381,7 @@ namespace dbtools return aRet; } - css::util::DateTime DBTypeConversion::toDateTime(double dVal, const css::util::Date& _rNullDate) + css::util::DateTime DBTypeConversion::toDateTime(const double dVal, const css::util::Date& _rNullDate) { css::util::Date aDate = toDate(dVal, _rNullDate); // there is not enough precision in a double to have both a date commit 0ccbd58834259cd7724edacde283f4f0f6ed2db0 Author: Lionel Elie Mamane <lio...@mamane.lu> Date: Wed Aug 2 15:27:57 2017 +0200 tdf#110997 protect calls to implBuildFromRelative from year overflow Change-Id: I5c6768766673832b7271292af85db1b76e51042c diff --git a/connectivity/source/commontools/dbconversion.cxx b/connectivity/source/commontools/dbconversion.cxx index 61abe27d84b8..d863d299f60c 100644 --- a/connectivity/source/commontools/dbconversion.cxx +++ b/connectivity/source/commontools/dbconversion.cxx @@ -42,6 +42,16 @@ namespace const sal_Int64 hourMask = 10000000000000LL; const double fNanoSecondsPerDay = nanoSecInSec * secInMin * minInHour * 24.0; + + // 32767-12-31 in "(days since 0001-01-01) + 1" format + const sal_Int32 maxDays = 11967896; + // -32768-01-01 in "(days since 0001-01-01) + 1" format + // Yes, I know it is currently unused. Will have to be used + // when we implement negative years. Writing down the correct + // value for future reference. + // *** Please don't remove just because it is unused *** + // Lionel Ãlie Mamane 2017-08-02 + // const sal_Int32 minDays = -11968270; } @@ -269,8 +279,15 @@ namespace dbtools sal_Int32 nTempDays = implRelativeToAbsoluteNull( _rDate ); nTempDays += nDays; - // TODO: can we remove that check? Would allow dates before 1900. - if ( nTempDays <= 0 ) + if ( nTempDays > maxDays ) + { + _rDate.Day = 31; + _rDate.Month = 12; + _rDate.Year = 9999; + } + // TODO: can we replace that check by minDays? Would allow dates BCE + // implBuildFromRelative probably needs to be updated for the "no year 0" question + else if ( nTempDays <= 0 ) { _rDate.Day = 1; _rDate.Month = 1; @@ -285,8 +302,15 @@ namespace dbtools sal_Int32 nTempDays = implRelativeToAbsoluteNull( _rDate ); nTempDays -= nDays; - // TODO: can we remove that check? Would allow dates before 1900. - if ( nTempDays <= 0 ) + if ( nTempDays > maxDays ) + { + _rDate.Day = 31; + _rDate.Month = 12; + _rDate.Year = 9999; + } + // TODO: can we replace that check by minDays? Would allow dates BCE + // implBuildFromRelative probably needs to be updated for the "no year 0" question + else if ( nTempDays <= 0 ) { _rDate.Day = 1; _rDate.Month = 1;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits