From: Roman Arutyunyan Date: Sat, 25 Apr 2026 12:41:36 +0000 (+0400) Subject: Mail: fix session cleanup on error path X-Git-Tag: release-1.31.1~4 X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/postgres_fdw.c?a=commitdiff_plain;h=a4d5da3e401bf9c07c1a0856e682789f3a0f97b2;p=nginx.git Mail: fix session cleanup on error path Previously, when ngx_handle_read_event() or ngx_handle_write_event() returned an error while handling an SMTP, POP3 or IMAP session, the released session memory could be accessed after handling the error. --- diff --git a/src/mail/ngx_mail_imap_handler.c b/src/mail/ngx_mail_imap_handler.c index 291e87a4d..dc8cbefab 100644 --- a/src/mail/ngx_mail_imap_handler.c +++ b/src/mail/ngx_mail_imap_handler.c @@ -48,6 +48,7 @@ ngx_mail_imap_init_session(ngx_mail_session_t *s, ngx_connection_t *c) if (ngx_handle_read_event(c->read, 0) != NGX_OK) { ngx_mail_close_connection(c); + return; } ngx_mail_send(c->write); diff --git a/src/mail/ngx_mail_pop3_handler.c b/src/mail/ngx_mail_pop3_handler.c index 226e7419b..64835282c 100644 --- a/src/mail/ngx_mail_pop3_handler.c +++ b/src/mail/ngx_mail_pop3_handler.c @@ -69,6 +69,7 @@ ngx_mail_pop3_init_session(ngx_mail_session_t *s, ngx_connection_t *c) if (ngx_handle_read_event(c->read, 0) != NGX_OK) { ngx_mail_close_connection(c); + return; } ngx_mail_send(c->write); diff --git a/src/mail/ngx_mail_proxy_module.c b/src/mail/ngx_mail_proxy_module.c index 84a7f61a4..aa3baeb7e 100644 --- a/src/mail/ngx_mail_proxy_module.c +++ b/src/mail/ngx_mail_proxy_module.c @@ -894,6 +894,7 @@ ngx_mail_proxy_write_handler(ngx_event_t *wev) if (ngx_handle_write_event(wev, 0) != NGX_OK) { ngx_mail_proxy_internal_server_error(s); + return; } if (c->read->ready) { diff --git a/src/mail/ngx_mail_smtp_handler.c b/src/mail/ngx_mail_smtp_handler.c index 97bbd7063..8158c4fa1 100644 --- a/src/mail/ngx_mail_smtp_handler.c +++ b/src/mail/ngx_mail_smtp_handler.c @@ -340,6 +340,7 @@ ngx_mail_smtp_greeting(ngx_mail_session_t *s, ngx_connection_t *c) if (ngx_handle_read_event(c->read, 0) != NGX_OK) { ngx_mail_close_connection(c); + return; } if (c->read->ready) {