summaryrefslogtreecommitdiff
path: root/svl
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2024-01-12 17:03:35 +0100
committerEike Rathke <erack@redhat.com>2024-01-12 18:10:36 +0100
commit988db36e0992829b01a1341e92d6d2df715a7be5 (patch)
tree1df301870643e6ee967d71cd4546cb0d9c53187b /svl
parent23987653e8f0b6f15f546496b4895cefc0d89a94 (diff)
Resolves: tdf#159148 Accept int32 hours:minutes:seconds input
... and detect overflow to result in text instead of 00:00 input loss. Change-Id: Ib2b9f16ab6c3c2963c5a2058c27366219f090096 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/161977 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Jenkins
Diffstat (limited to 'svl')
-rw-r--r--svl/source/numbers/zforfind.cxx21
1 files changed, 15 insertions, 6 deletions
diff --git a/svl/source/numbers/zforfind.cxx b/svl/source/numbers/zforfind.cxx
index d29a6a025cd8..c1898104a905 100644
--- a/svl/source/numbers/zforfind.cxx
+++ b/svl/source/numbers/zforfind.cxx
@@ -983,9 +983,9 @@ bool ImpSvNumberInputScan::GetTimeRef( double& fOutNumber,
) const
{
bool bRet = true;
- sal_uInt16 nHour;
- sal_uInt16 nMinute = 0;
- sal_uInt16 nSecond = 0;
+ sal_Int32 nHour;
+ sal_Int32 nMinute = 0;
+ sal_Int32 nSecond = 0;
double fSecond100 = 0.0;
sal_uInt16 nStartIndex = nIndex;
@@ -1000,7 +1000,10 @@ bool ImpSvNumberInputScan::GetTimeRef( double& fOutNumber,
}
else if (nIndex - nStartIndex < nCnt)
{
- nHour = static_cast<sal_uInt16>(sStrArray[nNums[nIndex++]].toInt32());
+ const OUString& rValStr = sStrArray[nNums[nIndex++]];
+ nHour = rValStr.toInt32();
+ if (nHour == 0 && rValStr != "0" && rValStr != "00")
+ bRet = false; // overflow -> Text
}
else
{
@@ -1031,7 +1034,10 @@ bool ImpSvNumberInputScan::GetTimeRef( double& fOutNumber,
}
else if (nIndex - nStartIndex < nCnt)
{
- nMinute = static_cast<sal_uInt16>(sStrArray[nNums[nIndex++]].toInt32());
+ const OUString& rValStr = sStrArray[nNums[nIndex++]];
+ nMinute = rValStr.toInt32();
+ if (nMinute == 0 && rValStr != "0" && rValStr != "00")
+ bRet = false; // overflow -> Text
if (!(eInputOptions & SvNumInputOptions::LAX_TIME) && !bAllowDuration
&& nIndex > 1 && nMinute > 59)
bRet = false; // 1:60 or 1:123 is invalid, 123:1 or 0:123 is valid
@@ -1040,7 +1046,10 @@ bool ImpSvNumberInputScan::GetTimeRef( double& fOutNumber,
}
if (nIndex - nStartIndex < nCnt)
{
- nSecond = static_cast<sal_uInt16>(sStrArray[nNums[nIndex++]].toInt32());
+ const OUString& rValStr = sStrArray[nNums[nIndex++]];
+ nSecond = rValStr.toInt32();
+ if (nSecond == 0 && rValStr != "0" && rValStr != "00")
+ bRet = false; // overflow -> Text
if (!(eInputOptions & SvNumInputOptions::LAX_TIME) && !bAllowDuration
&& nIndex > 1 && nSecond > 59 && !(nHour == 23 && nMinute == 59 && nSecond == 60))
bRet = false; // 1:60 or 1:123 or 1:1:123 is invalid, 123:1 or 123:1:1 or 0:0:123 is valid, or leap second