summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlejandro Colomar <alx@kernel.org>2024-01-24 14:56:48 +0100
committerAlejandro Colomar <alx@kernel.org>2024-01-30 11:14:33 +0100
commit3830e1f6a26a7e7174e92266c1c0e181e25e2242 (patch)
tree4a88fc8f9913afcb2f8d39f14220b6acd7afdf20
parent59e9a168e07475ce51d8b030847d2bdc2028686f (diff)
Tstr: Unconditionally append a hidden NULstrz2
Allocating one more byte shouldn't be a significant problem of memory use. On the other hand, this reduces a few branches, simplifying code. Also, all callers can rely on these strings being terminated, without having to rely on a flag that may be set very far away. Cc: Andrew Clayton <a.clayton@nginx.com> Cc: Zhidao Hong <z.hong@f5.com> Cc: Andrei Zeliankou <zelenkov@nginx.com> Cc: "Valentin V. Bartenev" <vbartenev@gmail.com> Cc: Dan Callahan <d.callahan@f5.com> Signed-off-by: Alejandro Colomar <alx@kernel.org>
-rw-r--r--src/nxt_http_static.c5
-rw-r--r--src/nxt_js.c18
-rw-r--r--src/nxt_js.h2
-rw-r--r--src/nxt_tstr.c22
-rw-r--r--src/nxt_tstr.h1
-rw-r--r--src/nxt_var.c8
6 files changed, 15 insertions, 41 deletions
diff --git a/src/nxt_http_static.c b/src/nxt_http_static.c
index 50e3c6c7..b123547f 100644
--- a/src/nxt_http_static.c
+++ b/src/nxt_http_static.c
@@ -105,7 +105,7 @@ nxt_http_static_init(nxt_task_t *task, nxt_router_temp_conf_t *tmcf,
cv = nxt_conf_get_array_element_or_itself(acf->share, i);
nxt_conf_get_string(cv, &str);
- tstr = nxt_tstr_compile(rtcf->tstr_state, &str, NXT_TSTR_STRZ);
+ tstr = nxt_tstr_compile(rtcf->tstr_state, &str, 0);
if (nxt_slow_path(tstr == NULL)) {
return NXT_ERROR;
}
@@ -131,8 +131,7 @@ nxt_http_static_init(nxt_task_t *task, nxt_router_temp_conf_t *tmcf,
nxt_str_t chr, shr;
nxt_bool_t is_const;
- conf->chroot = nxt_tstr_compile(rtcf->tstr_state, &acf->chroot,
- NXT_TSTR_STRZ);
+ conf->chroot = nxt_tstr_compile(rtcf->tstr_state, &acf->chroot, 0);
if (nxt_slow_path(conf->chroot == NULL)) {
return NXT_ERROR;
}
diff --git a/src/nxt_js.c b/src/nxt_js.c
index 74663660..a945264b 100644
--- a/src/nxt_js.c
+++ b/src/nxt_js.c
@@ -232,7 +232,7 @@ nxt_js_add_module(nxt_js_conf_t *jcf, nxt_str_t *name, nxt_str_t *text)
nxt_js_t *
-nxt_js_add_tpl(nxt_js_conf_t *jcf, nxt_str_t *str, nxt_bool_t strz)
+nxt_js_add_tpl(nxt_js_conf_t *jcf, nxt_str_t *str)
{
size_t size;
u_char *p, *start;
@@ -243,16 +243,9 @@ nxt_js_add_tpl(nxt_js_conf_t *jcf, nxt_str_t *str, nxt_bool_t strz)
"args, headers, cookies) {"
" return ");
- /*
- * Appending a terminating null character if strz is true.
- */
static nxt_str_t strz_str = nxt_string(" + '\\x00'");
- size = func_str.length + str->length + 1;
-
- if (strz) {
- size += strz_str.length;
- }
+ size = func_str.length + str->length + 1 + strz_str.length;
start = nxt_mp_nget(jcf->pool, size);
if (nxt_slow_path(start == NULL)) {
@@ -263,10 +256,7 @@ nxt_js_add_tpl(nxt_js_conf_t *jcf, nxt_str_t *str, nxt_bool_t strz)
p = nxt_cpymem(p, func_str.start, func_str.length);
p = nxt_cpymem(p, str->start, str->length);
-
- if (strz) {
- p = nxt_cpymem(p, strz_str.start, strz_str.length);
- }
+ p = nxt_cpymem(p, strz_str.start, strz_str.length);
*p++ = '}';
@@ -474,7 +464,7 @@ nxt_js_call(nxt_task_t *task, nxt_js_conf_t *jcf, nxt_js_cache_t *cache,
ret = njs_vm_value_string(vm, &res, njs_value_arg(&retval));
- str->length = res.length;
+ str->length = res.length - 1;
str->start = res.start;
return NXT_OK;
diff --git a/src/nxt_js.h b/src/nxt_js.h
index 48f036b8..653b72b6 100644
--- a/src/nxt_js.h
+++ b/src/nxt_js.h
@@ -28,7 +28,7 @@ void nxt_js_conf_release(nxt_js_conf_t *jcf);
void nxt_js_set_proto(nxt_js_conf_t *jcf, njs_external_t *proto, nxt_uint_t n);
nxt_int_t nxt_js_add_module(nxt_js_conf_t *jcf, nxt_str_t *name,
nxt_str_t *text);
-nxt_js_t *nxt_js_add_tpl(nxt_js_conf_t *jcf, nxt_str_t *str, nxt_bool_t strz);
+nxt_js_t *nxt_js_add_tpl(nxt_js_conf_t *jcf, nxt_str_t *str);
nxt_int_t nxt_js_compile(nxt_js_conf_t *jcf);
nxt_int_t nxt_js_test(nxt_js_conf_t *jcf, nxt_str_t *str, u_char *error);
nxt_int_t nxt_js_call(nxt_task_t *task, nxt_js_conf_t *jcf,
diff --git a/src/nxt_tstr.c b/src/nxt_tstr.c
index edf6860a..568b9589 100644
--- a/src/nxt_tstr.c
+++ b/src/nxt_tstr.c
@@ -86,27 +86,21 @@ nxt_tstr_compile(nxt_tstr_state_t *state, nxt_str_t *str,
{
u_char *p;
nxt_tstr_t *tstr;
- nxt_bool_t strz;
-
- strz = (flags & NXT_TSTR_STRZ) != 0;
tstr = nxt_mp_get(state->pool, sizeof(nxt_tstr_t));
if (nxt_slow_path(tstr == NULL)) {
return NULL;
}
- tstr->str.length = str->length + strz;
+ tstr->str.length = str->length;
- tstr->str.start = nxt_mp_nget(state->pool, tstr->str.length);
+ tstr->str.start = nxt_mp_nget(state->pool, tstr->str.length + 1);
if (nxt_slow_path(tstr->str.start == NULL)) {
return NULL;
}
p = nxt_cpymem(tstr->str.start, str->start, str->length);
-
- if (strz) {
- *p = '\0';
- }
+ *p = '\0';
tstr->flags = flags;
@@ -120,7 +114,7 @@ nxt_tstr_compile(nxt_tstr_state_t *state, nxt_str_t *str,
nxt_tstr_str(tstr, &tpl);
- tstr->u.js = nxt_js_add_tpl(state->jcf, &tpl, strz);
+ tstr->u.js = nxt_js_add_tpl(state->jcf, &tpl);
if (nxt_slow_path(tstr->u.js == NULL)) {
return NULL;
}
@@ -213,10 +207,6 @@ void
nxt_tstr_str(nxt_tstr_t *tstr, nxt_str_t *str)
{
*str = tstr->str;
-
- if (tstr->flags & NXT_TSTR_STRZ) {
- str->length--;
- }
}
@@ -283,10 +273,6 @@ nxt_tstr_query(nxt_task_t *task, nxt_tstr_query_t *query, nxt_tstr_t *tstr,
#endif
}
- if (tstr->flags & NXT_TSTR_STRZ) {
- val->length--;
- }
-
#if (NXT_DEBUG)
nxt_str_t str;
diff --git a/src/nxt_tstr.h b/src/nxt_tstr.h
index 3e842f81..d8f45417 100644
--- a/src/nxt_tstr.h
+++ b/src/nxt_tstr.h
@@ -32,7 +32,6 @@ typedef struct {
typedef enum {
- NXT_TSTR_STRZ = 1 << 0,
NXT_TSTR_LOGGING = 1 << 1,
} nxt_tstr_flags_t;
diff --git a/src/nxt_var.c b/src/nxt_var.c
index 729de788..fb70b5aa 100644
--- a/src/nxt_var.c
+++ b/src/nxt_var.c
@@ -322,7 +322,7 @@ nxt_var_compile(nxt_tstr_state_t *state, nxt_str_t *str)
n = 0;
p = str->start;
- end = p + str->length;
+ end = p + str->length + 1;
while (p < end) {
p = nxt_var_next_part(p, end, &part);
@@ -335,20 +335,20 @@ nxt_var_compile(nxt_tstr_state_t *state, nxt_str_t *str)
}
}
- size = sizeof(nxt_var_t) + n * sizeof(nxt_var_sub_t) + str->length;
+ size = sizeof(nxt_var_t) + n * sizeof(nxt_var_sub_t) + str->length + 1;
var = nxt_mp_get(state->pool, size);
if (nxt_slow_path(var == NULL)) {
return NULL;
}
- var->length = str->length;
+ var->length = str->length + 1;
var->vars = n;
subs = nxt_var_subs(var);
src = nxt_var_raw_start(var);
- nxt_memcpy(src, str->start, str->length);
+ nxt_memcpy(src, str->start, str->length + 1);
n = 0;
p = str->start;