• Tom Lane's avatar
    Avoid premature free of pass-by-reference CALL arguments. · d02d4a6d
    Tom Lane authored
    Prematurely freeing the EState used to evaluate CALL arguments led, in some
    cases, to passing dangling pointers to the procedure.  This was masked in
    trivial cases because the argument pointers would point to Const nodes in
    the original expression tree, and in some other cases because the result
    value would end up in the standalone ExprContext rather than in memory
    belonging to the EState --- but that wasn't exactly high quality
    programming either, because the standalone ExprContext was never
    explicitly freed, breaking assorted API contracts.
    
    In addition, using a separate EState for each argument was just silly.
    
    So let's use just one EState, and one ExprContext, and make the latter
    belong to the former rather than be standalone, and clean up the EState
    (and hence the ExprContext) post-call.
    
    While at it, improve the function's commentary a bit.
    
    Discussion: https://postgr.es/m/29173.1518282748@sss.pgh.pa.us
    d02d4a6d
create_procedure.out 3.63 KB