1
0
mirror of https://github.com/postgres/postgres.git synced 2025-10-18 04:29:09 +03:00

Take a little more care in set_backtrace().

Coverity complained that the "errtrace" string is leaked if we return
early because backtrace_symbols fails.  Another criticism that could
be leveled at this is that not providing any hint of what happened is
user-unfriendly.  Fix that.

The odds of a leak here are small, and typically it wouldn't matter
anyway since the leak will be in ErrorContext which will soon get
reset.  So I'm not feeling a need to back-patch.
This commit is contained in:
Tom Lane
2025-08-03 13:01:17 -04:00
parent 4fbfdde58e
commit 5c8eda1f72

View File

@@ -1128,12 +1128,15 @@ set_backtrace(ErrorData *edata, int num_skip)
nframes = backtrace(buf, lengthof(buf)); nframes = backtrace(buf, lengthof(buf));
strfrms = backtrace_symbols(buf, nframes); strfrms = backtrace_symbols(buf, nframes);
if (strfrms == NULL) if (strfrms != NULL)
return; {
for (int i = num_skip; i < nframes; i++)
for (int i = num_skip; i < nframes; i++) appendStringInfo(&errtrace, "\n%s", strfrms[i]);
appendStringInfo(&errtrace, "\n%s", strfrms[i]); free(strfrms);
free(strfrms); }
else
appendStringInfoString(&errtrace,
"insufficient memory for backtrace generation");
} }
#else #else
appendStringInfoString(&errtrace, appendStringInfoString(&errtrace,