• Tom Lane's avatar
    Use correct text domain for errcontext() appearing within ereport(). · 1f9bf05e
    Tom Lane authored
    The mechanism added in commit dbdf9679
    for associating the correct translation domain with errcontext strings
    potentially fails in cases where errcontext() is used within an ereport()
    macro.  Such usage was not originally envisioned for errcontext(), but we
    do have a few places that do it.  In this situation, the intended comma
    expression becomes just a couple of arguments to errfinish(), which the
    compiler might choose to evaluate right-to-left.
    
    Fortunately, in such cases the textdomain for the errcontext string must
    be the same as for the surrounding ereport.  So we can fix this by letting
    errstart initialize context_domain along with domain; then it will have
    the correct value no matter which order the calls occur in.  (Note that
    error stack callback functions are not invoked until errfinish, so normal
    usage of errcontext won't affect what happens for errcontext calls within
    the ereport macro.)
    
    In passing, make sure that errcontext calls within the main backend set
    context_domain to something non-NULL.  This isn't a live bug because
    NULL would select the current textdomain() setting which should be the
    right thing anyway --- but it seems better to handle this completely
    consistently with the regular domain field.
    
    Per report from Dmitry Voronin.  Backpatch to 9.3; before that, there
    wasn't any attempt to ensure that errcontext strings were translated
    in an appropriate domain.
    1f9bf05e
elog.c 98.4 KB