• Tom Lane's avatar
    Fix failure to account for memory used by tuplestore_putvalues(). · 10db3de6
    Tom Lane authored
    This oversight could result in a tuplestore using much more than the
    intended amount of memory.  It would only happen in a code path that loaded
    a tuplestore via tuplestore_putvalues(), and many of those won't emit huge
    amounts of data; but cases such as holdable cursors and plpgsql's RETURN
    NEXT command could have the problem.  The fix ensures that the tuplestore
    will switch to write-to-disk mode when it overruns work_mem.
    
    The potential overrun was finite, because we would still count the space
    used by the tuple pointer array, so the tuplestore code would eventually
    flip into write-to-disk mode anyway.  When storing wide tuples we would
    go far past the expected work_mem usage before that happened; but this
    may account for the lack of prior reports.
    
    Back-patch to 8.4, where tuplestore_putvalues was introduced.
    
    Per bug #6061 from Yann Delorme.
    10db3de6
tuplestore.c 38.1 KB