src/http/ngx_http_file_cache.c:1530: error: Integer Overflow L2
  ([0, +oo] - 1):unsigned32 by call to `ngx_http_file_cache_free`.

src/http/ngx_http_file_cache.c:1526:9: Call
1524. 
1525.     if (c->updating) {
1526.         ngx_log_error(NGX_LOG_ALERT, c->file.log, 0,
              ^
1527.                       "stalled cache updating, error:%ui", c->error);
1528.     }

src/core/ngx_log.c:78:1: Parameter `log->file->fd`
  76. #if (NGX_HAVE_VARIADIC_MACROS)
  77. 
  78. void
      ^
  79. ngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,
  80.     const char *fmt, ...)

src/http/ngx_http_file_cache.c:1530:5: Call
1528.     }
1529. 
1530.     ngx_http_file_cache_free(c, NULL);
          ^
1531. }
1532. 

src/http/ngx_http_file_cache.c:1449:1: <LHS trace>
1447. 
1448. 
1449. void
      ^
1450. ngx_http_file_cache_free(ngx_http_cache_t *c, ngx_temp_file_t *tf)
1451. {

src/http/ngx_http_file_cache.c:1449:1: Parameter `c->node->count`
  1447. 
  1448. 
  1449. void
        ^
  1450. ngx_http_file_cache_free(ngx_http_cache_t *c, ngx_temp_file_t *tf)
  1451. {

src/http/ngx_http_file_cache.c:1467:5: Binary operation: ([0, +oo] - 1):unsigned32 by call to `ngx_http_file_cache_free` 
  1465. 
  1466.     fcn = c->node;
  1467.     fcn->count--;
            ^
  1468. 
  1469.     if (c->updating && fcn->lock_time == c->lock_time) {

void
ngx_http_file_cache_free(ngx_http_cache_t *c, ngx_temp_file_t *tf)
{
    ngx_http_file_cache_t       *cache;
    ngx_http_file_cache_node_t  *fcn;
    if (c->updated || c->node == NULL) {
        return;
    }
    cache = c->file_cache;
    ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->file.log, 0,
                   "http file cache free, fd: %d", c->file.fd);
    ngx_shmtx_lock(&cache->shpool->mutex);
    fcn = c->node;
    fcn->count--;
    if (c->updating && fcn->lock_time == c->lock_time) {
        fcn->updating = 0;
    }
    if (c->error) {
        fcn->error = c->error;
        if (c->valid_sec) {
            fcn->valid_sec = c->valid_sec;
            fcn->valid_msec = c->valid_msec;
        }
    } else if (!fcn->exists && fcn->count == 0 && c->min_uses == 1) {
        ngx_queue_remove(&fcn->queue);
        ngx_rbtree_delete(&cache->sh->rbtree, &fcn->node);
        ngx_slab_free_locked(cache->shpool, fcn);
        c->node = NULL;
    }
    ngx_shmtx_unlock(&cache->shpool->mutex);
    c->updated = 1;
    c->updating = 0;
    if (c->temp_file) {
        if (tf && tf->file.fd != NGX_INVALID_FILE) {
            ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->file.log, 0,
                           "http file cache incomplete: \"%s\"",
                           tf->file.name.data);
            if (ngx_delete_file(tf->file.name.data) == NGX_FILE_ERROR) {
                ngx_log_error(NGX_LOG_CRIT, c->file.log, ngx_errno,
                              ngx_delete_file_n " \"%s\" failed",
                              tf->file.name.data);
            }
        }
    }
    if (c->wait_event.timer_set) {
        ngx_del_timer(&c->wait_event);
    }
}
['static void\nngx_http_file_cache_cleanup(void *data)\n{\n    ngx_http_cache_t  *c = data;\n    if (c->updated) {\n        return;\n    }\n    ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->file.log, 0,\n                   "http file cache cleanup");\n    if (c->updating) {\n        ngx_log_error(NGX_LOG_ALERT, c->file.log, 0,\n                      "stalled cache updating, error:%ui", c->error);\n    }\n    ngx_http_file_cache_free(c, NULL);\n}', 'void\nngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,\n    const char *fmt, ...)\n#else\nvoid\nngx_log_error_core(ngx_uint_t level, ngx_log_t *log, ngx_err_t err,\n    const char *fmt, va_list args)\n#endif\n{\n#if (NGX_HAVE_VARIADIC_MACROS)\n    va_list      args;\n#endif\n    u_char      *p, *last, *msg;\n    u_char       errstr[NGX_MAX_ERROR_STR];\n    ngx_uint_t   wrote_stderr, debug_connection;\n    last = errstr + NGX_MAX_ERROR_STR;\n    ngx_memcpy(errstr, ngx_cached_err_log_time.data,\n               ngx_cached_err_log_time.len);\n    p = errstr + ngx_cached_err_log_time.len;\n    p = ngx_slprintf(p, last, " [%V] ", &err_levels[level]);\n    p = ngx_slprintf(p, last, "%P#" NGX_TID_T_FMT ": ",\n                    ngx_log_pid, ngx_log_tid);\n    if (log->connection) {\n        p = ngx_slprintf(p, last, "*%uA ", log->connection);\n    }\n    msg = p;\n#if (NGX_HAVE_VARIADIC_MACROS)\n    va_start(args, fmt);\n    p = ngx_vslprintf(p, last, fmt, args);\n    va_end(args);\n#else\n    p = ngx_vslprintf(p, last, fmt, args);\n#endif\n    if (err) {\n        p = ngx_log_errno(p, last, err);\n    }\n    if (level != NGX_LOG_DEBUG && log->handler) {\n        p = log->handler(log, p, last - p);\n    }\n    if (p > last - NGX_LINEFEED_SIZE) {\n        p = last - NGX_LINEFEED_SIZE;\n    }\n    ngx_linefeed(p);\n    wrote_stderr = 0;\n    debug_connection = (log->log_level & NGX_LOG_DEBUG_CONNECTION) != 0;\n    while (log) {\n        if (log->log_level < level && !debug_connection) {\n            break;\n        }\n        if (log->writer) {\n            log->writer(log, level, errstr, p - errstr);\n            log = log->next;\n            continue;\n        }\n        (void) ngx_write_fd(log->file->fd, errstr, p - errstr);\n        if (log->file->fd == ngx_stderr) {\n            wrote_stderr = 1;\n        }\n        log = log->next;\n    }\n    if (!ngx_use_stderr\n        || level > NGX_LOG_WARN\n        || wrote_stderr)\n    {\n        return;\n    }\n    msg -= (7 + err_levels[level].len + 3);\n    (void) ngx_sprintf(msg, "nginx: [%V] ", &err_levels[level]);\n    (void) ngx_write_console(ngx_stderr, msg, p - msg);\n}', 'void\nngx_http_file_cache_free(ngx_http_cache_t *c, ngx_temp_file_t *tf)\n{\n    ngx_http_file_cache_t       *cache;\n    ngx_http_file_cache_node_t  *fcn;\n    if (c->updated || c->node == NULL) {\n        return;\n    }\n    cache = c->file_cache;\n    ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->file.log, 0,\n                   "http file cache free, fd: %d", c->file.fd);\n    ngx_shmtx_lock(&cache->shpool->mutex);\n    fcn = c->node;\n    fcn->count--;\n    if (c->updating && fcn->lock_time == c->lock_time) {\n        fcn->updating = 0;\n    }\n    if (c->error) {\n        fcn->error = c->error;\n        if (c->valid_sec) {\n            fcn->valid_sec = c->valid_sec;\n            fcn->valid_msec = c->valid_msec;\n        }\n    } else if (!fcn->exists && fcn->count == 0 && c->min_uses == 1) {\n        ngx_queue_remove(&fcn->queue);\n        ngx_rbtree_delete(&cache->sh->rbtree, &fcn->node);\n        ngx_slab_free_locked(cache->shpool, fcn);\n        c->node = NULL;\n    }\n    ngx_shmtx_unlock(&cache->shpool->mutex);\n    c->updated = 1;\n    c->updating = 0;\n    if (c->temp_file) {\n        if (tf && tf->file.fd != NGX_INVALID_FILE) {\n            ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->file.log, 0,\n                           "http file cache incomplete: \\"%s\\"",\n                           tf->file.name.data);\n            if (ngx_delete_file(tf->file.name.data) == NGX_FILE_ERROR) {\n                ngx_log_error(NGX_LOG_CRIT, c->file.log, ngx_errno,\n                              ngx_delete_file_n " \\"%s\\" failed",\n                              tf->file.name.data);\n            }\n        }\n    }\n    if (c->wait_event.timer_set) {\n        ngx_del_timer(&c->wait_event);\n    }\n}']