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?