!947 对pageinspect进行安全函数整改
Merge pull request !947 from Cross-罗/safe_function
This commit is contained in:
commit
cb19b3ce62
|
@ -210,31 +210,45 @@ Datum bt_page_stats(PG_FUNCTION_ARGS)
|
|||
elog(ERROR, "return type must be a row type");
|
||||
|
||||
j = 0;
|
||||
int ret = 0;
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", stat.blkno);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", stat.blkno);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%c", stat.type);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%c", stat.type);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", stat.live_items);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", stat.live_items);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", stat.dead_items);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", stat.dead_items);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", stat.avg_item_size);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", stat.avg_item_size);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", stat.page_size);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", stat.page_size);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", stat.free_size);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", stat.free_size);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", stat.btpo_prev);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", stat.btpo_prev);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", stat.btpo_next);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", stat.btpo_next);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
if (stat.type == 'd')
|
||||
snprintf(values[j++], 64, XID_FMT, stat.btpo.xact);
|
||||
else
|
||||
snprintf(values[j++], 32, "%d", stat.btpo.level);
|
||||
if (stat.type == 'd'){
|
||||
ret = snprintf_s(values[j++], 64, 63, XID_FMT, stat.btpo.xact);
|
||||
securec_check_ss(ret, "", "");
|
||||
} else {
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", stat.btpo.level);
|
||||
securec_check_ss(ret, "", "");
|
||||
}
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", stat.btpo_flags);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", stat.btpo_flags);
|
||||
securec_check_ss(ret, "", "");
|
||||
|
||||
tuple = BuildTupleFromCStrings(TupleDescGetAttInMetadata(tupleDesc), values);
|
||||
|
||||
|
@ -317,7 +331,8 @@ Datum bt_page_items(PG_FUNCTION_ARGS)
|
|||
uargs = (user_args*)palloc(sizeof(struct user_args));
|
||||
|
||||
uargs->page = (char*)palloc(BLCKSZ);
|
||||
memcpy(uargs->page, BufferGetPage(buffer), BLCKSZ);
|
||||
int rc = memcpy_s(uargs->page, BLCKSZ, BufferGetPage(buffer), BLCKSZ);
|
||||
securec_check_c(rc, "\0", "\0");
|
||||
|
||||
UnlockReleaseBuffer(buffer);
|
||||
relation_close(rel, AccessShareLock);
|
||||
|
@ -363,25 +378,36 @@ Datum bt_page_items(PG_FUNCTION_ARGS)
|
|||
|
||||
j = 0;
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", uargs->offset);
|
||||
int ret = 0;
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", uargs->offset);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "(%u,%u)", BlockIdGetBlockNumber(&(itup->t_tid.ip_blkid)), itup->t_tid.ip_posid);
|
||||
ret = snprintf_s(values[j++], 32, 31, "(%u,%u)", BlockIdGetBlockNumber(&(itup->t_tid.ip_blkid)), itup->t_tid.ip_posid);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", (int)IndexTupleSize(itup));
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", (int)IndexTupleSize(itup));
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%c", IndexTupleHasNulls(itup) ? 't' : 'f');
|
||||
ret = snprintf_s(values[j++], 32, 31, "%c", IndexTupleHasNulls(itup) ? 't' : 'f');
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%c", IndexTupleHasVarwidths(itup) ? 't' : 'f');
|
||||
ret = snprintf_s(values[j++], 32, 31, "%c", IndexTupleHasVarwidths(itup) ? 't' : 'f');
|
||||
securec_check_ss(ret, "", "");
|
||||
|
||||
ptr = (char*)itup + IndexInfoFindDataOffset(itup->t_info);
|
||||
dlen = IndexTupleSize(itup) - IndexInfoFindDataOffset(itup->t_info);
|
||||
dump = (char*)palloc0(dlen * 3 + 1);
|
||||
int length = dlen * 3 + 1;
|
||||
values[j] = dump;
|
||||
for (off = 0; off < dlen; off++) {
|
||||
if (off > 0)
|
||||
if (off > 0) {
|
||||
*dump++ = ' ';
|
||||
sprintf(dump, "%02x", *(ptr + off) & 0xff);
|
||||
length--;
|
||||
}
|
||||
ret = sprintf_s(dump, length, "%02x", *(ptr + off) & 0xff);
|
||||
securec_check_ss(ret, "", "");
|
||||
dump += 2;
|
||||
length -= 2;
|
||||
}
|
||||
|
||||
tuple = BuildTupleFromCStrings(fctx->attinmeta, values);
|
||||
|
@ -449,18 +475,26 @@ Datum bt_metap(PG_FUNCTION_ARGS)
|
|||
elog(ERROR, "return type must be a row type");
|
||||
|
||||
j = 0;
|
||||
int ret = 0;
|
||||
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", metad->btm_magic);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", metad->btm_magic);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", metad->btm_version);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", metad->btm_version);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", metad->btm_root);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", metad->btm_root);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", metad->btm_level);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", metad->btm_level);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", metad->btm_fastroot);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", metad->btm_fastroot);
|
||||
securec_check_ss(ret, "", "");
|
||||
values[j] = (char*)palloc(32);
|
||||
snprintf(values[j++], 32, "%d", metad->btm_fastlevel);
|
||||
ret = snprintf_s(values[j++], 32, 31, "%d", metad->btm_fastlevel);
|
||||
securec_check_ss(ret, "", "");
|
||||
|
||||
tuple = BuildTupleFromCStrings(TupleDescGetAttInMetadata(tupleDesc), values);
|
||||
|
||||
|
|
|
@ -67,7 +67,9 @@ Datum gin_metapage_info(PG_FUNCTION_ARGS)
|
|||
|
||||
metadata = GinPageGetMeta(page);
|
||||
|
||||
memset(nulls, 0, sizeof(nulls));
|
||||
int nRet = 0;
|
||||
nRet = memset_s(nulls, sizeof(nulls), 0, sizeof(nulls));
|
||||
securec_check_c(nRet, "\0", "\0");
|
||||
|
||||
values[0] = Int64GetDatum(metadata->head);
|
||||
values[1] = Int64GetDatum(metadata->tail);
|
||||
|
@ -144,7 +146,9 @@ Datum gin_page_opaque_info(PG_FUNCTION_ARGS)
|
|||
flags[nflags++] = DirectFunctionCall1(to_hex32, Int32GetDatum(flagbits));
|
||||
}
|
||||
|
||||
memset(nulls, 0, sizeof(nulls));
|
||||
int nRet = 0;
|
||||
nRet = memset_s(nulls, sizeof(nulls), 0, sizeof(nulls));
|
||||
securec_check_c(nRet, "\0", "\0");
|
||||
|
||||
values[0] = Int64GetDatum(opaq->rightlink);
|
||||
values[1] = Int64GetDatum(opaq->maxoff);
|
||||
|
@ -234,7 +238,9 @@ Datum gin_leafpage_items(PG_FUNCTION_ARGS)
|
|||
ItemPointer tids;
|
||||
Datum* tids_datum = NULL;
|
||||
|
||||
memset(nulls, 0, sizeof(nulls));
|
||||
int nRet = 0;
|
||||
nRet = memset_s(nulls, sizeof(nulls), 0, sizeof(nulls));
|
||||
securec_check_c(nRet, "\0", "\0");
|
||||
|
||||
values[0] = ItemPointerGetDatum(&cur->first);
|
||||
values[1] = UInt16GetDatum(cur->nbytes);
|
||||
|
|
|
@ -121,7 +121,9 @@ Datum heap_page_items(PG_FUNCTION_ARGS)
|
|||
uint16 lp_flags;
|
||||
uint16 lp_len;
|
||||
|
||||
memset(nulls, 0, sizeof(nulls));
|
||||
int nRet = 0;
|
||||
nRet = memset_s(nulls, sizeof(nulls), 0, sizeof(nulls));
|
||||
securec_check_c(nRet, "\0", "\0");
|
||||
|
||||
/* Extract information from the line pointer */
|
||||
|
||||
|
|
|
@ -154,7 +154,8 @@ static bytea* get_raw_page_internal(text* relname, ForkNumber forknum, BlockNumb
|
|||
buf = ReadBufferExtended(rel, forknum, blkno, RBM_NORMAL, NULL);
|
||||
LockBuffer(buf, BUFFER_LOCK_SHARE);
|
||||
|
||||
memcpy(raw_page_data, BufferGetPage(buf), BLCKSZ);
|
||||
int rc = memcpy_s(raw_page_data, BLCKSZ, BufferGetPage(buf), BLCKSZ);
|
||||
securec_check_c(rc, "\0", "\0");
|
||||
|
||||
LockBuffer(buf, BUFFER_LOCK_UNLOCK);
|
||||
ReleaseBuffer(buf);
|
||||
|
@ -305,7 +306,8 @@ Datum page_compress_meta(PG_FUNCTION_ARGS)
|
|||
|
||||
bytea* dumpVal = (bytea*)palloc(VARHDRSZ + output->len);
|
||||
SET_VARSIZE(dumpVal, VARHDRSZ + output->len);
|
||||
memcpy(VARDATA(dumpVal), output->data, output->len);
|
||||
int rc = memcpy_s(VARDATA(dumpVal), output->len, output->data, output->len);
|
||||
securec_check_c(rc, "\0", "\0");
|
||||
pfree(output->data);
|
||||
pfree(output);
|
||||
|
||||
|
@ -324,7 +326,8 @@ Datum page_compress_meta_usage(PG_FUNCTION_ARGS)
|
|||
|
||||
bytea* dumpVal = (bytea*)palloc(VARHDRSZ + help_size);
|
||||
SET_VARSIZE(dumpVal, VARHDRSZ + help_size);
|
||||
memcpy(VARDATA(dumpVal), help, help_size);
|
||||
int rc = memcpy_s(VARDATA(dumpVal), help_size, help, help_size);
|
||||
securec_check_c(rc, "\0", "\0");
|
||||
|
||||
PG_RETURN_TEXT_P(dumpVal);
|
||||
}
|
||||
|
@ -410,7 +413,8 @@ static char* read_raw_page(Relation rel, ForkNumber forknum, BlockNumber blkno)
|
|||
raw_page = (char*)palloc(BLCKSZ);
|
||||
buf = ReadBufferExtended(rel, forknum, blkno, RBM_NORMAL, NULL);
|
||||
LockBuffer(buf, BUFFER_LOCK_SHARE);
|
||||
memcpy(raw_page, BufferGetPage(buf), BLCKSZ);
|
||||
int rc = memcpy_s(raw_page, BLCKSZ, BufferGetPage(buf), BLCKSZ);
|
||||
securec_check_c(rc, "\0", "\0");
|
||||
LockBuffer(buf, BUFFER_LOCK_UNLOCK);
|
||||
ReleaseBuffer(buf);
|
||||
|
||||
|
|
Loading…
Reference in New Issue