https://bugs.exim.org/show_bug.cgi?id=1630

            Bug ID: 1630
           Summary: EXPERIMENTAL_DSN SIGSEGV
           Product: Exim
           Version: 4.85
          Hardware: x86-64
                OS: Linux
            Status: NEW
          Severity: bug
          Priority: medium
         Component: Delivery in general
          Assignee: ni...@exim.org
          Reporter: wbre...@gmx.net
                CC: exim-dev@exim.org

Created attachment 810
  --> https://bugs.exim.org/attachment.cgi?id=810&action=edit
fix SIGSEGV and use addr->user_message if addr->message not defined

deliver.c:print_dsn_diagnostic_code()

starts with
/* check host_used, af_pass_message flag and addr->message for safety reasons
*/
if (!addr->host_used && testflag(addr, af_pass_message) && addr->message)
  return;

which is wrong and should at least be:
/* check host_used, af_pass_message flag and addr->message for safety reasons
*/
if (!addr->host_used && testflag(addr, af_pass_message) && !addr->message)
  return;

This causes SIGSEGV in case a message is deferred by "connection timed out" and
similar cases in which no SMTP answer is available in addr->message.

The question is if we should use addr->user_message in this case as
print_address_error() does.

I found an example in RFC 1894 using:
Diagnostic-Code: smtp; 426 connection timed out

Currently I'm testing the attached patch which adds 426 and addr->user_message
in case addr->message is not available. It returns without adding the
Diagnostic-Code header in case both are unavailable.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-- 
## List details at https://lists.exim.org/mailman/listinfo/exim-dev Exim 
details at http://www.exim.org/ ##

Reply via email to