diff --git a/src/gausskernel/optimizer/commands/copy.cpp b/src/gausskernel/optimizer/commands/copy.cpp index 27cc57c54..776253ab3 100644 --- a/src/gausskernel/optimizer/commands/copy.cpp +++ b/src/gausskernel/optimizer/commands/copy.cpp @@ -8442,6 +8442,7 @@ char* scan_dir(DIR* dir, const char* dirpath, const char* pattern, long* filesiz bool StrToInt32(const char* s, int *val) { /* set val to zero */ + int64 _val = 0; *val = 0; int base = 10; const char* ptr = s; @@ -8450,11 +8451,12 @@ bool StrToInt32(const char* s, int *val) if (isdigit((unsigned char)*ptr) == 0) return false; int8 digit = (*ptr++ - '0'); - *val = *val * base + digit; - if (*val > PG_INT32_MAX || *val < PG_INT32_MIN) { - return false; - } + _val = _val * base + digit; + if (_val > PG_INT32_MAX || _val < PG_INT32_MIN) { + return false; + } } + *val = (int)_val; return true; }