mirror of
https://github.com/postgres/postgres.git
synced 2025-06-14 18:42:34 +03:00
Avoid out-of-bounds read in errfinish if error_stack_depth < 0.
If errordata_stack_depth < 0, we won't find that out and correct the problem until CHECK_STACK_DEPTH() is invoked. In the meantime, elevel will be set based on an invalid read. This is probably harmless in practice, but it seems cleaner this way. Xi Wang
This commit is contained in:
@ -397,12 +397,13 @@ void
|
|||||||
errfinish(int dummy,...)
|
errfinish(int dummy,...)
|
||||||
{
|
{
|
||||||
ErrorData *edata = &errordata[errordata_stack_depth];
|
ErrorData *edata = &errordata[errordata_stack_depth];
|
||||||
int elevel = edata->elevel;
|
int elevel;
|
||||||
MemoryContext oldcontext;
|
MemoryContext oldcontext;
|
||||||
ErrorContextCallback *econtext;
|
ErrorContextCallback *econtext;
|
||||||
|
|
||||||
recursion_depth++;
|
recursion_depth++;
|
||||||
CHECK_STACK_DEPTH();
|
CHECK_STACK_DEPTH();
|
||||||
|
elevel = edata->elevel;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Do processing in ErrorContext, which we hope has enough reserved space
|
* Do processing in ErrorContext, which we hope has enough reserved space
|
||||||
|
Reference in New Issue
Block a user