• Tom Lane's avatar
    Fix broken logic for reporting PL/Python function names in errcontext. · e748e902
    Tom Lane authored
    plpython_error_callback() reported the name of the function associated
    with the topmost PL/Python execution context.  This was not merely
    wrong if there were nested PL/Python contexts, but it risked a core
    dump if the topmost one is an inline code block rather than a named
    function.  That will have proname = NULL, and so we were passing a NULL
    pointer to snprintf("%s").  It seems that none of the PL/Python-testing
    machines in the buildfarm will dump core for that, but some platforms do,
    as reported by Marina Polyakova.
    
    Investigation finds that there actually is an existing regression test
    that used to prove that the behavior was wrong, though apparently no one
    had noticed that it was printing the wrong function name.  It stopped
    showing the problem in 9.6 when we adjusted psql to not print CONTEXT
    by default for NOTICE messages.  The problem is masked (if your platform
    avoids the core dump) in error cases, because PL/Python will throw away
    the originally generated error info in favor of a new traceback produced
    at the outer level.
    
    Repair by using ErrorContextCallback.arg to pass the correct context to
    the error callback.  Add a regression test illustrating correct behavior.
    
    Back-patch to all supported branches, since they're all broken this way.
    
    Discussion: https://postgr.es/m/156b989dbc6fe7c4d3223cf51da61195@postgrespro.ru
    e748e902
plpython_error.out 12.8 KB