mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-17 19:30:00 +08:00
Fix nested error handling in PG_FINALLY
We need to pop the error stack before running the user-supplied PG_FINALLY code. Otherwise an error in the cleanup code would end up at the same sigsetjmp() invocation and result in an infinite error handling loop. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://www.postgresql.org/message-id/flat/95a822c3-728b-af0e-d7e5-71890507ae0c%402ndquadrant.com
This commit is contained in:
parent
a0c96856e8
commit
581a55889b
@ -3868,7 +3868,7 @@ xml_xmlnodetoxmltype(xmlNodePtr cur, PgXmlErrorContext *xmlerrcxt)
|
||||
|
||||
result = xmlBuffer_to_xmltype(buf);
|
||||
}
|
||||
PG_FINALLY()
|
||||
PG_FINALLY();
|
||||
{
|
||||
if (nodefree)
|
||||
nodefree(cur_copy);
|
||||
|
@ -338,14 +338,16 @@ extern PGDLLIMPORT ErrorContextCallback *error_context_stack;
|
||||
} \
|
||||
else \
|
||||
_do_rethrow = true; \
|
||||
{
|
||||
{ \
|
||||
PG_exception_stack = _save_exception_stack; \
|
||||
error_context_stack = _save_context_stack
|
||||
|
||||
#define PG_END_TRY() \
|
||||
} \
|
||||
PG_exception_stack = _save_exception_stack; \
|
||||
error_context_stack = _save_context_stack; \
|
||||
if (_do_rethrow) \
|
||||
PG_RE_THROW(); \
|
||||
PG_exception_stack = _save_exception_stack; \
|
||||
error_context_stack = _save_context_stack; \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user