diff --git usr.sbin/httpd/server_file.c usr.sbin/httpd/server_file.c index cdcc11cd800..920847e1201 100644 --- usr.sbin/httpd/server_file.c +++ usr.sbin/httpd/server_file.c @@ -188,26 +188,32 @@ server_file_access(struct httpd *env, struct client *clt, return (500); } - if ((gzfd = open(gzpath, O_RDONLY)) != -1) { - /* .gz must be a file, and not older */ - if (fstat(gzfd, &gzst) != -1 && - S_ISREG(gzst.st_mode) && - timespeccmp(&gzst.st_mtim, &st.st_mtim, - >=)) { - kv_add(&resp->http_headers, - "Content-Encoding", "gzip"); + + gzfd = open(gzpath, O_RDONLY); + if (gzfd == -1) + goto done; + + /* .gz must be a file, and not older */ + if (fstat(gzfd, &gzst) != -1 && + S_ISREG(gzst.st_mode) && + timespeccmp(&gzst.st_mtim, &st.st_mtim, + >=)) { + if (kv_add(&resp->http_headers, + "Content-Encoding", "gzip") == NULL) { + close(gzfd); + } else { /* Use original file timestamp */ gzst.st_mtim = st.st_mtim; st = gzst; close(fd); fd = gzfd; - } else { - close(gzfd); } + } else { + close(gzfd); } } } - +done: return (server_file_request(env, clt, media, fd, &st)); }