src/os/unix/ngx_readv_chain.c:96: error: Null Dereference
  pointer `iov` last assigned on line 71 could be null and is dereferenced at line 96, column 13.

src/os/unix/ngx_readv_chain.c:13:1: start of procedure ngx_readv_chain()
11. 
12. 
13. ssize_t
    ^
14. ngx_readv_chain(ngx_connection_t *c, ngx_chain_t *chain, off_t limit)
15. {

src/os/unix/ngx_readv_chain.c:23:5: 
21.     struct iovec  *iov, iovs[NGX_IOVS_PREALLOCATE];
22. 
23.     rev = c->read;
        ^
24. 
25. #if (NGX_HAVE_KQUEUE)

src/os/unix/ngx_readv_chain.c:58:9: Taking true branch
56. #if (NGX_HAVE_EPOLLRDHUP)
57. 
58.     if (ngx_event_flags & NGX_USE_EPOLL_EVENT) {
            ^
59.         ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
60.                        "readv: eof:%d, avail:%d",

src/os/unix/ngx_readv_chain.c:63:14: Taking false branch
61.                        rev->pending_eof, rev->available);
62. 
63.         if (!rev->available && !rev->pending_eof) {
                 ^
64.             return NGX_AGAIN;
65.         }

src/os/unix/ngx_readv_chain.c:70:5: 
68. #endif
69. 
70.     prev = NULL;
        ^
71.     iov = NULL;
72.     size = 0;

src/os/unix/ngx_readv_chain.c:71:5: 
69. 
70.     prev = NULL;
71.     iov = NULL;
        ^
72.     size = 0;
73. 

src/os/unix/ngx_readv_chain.c:72:5: 
70.     prev = NULL;
71.     iov = NULL;
72.     size = 0;
        ^
73. 
74.     vec.elts = iovs;

src/os/unix/ngx_readv_chain.c:74:5: 
72.     size = 0;
73. 
74.     vec.elts = iovs;
        ^
75.     vec.nelts = 0;
76.     vec.size = sizeof(struct iovec);

src/os/unix/ngx_readv_chain.c:75:5: 
73. 
74.     vec.elts = iovs;
75.     vec.nelts = 0;
        ^
76.     vec.size = sizeof(struct iovec);
77.     vec.nalloc = NGX_IOVS_PREALLOCATE;

src/os/unix/ngx_readv_chain.c:76:5: 
74.     vec.elts = iovs;
75.     vec.nelts = 0;
76.     vec.size = sizeof(struct iovec);
        ^
77.     vec.nalloc = NGX_IOVS_PREALLOCATE;
78.     vec.pool = c->pool;

src/os/unix/ngx_readv_chain.c:77:5: 
75.     vec.nelts = 0;
76.     vec.size = sizeof(struct iovec);
77.     vec.nalloc = NGX_IOVS_PREALLOCATE;
        ^
78.     vec.pool = c->pool;
79. 

src/os/unix/ngx_readv_chain.c:78:5: 
76.     vec.size = sizeof(struct iovec);
77.     vec.nalloc = NGX_IOVS_PREALLOCATE;
78.     vec.pool = c->pool;
        ^
79. 
80.     /* coalesce the neighbouring bufs */

src/os/unix/ngx_readv_chain.c:82:12: Loop condition is true. Entering loop body
80.     /* coalesce the neighbouring bufs */
81. 
82.     while (chain) {
               ^
83.         n = chain->buf->end - chain->buf->last;
84. 

src/os/unix/ngx_readv_chain.c:83:9: 
81. 
82.     while (chain) {
83.         n = chain->buf->end - chain->buf->last;
            ^
84. 
85.         if (limit) {

src/os/unix/ngx_readv_chain.c:85:13: Taking true branch
83.         n = chain->buf->end - chain->buf->last;
84. 
85.         if (limit) {
                ^
86.             if (size >= limit) {
87.                 break;

src/os/unix/ngx_readv_chain.c:86:17: Taking false branch
84. 
85.         if (limit) {
86.             if (size >= limit) {
                    ^
87.                 break;
88.             }

src/os/unix/ngx_readv_chain.c:90:17: Taking false branch
88.             }
89. 
90.             if (size + n > limit) {
                    ^
91.                 n = (ssize_t) (limit - size);
92.             }

src/os/unix/ngx_readv_chain.c:95:13: Taking true branch
93.         }
94. 
95.         if (prev == chain->buf->last) {
                ^
96.             iov->iov_len += n;
97. 

src/os/unix/ngx_readv_chain.c:96:13: 
94. 
95.         if (prev == chain->buf->last) {
96.             iov->iov_len += n;
                ^
97. 
98.         } else {
