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.
pull/239/head
Tom Lane 1 month ago
parent 4fbfdde58e
commit 5c8eda1f72
  1. 15
      src/backend/utils/error/elog.c

@ -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,

Loading…
Cancel
Save