Hello,
I'm working on modifying an postgresql extension called "cstore_fdw". My function is like:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
static bool
ParsePeriod(const char *periodString, Period *result)
{
bool isSuccess = true;
char *dupPeriodForString;
char delimiters[3][2] = { "(", ",", ")" };
char **results[3] = {&(result->periodName), &(result->start_column_name), &(result->end_column_name)};
dupPeriodForString = pstrdup(periodString); // !!!! pstrdup error !!!!
if (dupPeriodForString == NULL || strlen(dupPeriodForString) <= 0 || result == NULL)
{
isSuccess = false;
}
for (int i = 0; i < 3; ++i)
{
char *token = NULL;
Size len = 0;
int j;
if ( (token = strsep(&dupPeriodForString, delimiters[i])) == NULL )
{
isSuccess = false;
break;
}
// trim
len = strlen(token);
while(isspace(token[len - 1])) --len;
while(*token && isspace(*token)) ++token, --len;
token = pnstrdup(token, len);
// lowercase
len = strlen(token);
for (j = 0; j < len; j++)
{
token[j] = tolower(token[j]);
}
*results[i] = token;
}
return isSuccess;
}
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
pstrdup() will change source "system_time( stt , ett )" to "system_time( stt " and return "system_time( stt " when it is called in ValidateForeignTableOptions() and CStoreGetOptions(). But if I call it in somewhere else, it won't get wrong.
Here's my enviornment:
postgresql: psql (PostgreSQL) 12.10 (Ubuntu 12.10-0ubuntu0.20.04.1)
compiler: clang version 10.0.0-4ubuntu1
OS: WINDOWS sub linux GNU/Linux 5.10.102.1-microsoft-standard-WSL2 x86_64
How can I do to fix this problem?