summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorDave McAllister <davemc@gmail.com>2025-08-20 09:52:15 -0700
committerDave McAllister <davemc@gmail.com>2025-08-20 09:52:15 -0700
commitc8cc9247370a1d57e4f4ba4dbaaa232e81363f56 (patch)
treeee9054cb9e8b8d986c16310b7bfc07dc531307ad /src
parent32c91a67a488ff5d46357f89578a6721ba2c8ac2 (diff)
parent1701935ea4a55f3ce4b5da5db866fc1b11558e0c (diff)
downloadunit-c8cc9247370a1d57e4f4ba4dbaaa232e81363f56.tar.gz
unit-c8cc9247370a1d57e4f4ba4dbaaa232e81363f56.tar.bz2
Merge branch 'master' of https://github.com/nginx/unit
Diffstat (limited to 'src')
-rw-r--r--src/nxt_http_compression.c26
-rw-r--r--src/nxt_http_compression.h4
-rw-r--r--src/nxt_http_static.c2
-rw-r--r--src/nxt_main_process.c3
4 files changed, 22 insertions, 13 deletions
diff --git a/src/nxt_http_compression.c b/src/nxt_http_compression.c
index 28e53a9d..f9a94d05 100644
--- a/src/nxt_http_compression.c
+++ b/src/nxt_http_compression.c
@@ -232,14 +232,12 @@ nxt_http_comp_compress_app_response(nxt_task_t *task, nxt_http_request_t *r,
nxt_int_t
-nxt_http_comp_compress_static_response(nxt_task_t *task, nxt_file_t **f,
- nxt_file_info_t *fi,
- size_t static_buf_len,
- size_t *out_total)
+nxt_http_comp_compress_static_response(nxt_task_t *task, nxt_http_request_t *r,
+ nxt_file_t **f, nxt_file_info_t *fi,
+ size_t static_buf_len, size_t *out_total)
{
- char tmp_path[NXT_MAX_PATH_LEN];
size_t in_size, out_size, rest;
- u_char *p;
+ char *tmp_path, *p;
uint8_t *in, *out;
nxt_int_t ret;
nxt_file_t tfile;
@@ -249,13 +247,14 @@ nxt_http_comp_compress_static_response(nxt_task_t *task, nxt_file_t **f,
*out_total = 0;
- if (nxt_slow_path(strlen(rt->tmp) + 1 + strlen(template) + 1
- > NXT_MAX_PATH_LEN))
- {
+ tmp_path = nxt_mp_nget(r->mem_pool,
+ strlen(rt->tmp) + 1 + strlen(template) + 1);
+ if (nxt_slow_path(tmp_path == NULL)) {
return NXT_ERROR;
}
- p = nxt_cpymem(tmp_path, rt->tmp, strlen(rt->tmp));
+ p = tmp_path;
+ p = nxt_cpymem(p, rt->tmp, strlen(rt->tmp));
*p++ = '/';
p = nxt_cpymem(p, template, strlen(template));
*p = '\0';
@@ -266,6 +265,7 @@ nxt_http_comp_compress_static_response(nxt_task_t *task, nxt_file_t **f,
return NXT_ERROR;
}
unlink(tmp_path);
+ tfile.name = (nxt_file_name_t *)tmp_path;
in_size = nxt_file_size(fi);
out_size = nxt_http_comp_bound(in_size);
@@ -305,6 +305,12 @@ nxt_http_comp_compress_static_response(nxt_task_t *task, nxt_file_t **f,
cbytes = nxt_http_comp_compress(out + *out_total, out_size - *out_total,
in + in_size - rest, n, last);
+ if (cbytes == -1) {
+ nxt_file_close(task, &tfile);
+ nxt_mem_munmap(in, in_size);
+ nxt_mem_munmap(out, out_size);
+ return NXT_ERROR;
+ }
*out_total += cbytes;
rest -= n;
diff --git a/src/nxt_http_compression.h b/src/nxt_http_compression.h
index f178e984..99af8a66 100644
--- a/src/nxt_http_compression.h
+++ b/src/nxt_http_compression.h
@@ -93,8 +93,8 @@ extern const nxt_http_comp_operations_t nxt_http_comp_brotli_ops;
extern nxt_int_t nxt_http_comp_compress_app_response(nxt_task_t *task,
nxt_http_request_t *r, nxt_buf_t **b);
extern nxt_int_t nxt_http_comp_compress_static_response(nxt_task_t *task,
- nxt_file_t **f, nxt_file_info_t *fi, size_t static_buf_len,
- size_t *out_total);
+ nxt_http_request_t *r, nxt_file_t **f, nxt_file_info_t *fi,
+ size_t static_buf_len, size_t *out_total);
extern bool nxt_http_comp_wants_compression(void);
extern bool nxt_http_comp_compressor_is_valid(const nxt_str_t *token);
extern nxt_int_t nxt_http_comp_check_compression(nxt_task_t *task,
diff --git a/src/nxt_http_static.c b/src/nxt_http_static.c
index 78b1f150..8436b417 100644
--- a/src/nxt_http_static.c
+++ b/src/nxt_http_static.c
@@ -593,7 +593,7 @@ nxt_http_static_send(nxt_task_t *task, nxt_http_request_t *r,
nxt_int_t ret;
ret = nxt_http_comp_compress_static_response(
- task, &f, &fi,
+ task, r, &f, &fi,
NXT_HTTP_STATIC_BUF_SIZE,
&out_total);
if (ret == NXT_ERROR) {
diff --git a/src/nxt_main_process.c b/src/nxt_main_process.c
index e942c1a8..25798ea0 100644
--- a/src/nxt_main_process.c
+++ b/src/nxt_main_process.c
@@ -1730,5 +1730,8 @@ nxt_main_port_access_log_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg)
if (nxt_fast_path(port != NULL)) {
(void) nxt_port_socket_write(task, port, type, file.fd,
msg->port_msg.stream, 0, NULL);
+
+ } else {
+ nxt_file_close(task, &file);
}
}