> > It's possible that memset() would be more convincing. > > +1
OK, here is corrected patch. -- Best regards, Aleksander Alekseev http://eax.me/
diff --git a/src/backend/access/gist/gistxlog.c b/src/backend/access/gist/gistxlog.c index b48e97c..273e0b0 100644 --- a/src/backend/access/gist/gistxlog.c +++ b/src/backend/access/gist/gistxlog.c @@ -337,6 +337,7 @@ gistXLogSplit(RelFileNode node, BlockNumber blkno, bool page_is_leaf, for (ptr = dist; ptr; ptr = ptr->next) npage++; + memset(&xlrec, 0, sizeof(xlrec)); xlrec.origrlink = origrlink; xlrec.orignsn = orignsn; xlrec.origleaf = page_is_leaf; diff --git a/src/backend/access/spgist/spgdoinsert.c b/src/backend/access/spgist/spgdoinsert.c index f090ca5..1275b6c 100644 --- a/src/backend/access/spgist/spgdoinsert.c +++ b/src/backend/access/spgist/spgdoinsert.c @@ -204,6 +204,7 @@ addLeafTuple(Relation index, SpGistState *state, SpGistLeafTuple leafTuple, { spgxlogAddLeaf xlrec; + memset(&xlrec, 0, sizeof(xlrec)); xlrec.newPage = isNew; xlrec.storesNulls = isNulls; @@ -448,6 +449,8 @@ moveLeafs(Relation index, SpGistState *state, i = it->nextOffset; } + memset(&xlrec, 0, sizeof(xlrec)); + /* Find a leaf page that will hold them */ nbuf = SpGistGetBuffer(index, GBUF_LEAF | (isNulls ? GBUF_NULLS : 0), size, &xlrec.newPage); @@ -723,6 +726,7 @@ doPickSplit(Relation index, SpGistState *state, newLeafs = (SpGistLeafTuple *) palloc(sizeof(SpGistLeafTuple) * n); leafPageSelect = (uint8 *) palloc(sizeof(uint8) * n); + memset(&xlrec, 0, sizeof(xlrec)); STORE_STATE(state, xlrec.stateSrc); /* @@ -1501,6 +1505,7 @@ spgAddNodeAction(Relation index, SpGistState *state, newInnerTuple = addNode(state, innerTuple, nodeLabel, nodeN); /* Prepare WAL record */ + memset(&xlrec, 0, sizeof(xlrec)); STORE_STATE(state, xlrec.stateSrc); xlrec.offnum = current->offnum; @@ -1741,6 +1746,7 @@ spgSplitNodeAction(Relation index, SpGistState *state, postfixTuple->allTheSame = innerTuple->allTheSame; /* prep data for WAL record */ + memset(&xlrec, 0, sizeof(xlrec)); xlrec.newPage = false; /* diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index b119a47..a50a244 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -4798,15 +4798,14 @@ BootStrapXLOG(void) * segment with logid=0 logseg=1. The very first WAL segment, 0/0, is not * used, so that we can use 0/0 to mean "before any valid WAL segment". */ + memset(&checkPoint, 0, sizeof(checkPoint)); checkPoint.redo = XLogSegSize + SizeOfXLogLongPHD; checkPoint.ThisTimeLineID = ThisTimeLineID; checkPoint.PrevTimeLineID = ThisTimeLineID; checkPoint.fullPageWrites = fullPageWrites; - checkPoint.nextXidEpoch = 0; checkPoint.nextXid = FirstNormalTransactionId; checkPoint.nextOid = FirstBootstrapObjectId; checkPoint.nextMulti = FirstMultiXactId; - checkPoint.nextMultiOffset = 0; checkPoint.oldestXid = FirstNormalTransactionId; checkPoint.oldestXidDB = TemplateDbOid; checkPoint.oldestMulti = FirstMultiXactId; diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c index 1ff5728..a10c078 100644 --- a/src/backend/commands/tablespace.c +++ b/src/backend/commands/tablespace.c @@ -669,6 +669,11 @@ destroy_tablespace_directories(Oid tablespaceoid, bool redo) char *subfile; struct stat st; + /* + * Prevents MemorySanitizer's "use-of-uninitialized-value" warning + */ + memset(&st, 0, sizeof(st)); + linkloc_with_version_dir = psprintf("pg_tblspc/%u/%s", tablespaceoid, TABLESPACE_VERSION_DIRECTORY); diff --git a/src/backend/libpq/hba.c b/src/backend/libpq/hba.c index 28f9fb5..45aa802 100644 --- a/src/backend/libpq/hba.c +++ b/src/backend/libpq/hba.c @@ -1008,14 +1008,9 @@ parse_hba_line(List *line, int line_num, char *raw_line) *cidr_slash = '\0'; /* Get the IP address either way */ + memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_NUMERICHOST; hints.ai_family = AF_UNSPEC; - hints.ai_socktype = 0; - hints.ai_protocol = 0; - hints.ai_addrlen = 0; - hints.ai_canonname = NULL; - hints.ai_addr = NULL; - hints.ai_next = NULL; ret = pg_getaddrinfo_all(str, NULL, &hints, &gai_result); if (ret == 0 && gai_result) diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c index 1467355..ae7394c 100644 --- a/src/backend/postmaster/pgstat.c +++ b/src/backend/postmaster/pgstat.c @@ -341,14 +341,10 @@ pgstat_init(void) /* * Create the UDP socket for sending and receiving statistic messages */ + memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_PASSIVE; hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_DGRAM; - hints.ai_protocol = 0; - hints.ai_addrlen = 0; - hints.ai_addr = NULL; - hints.ai_canonname = NULL; - hints.ai_next = NULL; ret = pg_getaddrinfo_all("localhost", NULL, &hints, &addrs); if (ret || !addrs) { diff --git a/src/backend/utils/cache/inval.c b/src/backend/utils/cache/inval.c index 924bebb..498e7bd 100644 --- a/src/backend/utils/cache/inval.c +++ b/src/backend/utils/cache/inval.c @@ -330,6 +330,7 @@ AddCatcacheInvalidationMessage(InvalidationListHeader *hdr, SharedInvalidationMessage msg; Assert(id < CHAR_MAX); + memset(&msg, 0, sizeof(msg)); msg.cc.id = (int8) id; msg.cc.dbId = dbId; msg.cc.hashValue = hashValue; diff --git a/src/backend/utils/mmgr/aset.c b/src/backend/utils/mmgr/aset.c index d26991e..46ab8a2 100644 --- a/src/backend/utils/mmgr/aset.c +++ b/src/backend/utils/mmgr/aset.c @@ -850,7 +850,7 @@ AllocSetAlloc(MemoryContext context, Size size) blksize <<= 1; /* Try to allocate it */ - block = (AllocBlock) malloc(blksize); + block = (AllocBlock) calloc(1, blksize); /* * We could be asking for pretty big blocks here, so cope if malloc @@ -861,7 +861,7 @@ AllocSetAlloc(MemoryContext context, Size size) blksize >>= 1; if (blksize < required_size) break; - block = (AllocBlock) malloc(blksize); + block = (AllocBlock) calloc(1, blksize); } if (block == NULL) diff --git a/src/bin/initdb/initdb.c b/src/bin/initdb/initdb.c index ed3ba7b..4ff5d31 100644 --- a/src/bin/initdb/initdb.c +++ b/src/bin/initdb/initdb.c @@ -1351,14 +1351,9 @@ setup_config(void) #endif /* for best results, this code should match parse_hba() */ + memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_NUMERICHOST; hints.ai_family = AF_UNSPEC; - hints.ai_socktype = 0; - hints.ai_protocol = 0; - hints.ai_addrlen = 0; - hints.ai_canonname = NULL; - hints.ai_addr = NULL; - hints.ai_next = NULL; if (err != 0 || getaddrinfo("::1", NULL, &hints, &gai_result) != 0) diff --git a/src/test/regress/regress.c b/src/test/regress/regress.c index e7826a4..4bbd4d2 100644 --- a/src/test/regress/regress.c +++ b/src/test/regress/regress.c @@ -1022,6 +1022,11 @@ test_atomic_uint64(void) uint64 expected; int i; + /* + * Prevents MemorySanitizer's "use-of-uninitialized-value" warning + */ + memset(&var, 0, sizeof(var)); + pg_atomic_init_u64(&var, 0); if (pg_atomic_read_u64(&var) != 0)
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers