diff --git a/src/common/backend/utils/adt/pgstatfuncs.cpp b/src/common/backend/utils/adt/pgstatfuncs.cpp index ad68260ce..dcd9e61e2 100644 --- a/src/common/backend/utils/adt/pgstatfuncs.cpp +++ b/src/common/backend/utils/adt/pgstatfuncs.cpp @@ -1818,9 +1818,14 @@ static void pgOutputRemainInfoToFile(RemainSegsCtx* remainSegsCtx) Datum pg_free_remain_segment(PG_FUNCTION_ARGS) { - Oid spaceId = PG_GETARG_OID(0); - Oid dbId = PG_GETARG_OID(1); - Oid segmentId = PG_GETARG_OID(2); + int32 spaceId = PG_GETARG_INT32(0); + int32 dbId = PG_GETARG_INT32(1); + int32 segmentId = PG_GETARG_INT32(2); + + if (spaceId < 0 || dbId < 0 || segmentId < 0) { + ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("Input segment [%d, %d, %d] is not valid segment!", spaceId, dbId, segmentId))); + } RemainSegsCtx* remainSegsCtx = (RemainSegsCtx *)palloc(sizeof(RemainSegsCtx)); remainSegsCtx->remainSegsBuf = NULL; @@ -1828,7 +1833,7 @@ Datum pg_free_remain_segment(PG_FUNCTION_ARGS) ReadRemainSegsFileForFunc(remainSegsCtx); - int segIdx = pgCheckRemainSegment(remainSegsCtx, spaceId, dbId, segmentId); + int segIdx = pgCheckRemainSegment(remainSegsCtx, (Oid)spaceId, (Oid)dbId, (Oid)segmentId); if (segIdx >= 0 && (uint32)segIdx < remainSegsCtx->remainSegsNum) { pgDoFreeRemainSegment(remainSegsCtx, segIdx); @@ -1836,7 +1841,7 @@ Datum pg_free_remain_segment(PG_FUNCTION_ARGS) pgOutputRemainInfoToFile(remainSegsCtx); } else { - ereport(ERROR, (errmsg("Input segment [%u, %u, %u] is not remained segment!", spaceId, dbId, segmentId))); + ereport(ERROR, (errmsg("Input segment [%d, %d, %d] is not remained segment!", spaceId, dbId, segmentId))); } if (remainSegsCtx->remainSegsBuf != NULL) {