diff --git a/contrib/pageinspect/btreefuncs.cpp b/contrib/pageinspect/btreefuncs.cpp index 620c3b828..b615d2f39 100644 --- a/contrib/pageinspect/btreefuncs.cpp +++ b/contrib/pageinspect/btreefuncs.cpp @@ -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); diff --git a/contrib/pageinspect/ginfuncs.cpp b/contrib/pageinspect/ginfuncs.cpp index 3dd688b1c..2e08b7088 100644 --- a/contrib/pageinspect/ginfuncs.cpp +++ b/contrib/pageinspect/ginfuncs.cpp @@ -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); diff --git a/contrib/pageinspect/heapfuncs.cpp b/contrib/pageinspect/heapfuncs.cpp index 582e0fc91..a089dbc70 100755 --- a/contrib/pageinspect/heapfuncs.cpp +++ b/contrib/pageinspect/heapfuncs.cpp @@ -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 */ diff --git a/contrib/pageinspect/rawpage.cpp b/contrib/pageinspect/rawpage.cpp index ef9baae3e..d8be2b212 100644 --- a/contrib/pageinspect/rawpage.cpp +++ b/contrib/pageinspect/rawpage.cpp @@ -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);