]> git.kaiwu.me - nginx.git/commitdiff
Mail: fix session cleanup on error path
authorRoman Arutyunyan <arut@nginx.com>
Sat, 25 Apr 2026 12:41:36 +0000 (16:41 +0400)
committerRoman Arutyunyan <arutyunyan.roman@gmail.com>
Fri, 15 May 2026 12:25:01 +0000 (16:25 +0400)
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.

src/mail/ngx_mail_imap_handler.c
src/mail/ngx_mail_pop3_handler.c
src/mail/ngx_mail_proxy_module.c
src/mail/ngx_mail_smtp_handler.c

index 291e87a4deba134ba0faad127704200389ef1a53..dc8cbefabf788e75e544a254c8dfd44287886f01 100644 (file)
@@ -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);
index 226e7419bd45bfb272a59a598390185d26743404..64835282c829a76c29c80b33753d7d7c8740452f 100644 (file)
@@ -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);
index 84a7f61a4aa6de4c57d79ad97500467b20ba7b21..aa3baeb7e3caa571abb7b60c7d48adffdcb9e5a3 100644 (file)
@@ -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) {
index 97bbd70631a4baa089689666119adf15f15b2342..8158c4fa1f55680147d31605c397914adca2b909 100644 (file)
@@ -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) {