From 65d8d9a5ac16e9afb38a409b1a7941912f9e30a0 Mon Sep 17 00:00:00 2001 From: Tristan Partin Date: Thu, 6 Aug 2026 15:51:27 +0000 Subject: [PATCH v1 2/3] Migrate array-like repalloc() calls to repalloc_array() We have repalloc_array() for callers to use a type-safe version of repalloc() that additionally does overflow checking. repalloc_array() is the preferred way to allocate arrays/buffers. Signed-off-by: Tristan Partin --- contrib/dict_xsyn/dict_xsyn.c | 2 +- contrib/fuzzystrmatch/dmetaphone.c | 2 +- contrib/hstore/hstore_io.c | 4 ++-- contrib/intarray/_int_bool.c | 2 +- contrib/ltree/lquery_op.c | 4 ++-- contrib/ltree/ltxtquery_io.c | 4 ++-- contrib/pg_stash_advice/stashpersist.c | 3 +-- .../pg_stat_statements/pg_stat_statements.c | 2 +- contrib/pg_visibility/pg_visibility.c | 3 +-- contrib/pgcrypto/mbuf.c | 2 +- contrib/xml2/xslt_proc.c | 3 +-- src/backend/access/common/reloptions.c | 3 +-- src/backend/access/gin/gininsert.c | 4 ++-- src/backend/access/gin/ginpostinglist.c | 4 ++-- src/backend/access/gist/gistbuildbuffers.c | 14 +++++------- src/backend/access/nbtree/nbtinsert.c | 6 ++--- src/backend/access/nbtree/nbtpage.c | 5 ++--- src/backend/access/nbtree/nbtpreprocesskeys.c | 4 ++-- src/backend/access/transam/twophase.c | 2 +- src/backend/access/transam/xact.c | 3 +-- src/backend/access/transam/xloginsert.c | 5 ++--- src/backend/catalog/dependency.c | 21 +++++++----------- src/backend/catalog/pg_inherits.c | 2 +- src/backend/catalog/pg_shdepend.c | 4 +--- src/backend/commands/collationcmds.c | 3 +-- src/backend/commands/copyfromparse.c | 4 ++-- src/backend/commands/explain_state.c | 7 +++--- src/backend/commands/trigger.c | 12 +++++----- src/backend/executor/execExpr.c | 3 +-- src/backend/executor/execPartition.c | 22 +++++++++---------- src/backend/executor/nodeIndexscan.c | 15 ++++++------- src/backend/executor/nodeTidscan.c | 12 +++------- src/backend/executor/spi.c | 4 +--- src/backend/libpq/pqcomm.c | 2 +- src/backend/nodes/list.c | 3 +-- src/backend/nodes/queryjumblefuncs.c | 7 +++--- src/backend/optimizer/util/extendplan.c | 3 +-- src/backend/optimizer/util/tlist.c | 3 +-- src/backend/parser/parser.c | 2 +- src/backend/parser/scan.l | 6 ++--- .../replication/logical/reorderbuffer.c | 2 +- src/backend/replication/logical/worker.c | 2 +- src/backend/snowball/dict_snowball.c | 2 +- src/backend/statistics/dependencies.c | 5 +++-- src/backend/storage/lmgr/lock.c | 20 ++++++----------- src/backend/storage/smgr/md.c | 4 +--- src/backend/tsearch/dict_thesaurus.c | 6 ++--- src/backend/tsearch/spell.c | 18 +++++++-------- src/backend/tsearch/ts_parse.c | 6 ++--- src/backend/tsearch/wparser.c | 2 +- src/backend/tsearch/wparser_def.c | 2 +- src/backend/utils/adt/array_userfuncs.c | 12 +++++----- src/backend/utils/adt/arrayfuncs.c | 18 ++++++--------- src/backend/utils/adt/enum.c | 2 +- src/backend/utils/adt/format_type.c | 2 +- src/backend/utils/adt/formatting.c | 8 +++---- src/backend/utils/adt/jsonb_util.c | 8 +++---- src/backend/utils/adt/jsonfuncs.c | 3 +-- src/backend/utils/adt/jsonpath_scan.l | 3 ++- src/backend/utils/adt/multirangetypes.c | 3 +-- src/backend/utils/adt/pg_locale.c | 2 +- src/backend/utils/adt/regexp.c | 3 +-- src/backend/utils/adt/tsquery.c | 4 ++-- src/backend/utils/adt/tsquery_cleanup.c | 2 +- src/backend/utils/adt/tsrank.c | 2 +- src/backend/utils/adt/tsvector.c | 8 +++---- src/backend/utils/adt/tsvector_parser.c | 2 +- src/backend/utils/adt/varlena.c | 10 ++++----- src/backend/utils/cache/inval.c | 4 +--- src/backend/utils/cache/relcache.c | 13 +++++------ src/backend/utils/cache/typcache.c | 11 ++++------ src/backend/utils/mb/mbutils.c | 4 ++-- src/backend/utils/misc/conffiles.c | 3 +-- src/backend/utils/misc/tzparser.c | 2 +- src/backend/utils/sort/logtape.c | 6 ++--- src/backend/utils/sort/tuplestore.c | 3 +-- src/backend/utils/time/combocid.c | 3 +-- src/common/blkreftable.c | 12 ++++------ src/common/rmtree.c | 3 +-- src/common/stringinfo.c | 2 +- src/pl/plpgsql/src/pl_comp.c | 2 +- src/test/modules/test_regex/test_regex.c | 6 ++--- .../modules/test_tidstore/test_tidstore.c | 6 ++--- 83 files changed, 189 insertions(+), 268 deletions(-) diff --git a/contrib/dict_xsyn/dict_xsyn.c b/contrib/dict_xsyn/dict_xsyn.c index b4fa3b2e524..cd77a176a6c 100644 --- a/contrib/dict_xsyn/dict_xsyn.c +++ b/contrib/dict_xsyn/dict_xsyn.c @@ -235,7 +235,7 @@ dxsyn_lexize(PG_FUNCTION_ARGS) pos = value; while ((syn = find_word(pos, &end)) != NULL) { - res = repalloc(res, sizeof(TSLexeme) * (nsyns + 2)); + res = repalloc_array(res, TSLexeme, nsyns + 2); /* The first word is output only if keeporig=true */ if (pos != value || d->keeporig) diff --git a/contrib/fuzzystrmatch/dmetaphone.c b/contrib/fuzzystrmatch/dmetaphone.c index fc362dc839b..701a1fd5f3d 100644 --- a/contrib/fuzzystrmatch/dmetaphone.c +++ b/contrib/fuzzystrmatch/dmetaphone.c @@ -189,7 +189,7 @@ dmetaphone_alt(PG_FUNCTION_ARGS) (v = palloc_array(t, (n))) #define META_REALLOC(v,n,t) \ - (v = (t*)repalloc((v),((n)*sizeof(t)))) + (v = repalloc_array((v), t, (n))) /* * Don't do pfree - it seems to cause a SIGSEGV sometimes - which might have just diff --git a/contrib/hstore/hstore_io.c b/contrib/hstore/hstore_io.c index ef19b522b8e..aa8126d0b55 100644 --- a/contrib/hstore/hstore_io.c +++ b/contrib/hstore/hstore_io.c @@ -54,7 +54,7 @@ do { \ { \ int32 clen = state->cur - state->word; \ state->wordlen *= 2; \ - state->word = (char*)repalloc( (void*)state->word, state->wordlen ); \ + state->word = repalloc_array( (void*)state->word, char, state->wordlen ); \ state->cur = state->word + clen; \ } \ } while (0) @@ -239,7 +239,7 @@ parse_hstore(HSParser *state) if (state->pcur >= state->plen) { state->plen *= 2; - state->pairs = (Pairs *) repalloc(state->pairs, sizeof(Pairs) * state->plen); + state->pairs = repalloc_array(state->pairs, Pairs, state->plen); } if (!hstoreCheckKeyLength(state->cur - state->word, state)) return false; diff --git a/contrib/intarray/_int_bool.c b/contrib/intarray/_int_bool.c index 4382f882939..5dc5a8bdc1f 100644 --- a/contrib/intarray/_int_bool.c +++ b/contrib/intarray/_int_bool.c @@ -603,7 +603,7 @@ typedef struct #define RESIZEBUF(inf,addsize) while( ( (inf)->cur - (inf)->buf ) + (addsize) + 1 >= (inf)->buflen ) { \ int32 len = inf->cur - inf->buf; \ inf->buflen *= 2; \ - inf->buf = (char*) repalloc( (void*)inf->buf, inf->buflen ); \ + inf->buf = repalloc_array( (void*)inf->buf, char, inf->buflen ); \ inf->cur = inf->buf + len; \ } diff --git a/contrib/ltree/lquery_op.c b/contrib/ltree/lquery_op.c index 7bde4cbbbac..8232f40224b 100644 --- a/contrib/ltree/lquery_op.c +++ b/contrib/ltree/lquery_op.c @@ -110,7 +110,7 @@ ltree_label_match(const char *pred, size_t pred_len, const char *label, { /* grow buffer if needed and retry */ fpred_len = len; - fpred = repalloc(fpred, fpred_len + 1); + fpred = repalloc_array(fpred, char, fpred_len + 1); len = pg_strfold(fpred, fpred_len + 1, pred, pred_len, locale); } Assert(len <= fpred_len); @@ -122,7 +122,7 @@ ltree_label_match(const char *pred, size_t pred_len, const char *label, { /* grow buffer if needed and retry */ flabel_len = len; - flabel = repalloc(flabel, flabel_len + 1); + flabel = repalloc_array(flabel, char, flabel_len + 1); len = pg_strfold(flabel, flabel_len + 1, label, label_len, locale); } Assert(len <= flabel_len); diff --git a/contrib/ltree/ltxtquery_io.c b/contrib/ltree/ltxtquery_io.c index f1ec8d21954..c69ae82c40a 100644 --- a/contrib/ltree/ltxtquery_io.c +++ b/contrib/ltree/ltxtquery_io.c @@ -195,7 +195,7 @@ pushval_asis(QPRS_STATE *state, int type, char *strval, int lenval, uint16 flag) int32 tmp = state->curop - state->op; state->lenop *= 2; - state->op = (char *) repalloc(state->op, state->lenop); + state->op = repalloc_array(state->op, char, state->lenop); state->curop = state->op + tmp; } memcpy(state->curop, strval, lenval); @@ -496,7 +496,7 @@ while( ( (inf)->cur - (inf)->buf ) + (addsize) + 1 >= (inf)->buflen ) \ { \ int32 len = (inf)->cur - (inf)->buf; \ (inf)->buflen *= 2; \ - (inf)->buf = (char*) repalloc( (void*)(inf)->buf, (inf)->buflen ); \ + (inf)->buf = repalloc_array( (void*)(inf)->buf, char, (inf)->buflen ); \ (inf)->cur = (inf)->buf + len; \ } diff --git a/contrib/pg_stash_advice/stashpersist.c b/contrib/pg_stash_advice/stashpersist.c index ee53caafc7e..ccdd13872b5 100644 --- a/contrib/pg_stash_advice/stashpersist.c +++ b/contrib/pg_stash_advice/stashpersist.c @@ -454,8 +454,7 @@ pgsa_read_from_disk(void) if (num_entries >= max_entries) { max_entries *= 2; - entries = repalloc(entries, - max_entries * sizeof(pgsa_saved_entry)); + entries = repalloc_array(entries, pgsa_saved_entry, max_entries); } entries[num_entries].stash_name = stash_name; entries[num_entries].queryId = queryId; diff --git a/contrib/pg_stat_statements/pg_stat_statements.c b/contrib/pg_stat_statements/pg_stat_statements.c index d981baca741..8653ac7bdd4 100644 --- a/contrib/pg_stat_statements/pg_stat_statements.c +++ b/contrib/pg_stat_statements/pg_stat_statements.c @@ -636,7 +636,7 @@ pgss_shmem_init(void *arg) if (temp.query_len >= buffer_size) { buffer_size = Max(buffer_size * 2, temp.query_len + 1); - buffer = repalloc(buffer, buffer_size); + buffer = repalloc_array(buffer, char, buffer_size); } if (fread(buffer, 1, temp.query_len + 1, file) != temp.query_len + 1) diff --git a/contrib/pg_visibility/pg_visibility.c b/contrib/pg_visibility/pg_visibility.c index 85f6463e1f1..4292d077be1 100644 --- a/contrib/pg_visibility/pg_visibility.c +++ b/contrib/pg_visibility/pg_visibility.c @@ -882,8 +882,7 @@ record_corrupt_item(corrupt_items *items, ItemPointer tid) if (items->next >= items->count) { items->count *= 2; - items->tids = repalloc(items->tids, - items->count * sizeof(ItemPointerData)); + items->tids = repalloc_array(items->tids, ItemPointerData, items->count); } /* and add the new item */ items->tids[items->next++] = *tid; diff --git a/contrib/pgcrypto/mbuf.c b/contrib/pgcrypto/mbuf.c index ce9bca74c7d..90171cb7dc8 100644 --- a/contrib/pgcrypto/mbuf.c +++ b/contrib/pgcrypto/mbuf.c @@ -82,7 +82,7 @@ prepare_room(MBuf *mbuf, int block_len) newlen = (mbuf->buf_end - mbuf->data) + ((block_len + STEP + STEP - 1) & -STEP); - newbuf = repalloc(mbuf->data, newlen); + newbuf = repalloc_array(mbuf->data, uint8, newlen); mbuf->buf_end = newbuf + newlen; mbuf->data_end = newbuf + (mbuf->data_end - mbuf->data); diff --git a/contrib/xml2/xslt_proc.c b/contrib/xml2/xslt_proc.c index 78b60b7dfea..a1e18671ce8 100644 --- a/contrib/xml2/xslt_proc.c +++ b/contrib/xml2/xslt_proc.c @@ -238,8 +238,7 @@ parse_params(text *paramstr) if (nparams >= max_params) { max_params *= 2; - params = (const char **) repalloc(params, - (max_params + 1) * sizeof(char *)); + params = repalloc_array(params, const char *, max_params + 1); } params[nparams++] = pos; pos = strstr(pos, nvsep); diff --git a/src/backend/access/common/reloptions.c b/src/backend/access/common/reloptions.c index aacd3e8534b..a1abfb21ec8 100644 --- a/src/backend/access/common/reloptions.c +++ b/src/backend/access/common/reloptions.c @@ -773,8 +773,7 @@ add_reloption(relopt_gen *newoption) else { max_custom_options *= 2; - custom_options = repalloc(custom_options, - max_custom_options * sizeof(relopt_gen *)); + custom_options = repalloc_array(custom_options, relopt_gen *, max_custom_options); } MemoryContextSwitchTo(oldcxt); } diff --git a/src/backend/access/gin/gininsert.c b/src/backend/access/gin/gininsert.c index ff192ce0855..37f689a2cac 100644 --- a/src/backend/access/gin/gininsert.c +++ b/src/backend/access/gin/gininsert.c @@ -1529,8 +1529,8 @@ GinBufferStoreTuple(GinBuffer *buffer, GinTuple *tup) if (buffer->items == NULL) buffer->items = palloc_array(ItemPointerData, buffer->nitems + tup->nitems); else - buffer->items = repalloc(buffer->items, - (buffer->nitems + tup->nitems) * sizeof(ItemPointerData)); + buffer->items = repalloc_array(buffer->items, + ItemPointerData, buffer->nitems + tup->nitems); new = ginMergeItemPointers(&buffer->items[buffer->nfrozen], /* first unfrozen */ (buffer->nitems - buffer->nfrozen), /* num of unfrozen */ diff --git a/src/backend/access/gin/ginpostinglist.c b/src/backend/access/gin/ginpostinglist.c index 5dcda40471a..07656574029 100644 --- a/src/backend/access/gin/ginpostinglist.c +++ b/src/backend/access/gin/ginpostinglist.c @@ -317,7 +317,7 @@ ginPostingListDecodeAllSegments(GinPostingList *segment, int len, int *ndecoded_ if (ndecoded >= nallocated) { nallocated *= 2; - result = repalloc(result, nallocated * sizeof(ItemPointerData)); + result = repalloc_array(result, ItemPointerData, nallocated); } /* copy the first item */ @@ -335,7 +335,7 @@ ginPostingListDecodeAllSegments(GinPostingList *segment, int len, int *ndecoded_ if (ndecoded >= nallocated) { nallocated *= 2; - result = repalloc(result, nallocated * sizeof(ItemPointerData)); + result = repalloc_array(result, ItemPointerData, nallocated); } val += decode_varbyte(&ptr); diff --git a/src/backend/access/gist/gistbuildbuffers.c b/src/backend/access/gist/gistbuildbuffers.c index 3213cf45aa6..82576111b0c 100644 --- a/src/backend/access/gist/gistbuildbuffers.c +++ b/src/backend/access/gist/gistbuildbuffers.c @@ -142,9 +142,7 @@ gistGetNodeBuffer(GISTBuildBuffers *gfbb, GISTSTATE *giststate, { int i; - gfbb->buffersOnLevels = - (List **) repalloc(gfbb->buffersOnLevels, - (level + 1) * sizeof(List *)); + gfbb->buffersOnLevels = repalloc_array(gfbb->buffersOnLevels, List *, level + 1); /* initialize the enlarged portion */ for (i = gfbb->buffersOnLevelsLen; i <= level; i++) @@ -203,9 +201,8 @@ gistAddLoadedBuffer(GISTBuildBuffers *gfbb, GISTNodeBuffer *nodeBuffer) if (gfbb->loadedBuffersCount >= gfbb->loadedBuffersLen) { gfbb->loadedBuffersLen *= 2; - gfbb->loadedBuffers = (GISTNodeBuffer **) - repalloc(gfbb->loadedBuffers, - gfbb->loadedBuffersLen * sizeof(GISTNodeBuffer *)); + gfbb->loadedBuffers = repalloc_array(gfbb->loadedBuffers, + GISTNodeBuffer *, gfbb->loadedBuffersLen); } gfbb->loadedBuffers[gfbb->loadedBuffersCount] = nodeBuffer; @@ -488,9 +485,8 @@ gistBuffersReleaseBlock(GISTBuildBuffers *gfbb, long blocknum) if (gfbb->nFreeBlocks >= gfbb->freeBlocksLen) { gfbb->freeBlocksLen *= 2; - gfbb->freeBlocks = (long *) repalloc(gfbb->freeBlocks, - gfbb->freeBlocksLen * - sizeof(long)); + gfbb->freeBlocks = repalloc_array(gfbb->freeBlocks, + long, gfbb->freeBlocksLen); } /* Add blocknum to array */ diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index 35568f66eb7..3b945342d83 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -3019,8 +3019,7 @@ _bt_deadblocks(Page page, OffsetNumber *deletable, int ndeletable, if (ntids + 1 > spacentids) { spacentids *= 2; - tidblocks = (BlockNumber *) - repalloc(tidblocks, sizeof(BlockNumber) * spacentids); + tidblocks = repalloc_array(tidblocks, BlockNumber, spacentids); } tidblocks[ntids++] = ItemPointerGetBlockNumber(&itup->t_tid); @@ -3032,8 +3031,7 @@ _bt_deadblocks(Page page, OffsetNumber *deletable, int ndeletable, if (ntids + nposting > spacentids) { spacentids = Max(spacentids * 2, ntids + nposting); - tidblocks = (BlockNumber *) - repalloc(tidblocks, sizeof(BlockNumber) * spacentids); + tidblocks = repalloc_array(tidblocks, BlockNumber, spacentids); } for (int j = 0; j < nposting; j++) diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index 109017d6b52..ff7d2a93948 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -3120,9 +3120,8 @@ _bt_pendingfsm_add(BTVacState *vstate, newbufsize = vstate->maxbufsize; vstate->bufsize = newbufsize; - vstate->pendingpages = - repalloc(vstate->pendingpages, - sizeof(BTPendingFSM) * vstate->bufsize); + vstate->pendingpages = repalloc_array(vstate->pendingpages, + BTPendingFSM, vstate->bufsize); } /* Save metadata for newly deleted page */ diff --git a/src/backend/access/nbtree/nbtpreprocesskeys.c b/src/backend/access/nbtree/nbtpreprocesskeys.c index 65f983ca4b8..2c911b48047 100644 --- a/src/backend/access/nbtree/nbtpreprocesskeys.c +++ b/src/backend/access/nbtree/nbtpreprocesskeys.c @@ -258,8 +258,8 @@ _bt_preprocess_keys(IndexScanDesc scan) * a skip array's scan key */ if (numberOfKeys > scan->numberOfKeys) - so->keyData = repalloc(so->keyData, - numberOfKeys * sizeof(ScanKeyData)); + so->keyData = repalloc_array(so->keyData, + ScanKeyData, numberOfKeys); } else inkeys = scan->keyData; diff --git a/src/backend/access/transam/twophase.c b/src/backend/access/transam/twophase.c index d088ea0ebcc..8b7f51f7463 100644 --- a/src/backend/access/transam/twophase.c +++ b/src/backend/access/transam/twophase.c @@ -2017,7 +2017,7 @@ PrescanPreparedTransactions(TransactionId **xids_p, int *nxids_p) else { allocsize = allocsize * 2; - xids = repalloc(xids, allocsize * sizeof(TransactionId)); + xids = repalloc_array(xids, TransactionId, allocsize); } } xids[nxids++] = xid; diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 1b2b13ddbe6..5e08415e50c 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -1747,8 +1747,7 @@ AtSubCommit_childXids(void) MemoryContextAlloc(TopTransactionContext, new_maxChildXids * sizeof(TransactionId)); else - new_childXids = repalloc(s->parent->childXids, - new_maxChildXids * sizeof(TransactionId)); + new_childXids = repalloc_array(s->parent->childXids, TransactionId, new_maxChildXids); s->parent->childXids = new_childXids; s->parent->maxChildXids = new_maxChildXids; diff --git a/src/backend/access/transam/xloginsert.c b/src/backend/access/transam/xloginsert.c index f2e10b82b7d..c9aff944a2e 100644 --- a/src/backend/access/transam/xloginsert.c +++ b/src/backend/access/transam/xloginsert.c @@ -200,8 +200,7 @@ XLogEnsureRecordSpace(int max_block_id, int ndatas) if (nbuffers > max_registered_buffers) { - registered_buffers = (registered_buffer *) - repalloc(registered_buffers, sizeof(registered_buffer) * nbuffers); + registered_buffers = repalloc_array(registered_buffers, registered_buffer, nbuffers); /* * At least the padding bytes in the structs must be zeroed, because @@ -214,7 +213,7 @@ XLogEnsureRecordSpace(int max_block_id, int ndatas) if (ndatas > max_rdatas) { - rdatas = (XLogRecData *) repalloc(rdatas, sizeof(XLogRecData) * ndatas); + rdatas = repalloc_array(rdatas, XLogRecData, ndatas); max_rdatas = ndatas; } } diff --git a/src/backend/catalog/dependency.c b/src/backend/catalog/dependency.c index c8dd78341eb..1a20ec407a2 100644 --- a/src/backend/catalog/dependency.c +++ b/src/backend/catalog/dependency.c @@ -971,9 +971,9 @@ findDependentObjects(const ObjectAddress *object, { /* enlarge array if needed */ maxDependentObjects *= 2; - dependentObjects = (ObjectAddressAndFlags *) - repalloc(dependentObjects, - maxDependentObjects * sizeof(ObjectAddressAndFlags)); + dependentObjects = repalloc_array(dependentObjects, + ObjectAddressAndFlags, + maxDependentObjects); } dependentObjects[numDependentObjects].obj = otherObject; @@ -2737,8 +2737,7 @@ add_object_address(Oid classId, Oid objectId, int32 subId, if (addrs->numrefs >= addrs->maxrefs) { addrs->maxrefs *= 2; - addrs->refs = (ObjectAddress *) - repalloc(addrs->refs, addrs->maxrefs * sizeof(ObjectAddress)); + addrs->refs = repalloc_array(addrs->refs, ObjectAddress, addrs->maxrefs); Assert(!addrs->extras); } /* record this item */ @@ -2764,8 +2763,7 @@ add_exact_object_address(const ObjectAddress *object, if (addrs->numrefs >= addrs->maxrefs) { addrs->maxrefs *= 2; - addrs->refs = (ObjectAddress *) - repalloc(addrs->refs, addrs->maxrefs * sizeof(ObjectAddress)); + addrs->refs = repalloc_array(addrs->refs, ObjectAddress, addrs->maxrefs); Assert(!addrs->extras); } /* record this item */ @@ -2789,17 +2787,14 @@ add_exact_object_address_extra(const ObjectAddress *object, /* allocate extra space if first time */ if (!addrs->extras) - addrs->extras = (ObjectAddressExtra *) - palloc(addrs->maxrefs * sizeof(ObjectAddressExtra)); + addrs->extras = palloc_array(ObjectAddressExtra, addrs->maxrefs); /* enlarge array if needed */ if (addrs->numrefs >= addrs->maxrefs) { addrs->maxrefs *= 2; - addrs->refs = (ObjectAddress *) - repalloc(addrs->refs, addrs->maxrefs * sizeof(ObjectAddress)); - addrs->extras = (ObjectAddressExtra *) - repalloc(addrs->extras, addrs->maxrefs * sizeof(ObjectAddressExtra)); + addrs->refs = repalloc_array(addrs->refs, ObjectAddress, addrs->maxrefs); + addrs->extras = repalloc_array(addrs->extras, ObjectAddressExtra, addrs->maxrefs); } /* record this item */ item = addrs->refs + addrs->numrefs; diff --git a/src/backend/catalog/pg_inherits.c b/src/backend/catalog/pg_inherits.c index d7a604cf750..23fb7886cfb 100644 --- a/src/backend/catalog/pg_inherits.c +++ b/src/backend/catalog/pg_inherits.c @@ -183,7 +183,7 @@ find_inheritance_children_extended(Oid parentrelId, bool omit_detached, if (numoids >= maxoids) { maxoids *= 2; - oidarr = (Oid *) repalloc(oidarr, maxoids * sizeof(Oid)); + oidarr = repalloc_array(oidarr, Oid, maxoids); } oidarr[numoids++] = inhrelid; } diff --git a/src/backend/catalog/pg_shdepend.c b/src/backend/catalog/pg_shdepend.c index 6a8b0fc66ae..f70bffd527f 100644 --- a/src/backend/catalog/pg_shdepend.c +++ b/src/backend/catalog/pg_shdepend.c @@ -756,9 +756,7 @@ checkSharedDependencies(Oid classId, Oid objectId, if (numobjects >= allocedobjects) { allocedobjects *= 2; - objects = (ShDependObjectInfo *) - repalloc(objects, - allocedobjects * sizeof(ShDependObjectInfo)); + objects = repalloc_array(objects, ShDependObjectInfo, allocedobjects); } objects[numobjects].object = object; objects[numobjects].deptype = sdepForm->deptype; diff --git a/src/backend/commands/collationcmds.c b/src/backend/commands/collationcmds.c index b6f3bc9185b..cfa0e4610d9 100644 --- a/src/backend/commands/collationcmds.c +++ b/src/backend/commands/collationcmds.c @@ -911,8 +911,7 @@ pg_import_system_collations(PG_FUNCTION_ARGS) if (naliases >= maxaliases) { maxaliases *= 2; - aliases = (CollAliasData *) - repalloc(aliases, maxaliases * sizeof(CollAliasData)); + aliases = repalloc_array(aliases, CollAliasData, maxaliases); } aliases[naliases].localename = pstrdup(localebuf); aliases[naliases].alias = pstrdup(alias); diff --git a/src/backend/commands/copyfromparse.c b/src/backend/commands/copyfromparse.c index 500810577ad..37750cca13a 100644 --- a/src/backend/commands/copyfromparse.c +++ b/src/backend/commands/copyfromparse.c @@ -1879,7 +1879,7 @@ CopyReadAttributesText(CopyFromState cstate) { cstate->max_fields *= 2; cstate->raw_fields = - repalloc(cstate->raw_fields, cstate->max_fields * sizeof(char *)); + repalloc_array(cstate->raw_fields, char *, cstate->max_fields); } /* Remember start of field on both input and output sides */ @@ -2135,7 +2135,7 @@ CopyReadAttributesCSV(CopyFromState cstate) { cstate->max_fields *= 2; cstate->raw_fields = - repalloc(cstate->raw_fields, cstate->max_fields * sizeof(char *)); + repalloc_array(cstate->raw_fields, char *, cstate->max_fields); } /* Remember start of field on both input and output sides */ diff --git a/src/backend/commands/explain_state.c b/src/backend/commands/explain_state.c index 8797a49551a..35e48bbdc37 100644 --- a/src/backend/commands/explain_state.c +++ b/src/backend/commands/explain_state.c @@ -251,8 +251,7 @@ GetExplainExtensionId(const char *extension_name) { int i = pg_nextpower2_32(ExplainExtensionNamesAssigned + 1); - ExplainExtensionNameArray = (const char **) - repalloc(ExplainExtensionNameArray, i * sizeof(char *)); + ExplainExtensionNameArray = repalloc_array(ExplainExtensionNameArray, const char *, i); ExplainExtensionNamesAllocated = i; } @@ -366,8 +365,8 @@ RegisterExtensionExplainOption(const char *option_name, { int i = pg_nextpower2_32(ExplainExtensionOptionsAssigned + 1); - ExplainExtensionOptionArray = (ExplainExtensionOption *) - repalloc(ExplainExtensionOptionArray, i * sizeof(ExplainExtensionOption)); + ExplainExtensionOptionArray = repalloc_array(ExplainExtensionOptionArray, + ExplainExtensionOption, i); ExplainExtensionOptionsAllocated = i; } diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 1a9c0a658c1..67355147ba2 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -1931,7 +1931,7 @@ RelationBuildTriggers(Relation relation) if (numtrigs >= maxtrigs) { maxtrigs *= 2; - triggers = (Trigger *) repalloc(triggers, maxtrigs * sizeof(Trigger)); + triggers = repalloc_array(triggers, Trigger, maxtrigs); } build = &(triggers[numtrigs]); @@ -5502,9 +5502,8 @@ AfterTriggerBeginSubXact(void) /* repalloc will keep the stack in the same context */ int new_alloc = afterTriggers.maxtransdepth * 2; - afterTriggers.trans_stack = (AfterTriggersTransData *) - repalloc(afterTriggers.trans_stack, - new_alloc * sizeof(AfterTriggersTransData)); + afterTriggers.trans_stack = repalloc_array(afterTriggers.trans_stack, + AfterTriggersTransData, new_alloc); afterTriggers.maxtransdepth = new_alloc; } } @@ -5757,9 +5756,8 @@ AfterTriggerEnlargeQueryState(void) int new_alloc = Max(afterTriggers.query_depth + 1, old_alloc * 2); - afterTriggers.query_stack = (AfterTriggersQueryData *) - repalloc(afterTriggers.query_stack, - new_alloc * sizeof(AfterTriggersQueryData)); + afterTriggers.query_stack = repalloc_array(afterTriggers.query_stack, + AfterTriggersQueryData, new_alloc); afterTriggers.maxquerydepth = new_alloc; } diff --git a/src/backend/executor/execExpr.c b/src/backend/executor/execExpr.c index 1322a97cc36..82e846a1f4f 100644 --- a/src/backend/executor/execExpr.c +++ b/src/backend/executor/execExpr.c @@ -2678,8 +2678,7 @@ ExprEvalPushStep(ExprState *es, const ExprEvalStep *s) else if (es->steps_alloc == es->steps_len) { es->steps_alloc *= 2; - es->steps = repalloc(es->steps, - sizeof(ExprEvalStep) * es->steps_alloc); + es->steps = repalloc_array(es->steps, ExprEvalStep, es->steps_alloc); } memcpy(&es->steps[es->steps_len++], s, sizeof(ExprEvalStep)); diff --git a/src/backend/executor/execPartition.c b/src/backend/executor/execPartition.c index 9b4738884af..0e938cfea1f 100644 --- a/src/backend/executor/execPartition.c +++ b/src/backend/executor/execPartition.c @@ -1246,12 +1246,10 @@ ExecInitRoutingInfo(ModifyTableState *mtstate, else { proute->max_partitions *= 2; - proute->partitions = (ResultRelInfo **) - repalloc(proute->partitions, sizeof(ResultRelInfo *) * - proute->max_partitions); - proute->is_borrowed_rel = (bool *) - repalloc(proute->is_borrowed_rel, sizeof(bool) * - proute->max_partitions); + proute->partitions = repalloc_array(proute->partitions, + ResultRelInfo *, proute->max_partitions); + proute->is_borrowed_rel = repalloc_array(proute->is_borrowed_rel, + bool, proute->max_partitions); } } @@ -1362,12 +1360,12 @@ ExecInitPartitionDispatchInfo(EState *estate, else { proute->max_dispatch *= 2; - proute->partition_dispatch_info = (PartitionDispatch *) - repalloc(proute->partition_dispatch_info, - sizeof(PartitionDispatch) * proute->max_dispatch); - proute->nonleaf_partitions = (ResultRelInfo **) - repalloc(proute->nonleaf_partitions, - sizeof(ResultRelInfo *) * proute->max_dispatch); + proute->partition_dispatch_info = repalloc_array(proute->partition_dispatch_info, + PartitionDispatch, + proute->max_dispatch); + proute->nonleaf_partitions = repalloc_array(proute->nonleaf_partitions, + ResultRelInfo *, + proute->max_dispatch); } } proute->partition_dispatch_info[dispatchidx] = pd; diff --git a/src/backend/executor/nodeIndexscan.c b/src/backend/executor/nodeIndexscan.c index 8143fcf2581..1897d860497 100644 --- a/src/backend/executor/nodeIndexscan.c +++ b/src/backend/executor/nodeIndexscan.c @@ -1285,8 +1285,8 @@ ExecIndexBuildScanKeys(PlanState *planstate, Relation index, else { max_runtime_keys *= 2; - runtime_keys = (IndexRuntimeKeyInfo *) - repalloc(runtime_keys, max_runtime_keys * sizeof(IndexRuntimeKeyInfo)); + runtime_keys = repalloc_array(runtime_keys, + IndexRuntimeKeyInfo, max_runtime_keys); } } runtime_keys[n_runtime_keys].scan_key = this_scan_key; @@ -1407,8 +1407,8 @@ ExecIndexBuildScanKeys(PlanState *planstate, Relation index, else { max_runtime_keys *= 2; - runtime_keys = (IndexRuntimeKeyInfo *) - repalloc(runtime_keys, max_runtime_keys * sizeof(IndexRuntimeKeyInfo)); + runtime_keys = repalloc_array(runtime_keys, + IndexRuntimeKeyInfo, max_runtime_keys); } } runtime_keys[n_runtime_keys].scan_key = this_sub_key; @@ -1519,14 +1519,13 @@ ExecIndexBuildScanKeys(PlanState *planstate, Relation index, if (max_runtime_keys == 0) { max_runtime_keys = 8; - runtime_keys = (IndexRuntimeKeyInfo *) - palloc(max_runtime_keys * sizeof(IndexRuntimeKeyInfo)); + runtime_keys = palloc_array(IndexRuntimeKeyInfo, max_runtime_keys); } else { max_runtime_keys *= 2; - runtime_keys = (IndexRuntimeKeyInfo *) - repalloc(runtime_keys, max_runtime_keys * sizeof(IndexRuntimeKeyInfo)); + runtime_keys = repalloc_array(runtime_keys, + IndexRuntimeKeyInfo, max_runtime_keys); } } runtime_keys[n_runtime_keys].scan_key = this_scan_key; diff --git a/src/backend/executor/nodeTidscan.c b/src/backend/executor/nodeTidscan.c index 19e55b85f64..b63329de330 100644 --- a/src/backend/executor/nodeTidscan.c +++ b/src/backend/executor/nodeTidscan.c @@ -188,9 +188,7 @@ TidListEval(TidScanState *tidstate) if (numTids >= numAllocTids) { numAllocTids *= 2; - tidList = (ItemPointerData *) - repalloc(tidList, - numAllocTids * sizeof(ItemPointerData)); + tidList = repalloc_array(tidList, ItemPointerData, numAllocTids); } tidList[numTids++] = *itemptr; } @@ -213,9 +211,7 @@ TidListEval(TidScanState *tidstate) if (numTids + ndatums > numAllocTids) { numAllocTids = numTids + ndatums; - tidList = (ItemPointerData *) - repalloc(tidList, - numAllocTids * sizeof(ItemPointerData)); + tidList = repalloc_array(tidList, ItemPointerData, numAllocTids); } for (i = 0; i < ndatums; i++) { @@ -244,9 +240,7 @@ TidListEval(TidScanState *tidstate) if (numTids >= numAllocTids) { numAllocTids *= 2; - tidList = (ItemPointerData *) - repalloc(tidList, - numAllocTids * sizeof(ItemPointerData)); + tidList = repalloc_array(tidList, ItemPointerData, numAllocTids); } tidList[numTids++] = cursor_tid; } diff --git a/src/backend/executor/spi.c b/src/backend/executor/spi.c index 23a8395766c..196b998dd7f 100644 --- a/src/backend/executor/spi.c +++ b/src/backend/executor/spi.c @@ -120,9 +120,7 @@ SPI_connect_ext(int options) if (_SPI_stack_depth == _SPI_connected + 1) { newdepth = _SPI_stack_depth * 2; - _SPI_stack = (_SPI_connection *) - repalloc(_SPI_stack, - newdepth * sizeof(_SPI_connection)); + _SPI_stack = repalloc_array(_SPI_stack, _SPI_connection, newdepth); _SPI_stack_depth = newdepth; } } diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c index aaae7214f13..481b24d6460 100644 --- a/src/backend/libpq/pqcomm.c +++ b/src/backend/libpq/pqcomm.c @@ -1534,7 +1534,7 @@ socket_putmessage_noblock(char msgtype, const char *s, size_t len) required = PqSendPointer + 1 + 4 + len; if (required > PqSendBufferSize) { - PqSendBuffer = repalloc(PqSendBuffer, required); + PqSendBuffer = repalloc_array(PqSendBuffer, char, required); PqSendBufferSize = required; } res = socket_putmessage(msgtype, s, len); diff --git a/src/backend/nodes/list.c b/src/backend/nodes/list.c index 98fc2b44b50..51de24eb460 100644 --- a/src/backend/nodes/list.c +++ b/src/backend/nodes/list.c @@ -206,8 +206,7 @@ enlarge_list(List *list, int min_size) { #ifndef DEBUG_LIST_MEMORY_USAGE /* Normally, let repalloc deal with enlargement */ - list->elements = (ListCell *) repalloc(list->elements, - new_max_len * sizeof(ListCell)); + list->elements = repalloc_array(list->elements, ListCell, new_max_len); #else /* * repalloc() might enlarge the space in-place, which we don't want diff --git a/src/backend/nodes/queryjumblefuncs.c b/src/backend/nodes/queryjumblefuncs.c index 15cf9862cf7..8d2f7988b15 100644 --- a/src/backend/nodes/queryjumblefuncs.c +++ b/src/backend/nodes/queryjumblefuncs.c @@ -405,10 +405,9 @@ RecordConstLocation(JumbleState *jstate, bool extern_param, int location, int le if (jstate->clocations_count >= jstate->clocations_buf_size) { jstate->clocations_buf_size *= 2; - jstate->clocations = (LocationLen *) - repalloc(jstate->clocations, - jstate->clocations_buf_size * - sizeof(LocationLen)); + jstate->clocations = repalloc_array(jstate->clocations, + LocationLen, + jstate->clocations_buf_size); } jstate->clocations[jstate->clocations_count].location = location; diff --git a/src/backend/optimizer/util/extendplan.c b/src/backend/optimizer/util/extendplan.c index 40f37f0c8de..e2d077b7b02 100644 --- a/src/backend/optimizer/util/extendplan.c +++ b/src/backend/optimizer/util/extendplan.c @@ -60,8 +60,7 @@ GetPlannerExtensionId(const char *extension_name) { int i = pg_nextpower2_32(PlannerExtensionNamesAssigned + 1); - PlannerExtensionNameArray = (const char **) - repalloc(PlannerExtensionNameArray, i * sizeof(char *)); + PlannerExtensionNameArray = repalloc_array(PlannerExtensionNameArray, const char *, i); PlannerExtensionNamesAllocated = i; } diff --git a/src/backend/optimizer/util/tlist.c b/src/backend/optimizer/util/tlist.c index 3bef96acb54..ae652f25e14 100644 --- a/src/backend/optimizer/util/tlist.c +++ b/src/backend/optimizer/util/tlist.c @@ -711,8 +711,7 @@ add_column_to_pathtarget(PathTarget *target, Expr *expr, Index sortgroupref) int nexprs = list_length(target->exprs); /* This might look inefficient, but actually it's usually cheap */ - target->sortgrouprefs = (Index *) - repalloc(target->sortgrouprefs, nexprs * sizeof(Index)); + target->sortgrouprefs = repalloc_array(target->sortgrouprefs, Index, nexprs); target->sortgrouprefs[nexprs - 1] = sortgroupref; } else if (sortgroupref) diff --git a/src/backend/parser/parser.c b/src/backend/parser/parser.c index 5ec345f08f6..6d273d9e18f 100644 --- a/src/backend/parser/parser.c +++ b/src/backend/parser/parser.c @@ -396,7 +396,7 @@ str_udeescape(const char *str, char escape, if (out_dist > new_len - (MAX_UNICODE_EQUIVALENT_STRING + 1)) { new_len *= 2; - new = repalloc(new, new_len); + new = repalloc_array(new, char, new_len); out = new + out_dist; } diff --git a/src/backend/parser/scan.l b/src/backend/parser/scan.l index b7d0d7c2ff9..a9c6ec0d913 100644 --- a/src/backend/parser/scan.l +++ b/src/backend/parser/scan.l @@ -1296,8 +1296,7 @@ addlit(char *ytext, int yleng, core_yyscan_t yyscanner) if ((yyextra->literallen + yleng) >= yyextra->literalalloc) { yyextra->literalalloc = pg_nextpower2_32(yyextra->literallen + yleng + 1); - yyextra->literalbuf = (char *) repalloc(yyextra->literalbuf, - yyextra->literalalloc); + yyextra->literalbuf = repalloc_array(yyextra->literalbuf, char, yyextra->literalalloc); } /* append new data */ memcpy(yyextra->literalbuf + yyextra->literallen, ytext, yleng); @@ -1312,8 +1311,7 @@ addlitchar(unsigned char ychar, core_yyscan_t yyscanner) if ((yyextra->literallen + 1) >= yyextra->literalalloc) { yyextra->literalalloc *= 2; - yyextra->literalbuf = (char *) repalloc(yyextra->literalbuf, - yyextra->literalalloc); + yyextra->literalbuf = repalloc_array(yyextra->literalbuf, char, yyextra->literalalloc); } /* append new data */ yyextra->literalbuf[yyextra->literallen] = ychar; diff --git a/src/backend/replication/logical/reorderbuffer.c b/src/backend/replication/logical/reorderbuffer.c index 6aed6346366..fb8c71e3836 100644 --- a/src/backend/replication/logical/reorderbuffer.c +++ b/src/backend/replication/logical/reorderbuffer.c @@ -3797,7 +3797,7 @@ ReorderBufferSerializeReserve(ReorderBuffer *rb, Size sz) } else if (rb->outbufsize < sz) { - rb->outbuf = repalloc(rb->outbuf, sz); + rb->outbuf = repalloc_array(rb->outbuf, char, sz); rb->outbufsize = sz; } } diff --git a/src/backend/replication/logical/worker.c b/src/backend/replication/logical/worker.c index 8a31bcc16a0..818d1c17e2e 100644 --- a/src/backend/replication/logical/worker.c +++ b/src/backend/replication/logical/worker.c @@ -2355,7 +2355,7 @@ apply_spooled_messages(FileSet *stream_fileset, TransactionId xid, len, path); /* make sure we have sufficiently large buffer */ - buffer = repalloc(buffer, len); + buffer = repalloc_array(buffer, char, len); /* and finally read the data into the buffer */ BufFileReadExact(stream_fd, buffer, len); diff --git a/src/backend/snowball/dict_snowball.c b/src/backend/snowball/dict_snowball.c index 182bd156995..c91daa8ae04 100644 --- a/src/backend/snowball/dict_snowball.c +++ b/src/backend/snowball/dict_snowball.c @@ -337,7 +337,7 @@ dsnowball_lexize(PG_FUNCTION_ARGS) if (d->z->p && d->z->l) { - txt = repalloc(txt, d->z->l + 1); + txt = repalloc_array(txt, char, d->z->l + 1); memcpy(txt, d->z->p, d->z->l); txt[d->z->l] = '\0'; } diff --git a/src/backend/statistics/dependencies.c b/src/backend/statistics/dependencies.c index 628526ebff6..81bcf76cc1c 100644 --- a/src/backend/statistics/dependencies.c +++ b/src/backend/statistics/dependencies.c @@ -136,8 +136,9 @@ generate_dependencies_recurse(DependencyGenerator state, int index, */ if (!match) { - state->dependencies = (AttrNumber *) repalloc(state->dependencies, - state->k * (state->ndependencies + 1) * sizeof(AttrNumber)); + state->dependencies = repalloc_array(state->dependencies, + AttrNumber, + state->k * (state->ndependencies + 1)); memcpy(&state->dependencies[(state->k * state->ndependencies)], current, state->k * sizeof(AttrNumber)); state->ndependencies++; diff --git a/src/backend/storage/lmgr/lock.c b/src/backend/storage/lmgr/lock.c index 4178a1f7cf7..11dd90b6a3e 100644 --- a/src/backend/storage/lmgr/lock.c +++ b/src/backend/storage/lmgr/lock.c @@ -917,9 +917,8 @@ LockAcquireExtended(const LOCKTAG *locktag, { int newsize = locallock->maxLockOwners * 2; - locallock->lockOwners = (LOCALLOCKOWNER *) - repalloc(locallock->lockOwners, - newsize * sizeof(LOCALLOCKOWNER)); + locallock->lockOwners = repalloc_array(locallock->lockOwners, + LOCALLOCKOWNER, newsize); locallock->maxLockOwners = newsize; } } @@ -3828,8 +3827,7 @@ GetLockStatusData(void) if (el >= els) { els += MaxBackends; - data->locks = (LockInstanceData *) - repalloc(data->locks, sizeof(LockInstanceData) * els); + data->locks = repalloc_array(data->locks, LockInstanceData, els); } instance = &data->locks[el]; @@ -3861,8 +3859,7 @@ GetLockStatusData(void) if (el >= els) { els += MaxBackends; - data->locks = (LockInstanceData *) - repalloc(data->locks, sizeof(LockInstanceData) * els); + data->locks = repalloc_array(data->locks, LockInstanceData, els); } vxid.procNumber = proc->vxid.procNumber; @@ -3906,8 +3903,7 @@ GetLockStatusData(void) if (data->nelements > els) { els = data->nelements; - data->locks = (LockInstanceData *) - repalloc(data->locks, sizeof(LockInstanceData) * els); + data->locks = repalloc_array(data->locks, LockInstanceData, els); } /* Now scan the tables to copy the data */ @@ -4090,8 +4086,7 @@ GetSingleProcBlockerStatusData(PGPROC *blocked_proc, BlockedProcsData *data) if (data->nlocks >= data->maxlocks) { data->maxlocks += MaxBackends; - data->locks = (LockInstanceData *) - repalloc(data->locks, sizeof(LockInstanceData) * data->maxlocks); + data->locks = repalloc_array(data->locks, LockInstanceData, data->maxlocks); } instance = &data->locks[data->nlocks]; @@ -4117,8 +4112,7 @@ GetSingleProcBlockerStatusData(PGPROC *blocked_proc, BlockedProcsData *data) { data->maxpids = Max(data->maxpids + MaxBackends, data->npids + queue_size); - data->waiter_pids = (int *) repalloc(data->waiter_pids, - sizeof(int) * data->maxpids); + data->waiter_pids = repalloc_array(data->waiter_pids, int, data->maxpids); } /* Collect PIDs from the lock's wait queue, stopping at blocked_proc */ diff --git a/src/backend/storage/smgr/md.c b/src/backend/storage/smgr/md.c index 9f96d9cbbfc..780c88c0630 100644 --- a/src/backend/storage/smgr/md.c +++ b/src/backend/storage/smgr/md.c @@ -1668,9 +1668,7 @@ _fdvec_resize(SMgrRelation reln, * FileClose(), and the memory context internally will sometimes avoid * doing an actual reallocation. */ - reln->md_seg_fds[forknum] = - repalloc(reln->md_seg_fds[forknum], - sizeof(MdfdVec) * nseg); + reln->md_seg_fds[forknum] = repalloc_array(reln->md_seg_fds[forknum], MdfdVec, nseg); } else { diff --git a/src/backend/tsearch/dict_thesaurus.c b/src/backend/tsearch/dict_thesaurus.c index 0fd4cf3dfa8..c4c223133a5 100644 --- a/src/backend/tsearch/dict_thesaurus.c +++ b/src/backend/tsearch/dict_thesaurus.c @@ -306,7 +306,7 @@ addCompiledLexeme(TheLexeme *newwrds, int *nnw, int *tnm, TSLexeme *lexeme, Lexe if (*nnw >= *tnm) { *tnm *= 2; - newwrds = (TheLexeme *) repalloc(newwrds, sizeof(TheLexeme) * *tnm); + newwrds = repalloc_array(newwrds, TheLexeme, *tnm); } newwrds[*nnw].entries = palloc_object(LexemeInfo); @@ -495,7 +495,7 @@ compileTheLexeme(DictThesaurus *d) } d->nwrds = newwrds - d->wrds + 1; - d->wrds = (TheLexeme *) repalloc(d->wrds, sizeof(TheLexeme) * d->nwrds); + d->wrds = repalloc_array(d->wrds, TheLexeme, d->nwrds); } } @@ -547,7 +547,7 @@ compileTheSubstitute(DictThesaurus *d) int diff = outptr - d->subst[i].res; n *= 2; - d->subst[i].res = (TSLexeme *) repalloc(d->subst[i].res, sizeof(TSLexeme) * n); + d->subst[i].res = repalloc_array(d->subst[i].res, TSLexeme, n); outptr = d->subst[i].res + diff; } diff --git a/src/backend/tsearch/spell.c b/src/backend/tsearch/spell.c index 11f2ed1a182..7501c36a69c 100644 --- a/src/backend/tsearch/spell.c +++ b/src/backend/tsearch/spell.c @@ -493,7 +493,7 @@ NIAddSpell(IspellDict *Conf, const char *word, const char *flag) if (Conf->mspell) { Conf->mspell *= 2; - Conf->Spell = (SPELL **) repalloc(Conf->Spell, Conf->mspell * sizeof(SPELL *)); + Conf->Spell = repalloc_array(Conf->Spell, SPELL *, Conf->mspell); } else { @@ -687,7 +687,7 @@ NIAddAffix(IspellDict *Conf, const char *flag, char flagflags, const char *mask, if (Conf->maffixes) { Conf->maffixes *= 2; - Conf->Affix = (AFFIX *) repalloc(Conf->Affix, Conf->maffixes * sizeof(AFFIX)); + Conf->Affix = repalloc_array(Conf->Affix, AFFIX, Conf->maffixes); } else { @@ -1106,9 +1106,9 @@ addCompoundAffixFlagValue(IspellDict *Conf, const char *s, uint32 val) if (Conf->mCompoundAffixFlag) { Conf->mCompoundAffixFlag *= 2; - Conf->CompoundAffixFlags = (CompoundAffixFlag *) - repalloc(Conf->CompoundAffixFlags, - Conf->mCompoundAffixFlag * sizeof(CompoundAffixFlag)); + Conf->CompoundAffixFlags = repalloc_array(Conf->CompoundAffixFlags, + CompoundAffixFlag, + Conf->mCompoundAffixFlag); } else { @@ -1611,8 +1611,7 @@ MergeAffix(IspellDict *Conf, int a1, int a2) if (Conf->nAffixData + 1 >= Conf->lenAffixData) { Conf->lenAffixData *= 2; - Conf->AffixData = (const char **) repalloc(Conf->AffixData, - sizeof(char *) * Conf->lenAffixData); + Conf->AffixData = repalloc_array(Conf->AffixData, const char *, Conf->lenAffixData); } ptr = Conf->AffixData + Conf->nAffixData; @@ -2042,7 +2041,8 @@ NISortAffixes(IspellDict *Conf) } } ptr->affix = NULL; - Conf->CompoundAffix = (CMPDAffix *) repalloc(Conf->CompoundAffix, sizeof(CMPDAffix) * (ptr - Conf->CompoundAffix + 1)); + Conf->CompoundAffix = repalloc_array(Conf->CompoundAffix, + CMPDAffix, ptr - Conf->CompoundAffix + 1); /* Start build a prefix tree */ Conf->Prefix = mkANode(Conf, 0, firstsuffix, 0, FF_PREFIX); @@ -2425,7 +2425,7 @@ AddStem(SplitVar *v, char *word) if (v->nstem >= v->lenstem) { v->lenstem *= 2; - v->stem = (char **) repalloc(v->stem, sizeof(char *) * v->lenstem); + v->stem = repalloc_array(v->stem, char *, v->lenstem); } v->stem[v->nstem] = word; diff --git a/src/backend/tsearch/ts_parse.c b/src/backend/tsearch/ts_parse.c index bee84e10053..7e535b46b34 100644 --- a/src/backend/tsearch/ts_parse.c +++ b/src/backend/tsearch/ts_parse.c @@ -410,7 +410,7 @@ parsetext(Oid cfgId, ParsedText *prs, char *buf, int buflen) if (prs->curwords == prs->lenwords) { prs->lenwords *= 2; - prs->words = (ParsedWord *) repalloc(prs->words, prs->lenwords * sizeof(ParsedWord)); + prs->words = repalloc_array(prs->words, ParsedWord, prs->lenwords); } if (ptr->flags & TSL_ADDPOS) @@ -442,7 +442,7 @@ hladdword(HeadlineParsedText *prs, char *buf, int buflen, int type) if (prs->curwords >= prs->lenwords) { prs->lenwords *= 2; - prs->words = (HeadlineWordEntry *) repalloc(prs->words, prs->lenwords * sizeof(HeadlineWordEntry)); + prs->words = repalloc_array(prs->words, HeadlineWordEntry, prs->lenwords); } memset(&(prs->words[prs->curwords]), 0, sizeof(HeadlineWordEntry)); prs->words[prs->curwords].type = (uint8) type; @@ -470,7 +470,7 @@ hlfinditem(HeadlineParsedText *prs, TSQuery query, int32 pos, char *buf, int buf while (prs->curwords + query->size >= prs->lenwords) { prs->lenwords *= 2; - prs->words = (HeadlineWordEntry *) repalloc(prs->words, prs->lenwords * sizeof(HeadlineWordEntry)); + prs->words = repalloc_array(prs->words, HeadlineWordEntry, prs->lenwords); } word = &(prs->words[prs->curwords - 1]); diff --git a/src/backend/tsearch/wparser.c b/src/backend/tsearch/wparser.c index 8a782b66030..50c1887bdf6 100644 --- a/src/backend/tsearch/wparser.c +++ b/src/backend/tsearch/wparser.c @@ -190,7 +190,7 @@ prs_setup_firstcall(FuncCallContext *funcctx, FunctionCallInfo fcinfo, if (st->cur >= st->len) { st->len = 2 * st->len; - st->list = (LexemeEntry *) repalloc(st->list, sizeof(LexemeEntry) * st->len); + st->list = repalloc_array(st->list, LexemeEntry, st->len); } st->list[st->cur].lexeme = palloc(llen + 1); memcpy(st->list[st->cur].lexeme, lex, llen); diff --git a/src/backend/tsearch/wparser_def.c b/src/backend/tsearch/wparser_def.c index d798d4fb9e7..f1ed8a71c52 100644 --- a/src/backend/tsearch/wparser_def.c +++ b/src/backend/tsearch/wparser_def.c @@ -2273,7 +2273,7 @@ mark_hl_fragments(HeadlineParsedText *prs, TSQuery query, List *locations, if (numcovers >= maxcovers) { maxcovers *= 2; - covers = repalloc(covers, sizeof(CoverPos) * maxcovers); + covers = repalloc_array(covers, CoverPos, maxcovers); } covers[numcovers].startpos = startpos; covers[numcovers].endpos = endpos; diff --git a/src/backend/utils/adt/array_userfuncs.c b/src/backend/utils/adt/array_userfuncs.c index d81ef83fa7c..702c6be1695 100644 --- a/src/backend/utils/adt/array_userfuncs.c +++ b/src/backend/utils/adt/array_userfuncs.c @@ -662,10 +662,8 @@ array_agg_combine(PG_FUNCTION_ARGS) { /* Use a power of 2 size rather than allocating just reqsize */ state1->alen = pg_nextpower2_32(reqsize); - state1->dvalues = (Datum *) repalloc(state1->dvalues, - state1->alen * sizeof(Datum)); - state1->dnulls = (bool *) repalloc(state1->dnulls, - state1->alen * sizeof(bool)); + state1->dvalues = repalloc_array(state1->dvalues, Datum, state1->alen); + state1->dnulls = repalloc_array(state1->dnulls, bool, state1->alen); } /* Copy in the state2 elements to the end of the state1 arrays */ @@ -1083,7 +1081,7 @@ array_agg_array_combine(PG_FUNCTION_ARGS) { /* use a power of 2 size rather than allocating just reqsize */ state1->abytes = pg_nextpower2_32(reqsize); - state1->data = (char *) repalloc(state1->data, state1->abytes); + state1->data = repalloc_array(state1->data, char, state1->abytes); } /* Combine the null bitmaps, if present. */ @@ -1104,8 +1102,8 @@ array_agg_array_combine(PG_FUNCTION_ARGS) else if (newnitems > state1->aitems) { state1->aitems = pg_nextpower2_32(newnitems); - state1->nullbitmap = (uint8 *) - repalloc(state1->nullbitmap, (state1->aitems + 7) / 8); + state1->nullbitmap = repalloc_array(state1->nullbitmap, + uint8, (state1->aitems + 7) / 8); } /* This will do the right thing if state2->nullbitmap is NULL: */ array_bitmap_copy(state1->nullbitmap, state1->nitems, diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c index 47141a7c4c8..49c4fd0e84e 100644 --- a/src/backend/utils/adt/arrayfuncs.c +++ b/src/backend/utils/adt/arrayfuncs.c @@ -2676,11 +2676,9 @@ array_set_element_expanded(Datum arraydatum, int newlen = dim[0] + dim[0] / 8; newlen = Max(newlen, dim[0]); /* integer overflow guard */ - eah->dvalues = dvalues = (Datum *) - repalloc(dvalues, newlen * sizeof(Datum)); + eah->dvalues = dvalues = repalloc_array(dvalues, Datum, newlen); if (dnulls) - eah->dnulls = dnulls = (bool *) - repalloc(dnulls, newlen * sizeof(bool)); + eah->dnulls = dnulls = repalloc_array(dnulls, bool, newlen); eah->dvalueslen = newlen; } @@ -5389,10 +5387,8 @@ accumArrayResult(ArrayBuildState *astate, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg("array size exceeds the maximum allowed (%zu)", MaxAllocSize))); - astate->dvalues = (Datum *) - repalloc(astate->dvalues, astate->alen * sizeof(Datum)); - astate->dnulls = (bool *) - repalloc(astate->dnulls, astate->alen * sizeof(bool)); + astate->dvalues = repalloc_array(astate->dvalues, Datum, astate->alen); + astate->dnulls = repalloc_array(astate->dnulls, bool, astate->alen); } /* @@ -5661,7 +5657,7 @@ accumArrayResultArr(ArrayBuildStateArr *astate, { astate->abytes = Max(astate->abytes * 2, astate->nbytes + ndatabytes); - astate->data = (char *) repalloc(astate->data, astate->abytes); + astate->data = repalloc_array(astate->data, char, astate->abytes); } } @@ -5692,8 +5688,8 @@ accumArrayResultArr(ArrayBuildStateArr *astate, else if (newnitems > astate->aitems) { astate->aitems = Max(astate->aitems * 2, newnitems); - astate->nullbitmap = (uint8 *) - repalloc(astate->nullbitmap, (astate->aitems + 7) / 8); + astate->nullbitmap = repalloc_array(astate->nullbitmap, + uint8, (astate->aitems + 7) / 8); } array_bitmap_copy(astate->nullbitmap, astate->nitems, ARR_NULLBITMAP(arg), 0, diff --git a/src/backend/utils/adt/enum.c b/src/backend/utils/adt/enum.c index 5d6a3af9172..9b87373e0e9 100644 --- a/src/backend/utils/adt/enum.c +++ b/src/backend/utils/adt/enum.c @@ -591,7 +591,7 @@ enum_range_internal(Oid enumtypoid, Oid lower, Oid upper) if (cnt >= max) { max *= 2; - elems = (Datum *) repalloc(elems, max * sizeof(Datum)); + elems = repalloc_array(elems, Datum, max); } elems[cnt++] = ObjectIdGetDatum(enum_oid); diff --git a/src/backend/utils/adt/format_type.c b/src/backend/utils/adt/format_type.c index 366e54fd1ca..51e58efb086 100644 --- a/src/backend/utils/adt/format_type.c +++ b/src/backend/utils/adt/format_type.c @@ -471,7 +471,7 @@ oidvectortypes(PG_FUNCTION_ARGS) if (left < (slen + 2)) { total += slen + 2; - result = repalloc(result, total); + result = repalloc_array(result, char, total); left += slen + 2; } diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c index 462e36e4887..3fd5474c350 100644 --- a/src/backend/utils/adt/formatting.c +++ b/src/backend/utils/adt/formatting.c @@ -1663,7 +1663,7 @@ str_tolower(const char *buff, size_t nbytes, Oid collid) { /* grow buffer if needed and retry */ dstsize = needed + 1; - dst = repalloc(dst, dstsize); + dst = repalloc_array(dst, char, dstsize); needed = pg_strlower(dst, dstsize, src, srclen, mylocale); Assert(needed + 1 <= dstsize); } @@ -1727,7 +1727,7 @@ str_toupper(const char *buff, size_t nbytes, Oid collid) { /* grow buffer if needed and retry */ dstsize = needed + 1; - dst = repalloc(dst, dstsize); + dst = repalloc_array(dst, char, dstsize); needed = pg_strupper(dst, dstsize, src, srclen, mylocale); Assert(needed + 1 <= dstsize); } @@ -1791,7 +1791,7 @@ str_initcap(const char *buff, size_t nbytes, Oid collid) { /* grow buffer if needed and retry */ dstsize = needed + 1; - dst = repalloc(dst, dstsize); + dst = repalloc_array(dst, char, dstsize); needed = pg_strtitle(dst, dstsize, src, srclen, mylocale); Assert(needed + 1 <= dstsize); } @@ -1860,7 +1860,7 @@ str_casefold(const char *buff, size_t nbytes, Oid collid) { /* grow buffer if needed and retry */ dstsize = needed + 1; - dst = repalloc(dst, dstsize); + dst = repalloc_array(dst, char, dstsize); needed = pg_strfold(dst, dstsize, src, srclen, mylocale); Assert(needed + 1 <= dstsize); } diff --git a/src/backend/utils/adt/jsonb_util.c b/src/backend/utils/adt/jsonb_util.c index 91fb9ea09bf..b23facb6dac 100644 --- a/src/backend/utils/adt/jsonb_util.c +++ b/src/backend/utils/adt/jsonb_util.c @@ -799,8 +799,8 @@ appendKey(JsonbInState *pstate, JsonbValue *string, bool needCopy) errmsg("number of jsonb object pairs exceeds the maximum allowed (%zu)", JSONB_MAX_PAIRS))); ppstate->size = Min(ppstate->size * 2, JSONB_MAX_PAIRS); - object->val.object.pairs = repalloc(object->val.object.pairs, - sizeof(JsonbPair) * ppstate->size); + object->val.object.pairs = repalloc_array(object->val.object.pairs, + JsonbPair, ppstate->size); } pair = &object->val.object.pairs[object->val.object.nPairs]; @@ -850,8 +850,8 @@ appendElement(JsonbInState *pstate, JsonbValue *scalarVal, bool needCopy) errmsg("number of jsonb array elements exceeds the maximum allowed (%zu)", JSONB_MAX_ELEMS))); ppstate->size = Min(ppstate->size * 2, JSONB_MAX_ELEMS); - array->val.array.elems = repalloc(array->val.array.elems, - sizeof(JsonbValue) * ppstate->size); + array->val.array.elems = repalloc_array(array->val.array.elems, + JsonbValue, ppstate->size); } elem = &array->val.array.elems[array->val.array.nElems]; diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c index a1fa55fa2dd..bc7b556e22e 100644 --- a/src/backend/utils/adt/jsonfuncs.c +++ b/src/backend/utils/adt/jsonfuncs.c @@ -798,8 +798,7 @@ okeys_object_field_start(void *state, char *fname, bool isnull) if (_state->result_count >= _state->result_size) { _state->result_size *= 2; - _state->result = (char **) - repalloc(_state->result, sizeof(char *) * _state->result_size); + _state->result = repalloc_array(_state->result, char *, _state->result_size); } /* save a copy of the field name */ diff --git a/src/backend/utils/adt/jsonpath_scan.l b/src/backend/utils/adt/jsonpath_scan.l index 50017587ecb..a6e238b8700 100644 --- a/src/backend/utils/adt/jsonpath_scan.l +++ b/src/backend/utils/adt/jsonpath_scan.l @@ -507,7 +507,8 @@ resizeString(bool init, int appendLen, yyscan_t yyscanner) { while (yyextra->scanstring.len + appendLen >= yyextra->scanstring.total) yyextra->scanstring.total *= 2; - yyextra->scanstring.val = repalloc(yyextra->scanstring.val, yyextra->scanstring.total); + yyextra->scanstring.val = repalloc_array(yyextra->scanstring.val, + char, yyextra->scanstring.total); } } } diff --git a/src/backend/utils/adt/multirangetypes.c b/src/backend/utils/adt/multirangetypes.c index ccb9ba2b644..e72a2efadcd 100644 --- a/src/backend/utils/adt/multirangetypes.c +++ b/src/backend/utils/adt/multirangetypes.c @@ -201,8 +201,7 @@ multirange_in(PG_FUNCTION_ARGS) if (range_capacity == range_count) { range_capacity *= 2; - ranges = (RangeType **) - repalloc(ranges, range_capacity * sizeof(RangeType *)); + ranges = repalloc_array(ranges, RangeType *, range_capacity); } ranges_seen++; if (!InputFunctionCallSafe(&cache->typioproc, diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index fb69320d2c9..9f433ea79b2 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -1754,7 +1754,7 @@ icu_language_tag(const char *loc_str, int elevel) buflen < MaxAllocSize) { buflen = Min(buflen * 2, MaxAllocSize); - langtag = repalloc(langtag, buflen); + langtag = repalloc_array(langtag, char, buflen); continue; } diff --git a/src/backend/utils/adt/regexp.c b/src/backend/utils/adt/regexp.c index 371e5af28f1..488608e044b 100644 --- a/src/backend/utils/adt/regexp.c +++ b/src/backend/utils/adt/regexp.c @@ -1570,8 +1570,7 @@ setup_regexp_matches(text *orig_str, text *pattern, pg_re_flags *re_flags, ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg("too many regular expression matches"))); - matchctx->match_locs = (int *) repalloc(matchctx->match_locs, - sizeof(int) * array_len); + matchctx->match_locs = repalloc_array(matchctx->match_locs, int, array_len); } /* save this match's locations */ diff --git a/src/backend/utils/adt/tsquery.c b/src/backend/utils/adt/tsquery.c index c9797f632d1..5eac6adf1b2 100644 --- a/src/backend/utils/adt/tsquery.c +++ b/src/backend/utils/adt/tsquery.c @@ -598,7 +598,7 @@ pushValue(TSQueryParserState state, char *strval, int lenval, int16 weight, bool int used = state->curop - state->op; state->lenop *= 2; - state->op = (char *) repalloc(state->op, state->lenop); + state->op = repalloc_array(state->op, char, state->lenop); state->curop = state->op + used; } memcpy(state->curop, strval, lenval); @@ -979,7 +979,7 @@ while( ( (inf)->cur - (inf)->buf ) + (addsize) + 1 >= (inf)->buflen ) \ { \ int len = (inf)->cur - (inf)->buf; \ (inf)->buflen *= 2; \ - (inf)->buf = (char*) repalloc( (void*)(inf)->buf, (inf)->buflen ); \ + (inf)->buf = repalloc_array( (void*)(inf)->buf, char, (inf)->buflen ); \ (inf)->cur = (inf)->buf + len; \ } diff --git a/src/backend/utils/adt/tsquery_cleanup.c b/src/backend/utils/adt/tsquery_cleanup.c index 79c3e6ef1d0..1ec3316169e 100644 --- a/src/backend/utils/adt/tsquery_cleanup.c +++ b/src/backend/utils/adt/tsquery_cleanup.c @@ -67,7 +67,7 @@ plainnode(PLAINTREE *state, NODE *node) if (state->cur == state->len) { state->len *= 2; - state->ptr = (QueryItem *) repalloc(state->ptr, state->len * sizeof(QueryItem)); + state->ptr = repalloc_array(state->ptr, QueryItem, state->len); } memcpy(&(state->ptr[state->cur]), node->valnode, sizeof(QueryItem)); if (node->valnode->type == QI_VAL) diff --git a/src/backend/utils/adt/tsrank.c b/src/backend/utils/adt/tsrank.c index 3012ad437af..bd1c478e370 100644 --- a/src/backend/utils/adt/tsrank.c +++ b/src/backend/utils/adt/tsrank.c @@ -803,7 +803,7 @@ get_docrep(TSVector txt, QueryRepresentation *qr, int *doclen) while (cur + dimt >= len) { len *= 2; - doc = (DocRepresentation *) repalloc(doc, sizeof(DocRepresentation) * len); + doc = repalloc_array(doc, DocRepresentation, len); } /* iterations over entry's positions */ diff --git a/src/backend/utils/adt/tsvector.c b/src/backend/utils/adt/tsvector.c index 84e2a70297f..7117334a9f4 100644 --- a/src/backend/utils/adt/tsvector.c +++ b/src/backend/utils/adt/tsvector.c @@ -139,8 +139,7 @@ uniqueentry(WordEntryIN *a, int l, char *buf, int *outbuflen) /* append ptr's positions to res's positions */ int newlen = ptr->poslen + res->poslen; - res->pos = (WordEntryPos *) - repalloc(res->pos, newlen * sizeof(WordEntryPos)); + res->pos = repalloc_array(res->pos, WordEntryPos, newlen); memcpy(&res->pos[res->poslen], ptr->pos, ptr->poslen * sizeof(WordEntryPos)); res->poslen = newlen; @@ -226,15 +225,14 @@ tsvectorin(PG_FUNCTION_ARGS) if (len >= arrlen) { arrlen *= 2; - arr = (WordEntryIN *) - repalloc(arr, sizeof(WordEntryIN) * arrlen); + arr = repalloc_array(arr, WordEntryIN, arrlen); } while ((cur - tmpbuf) + toklen >= buflen) { int dist = cur - tmpbuf; buflen *= 2; - tmpbuf = (char *) repalloc(tmpbuf, buflen); + tmpbuf = repalloc_array(tmpbuf, char, buflen); cur = tmpbuf + dist; } arr[len].entry.len = toklen; diff --git a/src/backend/utils/adt/tsvector_parser.c b/src/backend/utils/adt/tsvector_parser.c index d7d12236b0e..b69a0a301e6 100644 --- a/src/backend/utils/adt/tsvector_parser.c +++ b/src/backend/utils/adt/tsvector_parser.c @@ -100,7 +100,7 @@ do { \ if ( clen + state->eml >= state->len ) \ { \ state->len *= 2; \ - state->word = (char *) repalloc(state->word, state->len); \ + state->word = repalloc_array(state->word, char, state->len); \ curpos = state->word + clen; \ } \ } while (0) diff --git a/src/backend/utils/adt/varlena.c b/src/backend/utils/adt/varlena.c index 305ecd3f59c..e3eba0b24d9 100644 --- a/src/backend/utils/adt/varlena.c +++ b/src/backend/utils/adt/varlena.c @@ -1967,12 +1967,12 @@ varstrfastcmp_locale(char *a1p, int len1, char *a2p, int len2, SortSupport ssup) if (len1 >= sss->buflen1) { sss->buflen1 = Max(len1 + 1, Min(sss->buflen1 * 2, MaxAllocSize)); - sss->buf1 = repalloc(sss->buf1, sss->buflen1); + sss->buf1 = repalloc_array(sss->buf1, char, sss->buflen1); } if (len2 >= sss->buflen2) { sss->buflen2 = Max(len2 + 1, Min(sss->buflen2 * 2, MaxAllocSize)); - sss->buf2 = repalloc(sss->buf2, sss->buflen2); + sss->buf2 = repalloc_array(sss->buf2, char, sss->buflen2); } /* @@ -2074,7 +2074,7 @@ varstr_abbrev_convert(Datum original, SortSupport ssup) if (len >= sss->buflen1) { sss->buflen1 = Max(len + 1, Min(sss->buflen1 * 2, MaxAllocSize)); - sss->buf1 = repalloc(sss->buf1, sss->buflen1); + sss->buf1 = repalloc_array(sss->buf1, char, sss->buflen1); } /* Might be able to reuse strxfrm() blob from last call */ @@ -2100,7 +2100,7 @@ varstr_abbrev_convert(Datum original, SortSupport ssup) { sss->buflen2 = Max(max_prefix_bytes, Min(sss->buflen2 * 2, MaxAllocSize)); - sss->buf2 = repalloc(sss->buf2, sss->buflen2); + sss->buf2 = repalloc_array(sss->buf2, char, sss->buflen2); } bsize = pg_strxfrm_prefix(sss->buf2, sss->buf1, @@ -2130,7 +2130,7 @@ varstr_abbrev_convert(Datum original, SortSupport ssup) */ sss->buflen2 = Max(bsize + 1, Min(sss->buflen2 * 2, MaxAllocSize)); - sss->buf2 = repalloc(sss->buf2, sss->buflen2); + sss->buf2 = repalloc_array(sss->buf2, char, sss->buflen2); } } diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index b41692dc7d1..3820232c664 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -341,9 +341,7 @@ AddInvalidationMessage(InvalidationMsgsGroup *group, int subgroup, /* Enlarge storage array */ int reqsize = 2 * ima->maxmsgs; - ima->msgs = (SharedInvalidationMessage *) - repalloc(ima->msgs, - reqsize * sizeof(SharedInvalidationMessage)); + ima->msgs = repalloc_array(ima->msgs, SharedInvalidationMessage, reqsize); ima->maxmsgs = reqsize; } } diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index c34ca4feee5..188de2ee504 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -881,8 +881,7 @@ RelationBuildRuleLock(Relation relation) if (numlocks >= maxlocks) { maxlocks *= 2; - rules = (RewriteRule **) - repalloc(rules, sizeof(RewriteRule *) * maxlocks); + rules = repalloc_array(rules, RewriteRule *, maxlocks); } rules[numlocks++] = rule; } @@ -1098,8 +1097,7 @@ RelationBuildDesc(Oid targetRelId, bool insertIt) int allocsize; allocsize = in_progress_list_maxlen * 2; - in_progress_list = repalloc(in_progress_list, - allocsize * sizeof(*in_progress_list)); + in_progress_list = repalloc_array(in_progress_list, InProgressEnt, allocsize); in_progress_list_maxlen = allocsize; } in_progress_offset = in_progress_list_len++; @@ -3124,8 +3122,7 @@ RememberToFreeTupleDescAtEOX(TupleDesc td) Assert(EOXactTupleDescArrayLen > 0); - EOXactTupleDescArray = (TupleDesc *) repalloc(EOXactTupleDescArray, - newlen * sizeof(TupleDesc)); + EOXactTupleDescArray = repalloc_array(EOXactTupleDescArray, TupleDesc, newlen); EOXactTupleDescArrayLen = newlen; } @@ -3195,7 +3192,7 @@ AssertPendingSyncs_RelationCache(void) if (nrels >= maxrels) { maxrels *= 2; - rels = repalloc(rels, maxrels * sizeof(*rels)); + rels = repalloc_array(rels, Relation, maxrels); } rels[nrels++] = r; } @@ -6264,7 +6261,7 @@ load_relcache_init_file(bool shared) if (num_rels >= max_rels) { max_rels *= 2; - rels = (Relation *) repalloc(rels, max_rels * sizeof(Relation)); + rels = repalloc_array(rels, Relation, max_rels); } rel = rels[num_rels++] = (Relation) palloc(len); diff --git a/src/backend/utils/cache/typcache.c b/src/backend/utils/cache/typcache.c index 00133ba92ef..eca2d73231a 100644 --- a/src/backend/utils/cache/typcache.c +++ b/src/backend/utils/cache/typcache.c @@ -455,8 +455,7 @@ lookup_type_cache(Oid type_id, int flags) int allocsize; allocsize = in_progress_list_maxlen * 2; - in_progress_list = repalloc(in_progress_list, - allocsize * sizeof(*in_progress_list)); + in_progress_list = repalloc_array(in_progress_list, Oid, allocsize); in_progress_list_maxlen = allocsize; } @@ -1236,14 +1235,12 @@ load_domaintype_info(TypeCacheEntry *typentry) if (ccons == NULL) { cconslen = 8; - ccons = (DomainConstraintState **) - palloc(cconslen * sizeof(DomainConstraintState *)); + ccons = palloc_array(DomainConstraintState *, cconslen); } else if (nccons >= cconslen) { cconslen *= 2; - ccons = (DomainConstraintState **) - repalloc(ccons, cconslen * sizeof(DomainConstraintState *)); + ccons = repalloc_array(ccons, DomainConstraintState *, cconslen); } ccons[nccons++] = r; } @@ -2828,7 +2825,7 @@ load_enum_cache_data(TypeCacheEntry *tcache) if (numitems >= maxitems) { maxitems *= 2; - items = (EnumItem *) repalloc(items, sizeof(EnumItem) * maxitems); + items = repalloc_array(items, EnumItem, maxitems); } items[numitems].enum_oid = en->oid; items[numitems].sort_order = en->enumsortorder; diff --git a/src/backend/utils/mb/mbutils.c b/src/backend/utils/mb/mbutils.c index e4f29c2b1c9..27abe134a2a 100644 --- a/src/backend/utils/mb/mbutils.c +++ b/src/backend/utils/mb/mbutils.c @@ -439,7 +439,7 @@ pg_do_encoding_conversion(unsigned char *src, int len, errdetail("String of %d bytes is too long for encoding conversion.", len))); - result = (unsigned char *) repalloc(result, resultlen + 1); + result = repalloc_array(result, unsigned char, resultlen + 1); } return result; @@ -853,7 +853,7 @@ perform_default_encoding_conversion(const char *src, int len, errdetail("String of %d bytes is too long for encoding conversion.", len))); - result = (char *) repalloc(result, resultlen + 1); + result = repalloc_array(result, char, resultlen + 1); } return result; diff --git a/src/backend/utils/misc/conffiles.c b/src/backend/utils/misc/conffiles.c index 3148aa2cc19..c77ff4d38d4 100644 --- a/src/backend/utils/misc/conffiles.c +++ b/src/backend/utils/misc/conffiles.c @@ -144,8 +144,7 @@ GetConfFilesInDir(const char *includedir, const char *calling_file, if (*num_filenames >= size_filenames) { size_filenames += 32; - filenames = (char **) repalloc(filenames, - size_filenames * sizeof(char *)); + filenames = repalloc_array(filenames, char *, size_filenames); } filenames[*num_filenames] = pstrdup(filename); (*num_filenames)++; diff --git a/src/backend/utils/misc/tzparser.c b/src/backend/utils/misc/tzparser.c index 8129cf44c4f..ace982cf8d7 100644 --- a/src/backend/utils/misc/tzparser.c +++ b/src/backend/utils/misc/tzparser.c @@ -250,7 +250,7 @@ addToArray(tzEntry **base, int *arraysize, int n, if (n >= *arraysize) { *arraysize *= 2; - *base = (tzEntry *) repalloc(*base, *arraysize * sizeof(tzEntry)); + *base = repalloc_array(*base, tzEntry, *arraysize); } arrayptr = *base + low; diff --git a/src/backend/utils/sort/logtape.c b/src/backend/utils/sort/logtape.c index 2e8fab35e7b..5daec060078 100644 --- a/src/backend/utils/sort/logtape.c +++ b/src/backend/utils/sort/logtape.c @@ -445,8 +445,7 @@ ltsGetPreallocBlock(LogicalTapeSet *lts, LogicalTape *lt) lt->prealloc_size *= 2; if (lt->prealloc_size > TAPE_WRITE_PREALLOC_MAX) lt->prealloc_size = TAPE_WRITE_PREALLOC_MAX; - lt->prealloc = (int64 *) repalloc(lt->prealloc, - sizeof(int64) * lt->prealloc_size); + lt->prealloc = repalloc_array(lt->prealloc, int64, lt->prealloc_size); } /* refill preallocation list */ @@ -490,8 +489,7 @@ ltsReleaseBlock(LogicalTapeSet *lts, int64 blocknum) return; lts->freeBlocksLen *= 2; - lts->freeBlocks = (int64 *) repalloc(lts->freeBlocks, - lts->freeBlocksLen * sizeof(int64)); + lts->freeBlocks = repalloc_array(lts->freeBlocks, int64, lts->freeBlocksLen); } /* create a "hole" at end of minheap array */ diff --git a/src/backend/utils/sort/tuplestore.c b/src/backend/utils/sort/tuplestore.c index fc8adeef18c..35e438ceaa6 100644 --- a/src/backend/utils/sort/tuplestore.c +++ b/src/backend/utils/sort/tuplestore.c @@ -406,8 +406,7 @@ tuplestore_alloc_read_pointer(Tuplestorestate *state, int eflags) { int newcnt = state->readptrsize * 2; - state->readptrs = (TSReadPointer *) - repalloc(state->readptrs, newcnt * sizeof(TSReadPointer)); + state->readptrs = repalloc_array(state->readptrs, TSReadPointer, newcnt); state->readptrsize = newcnt; } diff --git a/src/backend/utils/time/combocid.c b/src/backend/utils/time/combocid.c index 614b7c1006b..5113cf809ba 100644 --- a/src/backend/utils/time/combocid.c +++ b/src/backend/utils/time/combocid.c @@ -242,8 +242,7 @@ GetComboCommandId(CommandId cmin, CommandId cmax) { int newsize = sizeComboCids * 2; - comboCids = (ComboCidKeyData *) - repalloc(comboCids, sizeof(ComboCidKeyData) * newsize); + comboCids = repalloc_array(comboCids, ComboCidKeyData, newsize); sizeComboCids = newsize; } diff --git a/src/common/blkreftable.c b/src/common/blkreftable.c index 9e0db8a5433..3dce09beb70 100644 --- a/src/common/blkreftable.c +++ b/src/common/blkreftable.c @@ -1039,16 +1039,13 @@ BlockRefTableEntryMarkBlockModified(BlockRefTableEntry *entry, } else { - entry->chunk_size = repalloc(entry->chunk_size, - sizeof(uint16) * max_chunks); + entry->chunk_size = repalloc_array(entry->chunk_size, uint16, max_chunks); memset(&entry->chunk_size[entry->nchunks], 0, extra_chunks * sizeof(uint16)); - entry->chunk_usage = repalloc(entry->chunk_usage, - sizeof(uint16) * max_chunks); + entry->chunk_usage = repalloc_array(entry->chunk_usage, uint16, max_chunks); memset(&entry->chunk_usage[entry->nchunks], 0, extra_chunks * sizeof(uint16)); - entry->chunk_data = repalloc(entry->chunk_data, - sizeof(BlockRefTableChunk) * max_chunks); + entry->chunk_data = repalloc_array(entry->chunk_data, BlockRefTableChunk, max_chunks); memset(&entry->chunk_data[entry->nchunks], 0, extra_chunks * sizeof(BlockRefTableChunk)); } @@ -1138,8 +1135,7 @@ BlockRefTableEntryMarkBlockModified(BlockRefTableEntry *entry, unsigned newsize = entry->chunk_size[chunkno] * 2; Assert(newsize <= MAX_ENTRIES_PER_CHUNK); - entry->chunk_data[chunkno] = repalloc(entry->chunk_data[chunkno], - newsize * sizeof(uint16)); + entry->chunk_data[chunkno] = repalloc_array(entry->chunk_data[chunkno], uint16, newsize); entry->chunk_size[chunkno] = newsize; } diff --git a/src/common/rmtree.c b/src/common/rmtree.c index e35b5e7ba73..86560417123 100644 --- a/src/common/rmtree.c +++ b/src/common/rmtree.c @@ -85,8 +85,7 @@ rmtree(const char *path, bool rmtopdir) */ if (dirnames_size == dirnames_capacity) { - dirnames = repalloc(dirnames, - sizeof(char *) * dirnames_capacity * 2); + dirnames = repalloc_array(dirnames, char *, dirnames_capacity * 2); dirnames_capacity *= 2; } dirnames[dirnames_size++] = pstrdup(pathbuf); diff --git a/src/common/stringinfo.c b/src/common/stringinfo.c index e2b16d5e308..169df1d9ea6 100644 --- a/src/common/stringinfo.c +++ b/src/common/stringinfo.c @@ -394,7 +394,7 @@ enlargeStringInfo(StringInfo str, int needed) if (newlen > (int) MaxAllocSize) newlen = (int) MaxAllocSize; - str->data = (char *) repalloc(str->data, newlen); + str->data = repalloc_array(str->data, char, newlen); str->maxlen = newlen; } diff --git a/src/pl/plpgsql/src/pl_comp.c b/src/pl/plpgsql/src/pl_comp.c index b72c963b3be..75184b75707 100644 --- a/src/pl/plpgsql/src/pl_comp.c +++ b/src/pl/plpgsql/src/pl_comp.c @@ -2242,7 +2242,7 @@ plpgsql_adddatum(PLpgSQL_datum *newdatum) if (plpgsql_nDatums == datums_alloc) { datums_alloc *= 2; - plpgsql_Datums = repalloc(plpgsql_Datums, sizeof(PLpgSQL_datum *) * datums_alloc); + plpgsql_Datums = repalloc_array(plpgsql_Datums, PLpgSQL_datum *, datums_alloc); } newdatum->dno = plpgsql_nDatums; diff --git a/src/test/modules/test_regex/test_regex.c b/src/test/modules/test_regex/test_regex.c index 918c52c00b0..561f79c9460 100644 --- a/src/test/modules/test_regex/test_regex.c +++ b/src/test/modules/test_regex/test_regex.c @@ -503,8 +503,7 @@ setup_test_matches(text *orig_str, ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg("too many regular expression matches"))); - matchctx->match_locs = (int *) repalloc(matchctx->match_locs, - sizeof(int) * array_len); + matchctx->match_locs = repalloc_array(matchctx->match_locs, int, array_len); } /* save this match's locations */ @@ -552,8 +551,7 @@ setup_test_matches(text *orig_str, ereport(ERROR, (errcode(ERRCODE_PROGRAM_LIMIT_EXCEEDED), errmsg("too many regular expression matches"))); - matchctx->match_locs = (int *) repalloc(matchctx->match_locs, - sizeof(int) * array_len); + matchctx->match_locs = repalloc_array(matchctx->match_locs, int, array_len); } matchctx->match_locs[array_idx++] = matchctx->details.rm_extend.rm_so; diff --git a/src/test/modules/test_tidstore/test_tidstore.c b/src/test/modules/test_tidstore/test_tidstore.c index 86200e99860..0793cfa374a 100644 --- a/src/test/modules/test_tidstore/test_tidstore.c +++ b/src/test/modules/test_tidstore/test_tidstore.c @@ -212,9 +212,9 @@ do_set_block_offsets(PG_FUNCTION_ARGS) if (idx >= items.max_tids) { items.max_tids *= 2; - items.insert_tids = repalloc(items.insert_tids, sizeof(ItemPointerData) * items.max_tids); - items.lookup_tids = repalloc(items.lookup_tids, sizeof(ItemPointerData) * items.max_tids); - items.iter_tids = repalloc(items.iter_tids, sizeof(ItemPointerData) * items.max_tids); + items.insert_tids = repalloc_array(items.insert_tids, ItemPointerData, items.max_tids); + items.lookup_tids = repalloc_array(items.lookup_tids, ItemPointerData, items.max_tids); + items.iter_tids = repalloc_array(items.iter_tids, ItemPointerData, items.max_tids); } tid = &(items.insert_tids[idx]); -- Tristan Partin https://tristan.partin.io