1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-08-07 03:22:57 +03:00

MCOL-1417 Fix cpimport TIME saturation

This commit is contained in:
Andrew Hutchings
2018-06-07 12:16:55 +01:00
parent d7562aa0ae
commit 09269af6d8

View File

@@ -1907,6 +1907,7 @@ int64_t DataConvert::convertColumnTime(
{ {
status = 0; status = 0;
char* p; char* p;
char* retp = NULL;
char* savePoint = NULL; char* savePoint = NULL;
p = const_cast<char*>(dataOrg); p = const_cast<char*>(dataOrg);
int64_t value = 0; int64_t value = 0;
@@ -1923,6 +1924,17 @@ int64_t DataConvert::convertColumnTime(
return value; return value;
} }
if (dataOrgLen == 0)
{
return value;
}
if (dataOrgLen < 3)
{
// Not enough chars to be a time
status = -1;
return value;
}
if (p[0] == '-') if (p[0] == '-')
{ {
isNeg = true; isNeg = true;
@@ -1931,9 +1943,9 @@ int64_t DataConvert::convertColumnTime(
errno = 0; errno = 0;
p = strtok_r(p, ":.", &savePoint); p = strtok_r(p, ":.", &savePoint);
inHour = strtol(p, 0, 10); inHour = strtol(p, &retp, 10);
if (errno) if (errno || !retp)
{ {
status = -1; status = -1;
return value; return value;
@@ -1947,9 +1959,9 @@ int64_t DataConvert::convertColumnTime(
return value; return value;
} }
inMinute = strtol(p, 0, 10); inMinute = strtol(p, &retp, 10);
if (errno) if (errno || !retp)
{ {
status = -1; status = -1;
return value; return value;
@@ -1963,9 +1975,9 @@ int64_t DataConvert::convertColumnTime(
return value; return value;
} }
inSecond = strtol(p, 0, 10); inSecond = strtol(p, &retp, 10);
if (errno) if (errno || !retp)
{ {
status = -1; status = -1;
return value; return value;
@@ -1975,9 +1987,9 @@ int64_t DataConvert::convertColumnTime(
if (p != NULL) if (p != NULL)
{ {
inMicrosecond = strtol(p, 0, 10); inMicrosecond = strtol(p, &retp, 10);
if (errno) if (errno || !retp)
{ {
status = -1; status = -1;
return value; return value;