• Neil Conway's avatar
    In PLy_function_build_args(), the code loops repeatedly, constructing · c08c8529
    Neil Conway authored
    one argument at a time and then inserting the argument into a Python
    list via PyList_SetItem(). This "steals" the reference to the argument:
    that is, the reference to the new list member is now held by the Python
    list itself. This works fine, except if an elog occurs. This causes the
    function's PG_CATCH() block to be invoked, which decrements the
    reference counts on both the current argument and the list of arguments.
    If the elog happens to occur during the second or subsequent iteration
    of the loop, the reference count on the current argument will be
    decremented twice.
    
    The fix is simple: set the local pointer to the current argument to NULL
    immediately after adding it to the argument list. This ensures that the
    Py_XDECREF() in the PG_CATCH() block doesn't double-decrement.
    c08c8529
plpython.c 61.4 KB