]> git.kaiwu.me - nginx.git/commitdiff
Events: fixed null pointer dereference with resolver and poll.
authorRuslan Ermilov <ru@nginx.com>
Fri, 25 Jan 2013 09:59:28 +0000 (09:59 +0000)
committerRuslan Ermilov <ru@nginx.com>
Fri, 25 Jan 2013 09:59:28 +0000 (09:59 +0000)
A POLLERR signalled by poll() without POLLIN/POLLOUT, as seen on
Linux, would generate both read and write events, but there's no
write event handler for resolver events.  A fix is to only call
event handler of an active event.

src/event/modules/ngx_poll_module.c

index ed64bc51a2f1dce039db9568c2afd292c4cc0055..4d4521845a843b8b392d79a1138a878a99bf98e3 100644 (file)
@@ -371,7 +371,7 @@ ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
 
         found = 0;
 
-        if (revents & POLLIN) {
+        if ((revents & POLLIN) && c->read->active) {
             found = 1;
 
             ev = c->read;
@@ -388,7 +388,7 @@ ngx_poll_process_events(ngx_cycle_t *cycle, ngx_msec_t timer, ngx_uint_t flags)
             ngx_locked_post_event(ev, queue);
         }
 
-        if (revents & POLLOUT) {
+        if ((revents & POLLOUT) && c->write->active) {
             found = 1;
             ev = c->write;