]> granicus.if.org Git - postgresql/commit
Use correct text domain for errcontext() appearing within ereport().
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 12 Jan 2015 17:40:09 +0000 (12:40 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 12 Jan 2015 17:40:29 +0000 (12:40 -0500)
commit1f9bf05e539646103c518bcbb49c04919b238f7a
tree626d8480bb533258664bfac17c1fa65a8a8c26ac
parent1bf4a84d0f9f7a442790d7948e96cd42eeb90a91
Use correct text domain for errcontext() appearing within ereport().

The mechanism added in commit dbdf9679d7d61b03a3bf73af9b095831b7010eb5
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.
src/backend/utils/error/elog.c