Relocate a badly placed Assert in COPY FROM code
authorDavid Rowley <[email protected]>
Fri, 16 Aug 2024 22:36:23 +0000 (10:36 +1200)
committerDavid Rowley <[email protected]>
Fri, 16 Aug 2024 22:36:23 +0000 (10:36 +1200)
There's not much point in asserting a pointer isn't NULL after some code
has already dereferenced that pointer.

Adjust the code so that the Assert occurs before the pointer dereference.

The Assert probably has questionable value in the first place, but it
seems worth keeping around to document the contract between
CopyMultiInsertInfoNextFreeSlot() and its callers.

Author: Amul Sul <[email protected]>
Discussion: https://postgr.es/m/CAAJ_b94hXQzXaJxTLShkxQUgezf_SUxhzX9TH2f-g6gP7bne7g@mail.gmail.com

src/backend/commands/copyfrom.c

index ca85270be6d35e27859eb8311a393ac593a94963..2d3462913e17309e60eaa5a454d840b1a876386a 100644 (file)
@@ -597,10 +597,12 @@ CopyMultiInsertInfoNextFreeSlot(CopyMultiInsertInfo *miinfo,
                                ResultRelInfo *rri)
 {
    CopyMultiInsertBuffer *buffer = rri->ri_CopyMultiInsertBuffer;
-   int         nused = buffer->nused;
+   int         nused;
 
    Assert(buffer != NULL);
-   Assert(nused < MAX_BUFFERED_TUPLES);
+   Assert(buffer->nused < MAX_BUFFERED_TUPLES);
+
+   nused = buffer->nused;
 
    if (buffer->slots[nused] == NULL)
        buffer->slots[nused] = table_slot_create(rri->ri_RelationDesc, NULL);