Обсуждение: Memory error in src/backend/replication/logical/origin.c
Hackers,
bool nulls[Natts_pg_replication_origin];
... memset(&nulls, 0, sizeof(nulls));
around lines 277 through 303. Patch below.
mark
diff --git a/src/backend/replication/logical/origin.c b/src/backend/replication/logical/origin.c
index 55382b4b24..88188bd190 100644
--- a/src/backend/replication/logical/origin.c
+++ b/src/backend/replication/logical/origin.c
@@ -300,7 +300,7 @@ replorigin_create(char *roname) * Ok, found an unused roident, insert the
newrow and do a CCI, * so our callers can look it up if they want to. */
- memset(&nulls, 0, sizeof(nulls));
+ memset(nulls, 0, sizeof(nulls));
values[Anum_pg_replication_origin_roident- 1] = ObjectIdGetDatum(roident);
values[Anum_pg_replication_origin_roname- 1] = roname_d;
Mark Dilger <hornschnorter@gmail.com> writes:
> bool nulls[Natts_pg_replication_origin];
> memset(&nulls, 0, sizeof(nulls));
> around lines 277 through 303. Patch below.
AFAIK this is not a bug, though I agree that dropping the "&" is probably
better style. The reason is that applying "&" to an undecorated array
name is basically a no-op, because without "&" the array name would decay
to a pointer anyway. With "&", the address-taking is explicit, but you
still get a pointer to the array, not a pointer to some pointer to the
array. Ain't C fun?
regards, tom lane
> On Nov 26, 2017, at 10:28 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > > Mark Dilger <hornschnorter@gmail.com> writes: >> bool nulls[Natts_pg_replication_origin]; >> memset(&nulls, 0, sizeof(nulls)); > >> around lines 277 through 303. Patch below. > > AFAIK this is not a bug, though I agree that dropping the "&" is probably > better style. The reason is that applying "&" to an undecorated array > name is basically a no-op, because without "&" the array name would decay > to a pointer anyway. With "&", the address-taking is explicit, but you > still get a pointer to the array, not a pointer to some pointer to the > array. Ain't C fun? Thanks for the refresher on C madness. mark