aboutsummaryrefslogtreecommitdiff
path: root/nginx/ngx_http_js_module.c
diff options
context:
space:
mode:
authorDmitry Volyntsev <xeioex@nginx.com>2024-04-08 22:47:28 -0700
committerDmitry Volyntsev <xeioex@nginx.com>2024-04-08 22:47:28 -0700
commit8d578cfbc8796740c565179f1ac4dc806b3e37b2 (patch)
tree5105719cd2fa257b123328408292e7a79f27ad40 /nginx/ngx_http_js_module.c
parent35ee442e9666cc8729839ee6f4cc064a29c8282c (diff)
downloadnjs-8d578cfbc8796740c565179f1ac4dc806b3e37b2.tar.gz
njs-8d578cfbc8796740c565179f1ac4dc806b3e37b2.zip
HTTP: fixed r.send() with Buffer argument.
Previously, only string value type was accepted. This closes #701 issue on Github.
Diffstat (limited to 'nginx/ngx_http_js_module.c')
-rw-r--r--nginx/ngx_http_js_module.c59
1 files changed, 22 insertions, 37 deletions
diff --git a/nginx/ngx_http_js_module.c b/nginx/ngx_http_js_module.c
index 21bcc26a..ef494d48 100644
--- a/nginx/ngx_http_js_module.c
+++ b/nginx/ngx_http_js_module.c
@@ -2199,10 +2199,8 @@ static njs_int_t
ngx_http_js_ext_send(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
njs_index_t unused, njs_value_t *retval)
{
- njs_int_t ret;
njs_str_t s;
ngx_buf_t *b;
- uintptr_t next;
ngx_uint_t n;
ngx_chain_t *out, *cl, **ll;
ngx_http_js_ctx_t *ctx;
@@ -2226,47 +2224,34 @@ ngx_http_js_ext_send(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
ll = &out;
for (n = 1; n < nargs; n++) {
- next = 0;
-
- for ( ;; ) {
- ret = njs_vm_value_string_copy(vm, &s, njs_argument(args, n),
- &next);
-
- if (ret == NJS_DECLINED) {
- break;
- }
-
- if (ret == NJS_ERROR) {
- return NJS_ERROR;
- }
-
- if (s.length == 0) {
- continue;
- }
+ if (ngx_js_string(vm, njs_argument(args, n), &s) != NGX_OK) {
+ return NJS_ERROR;
+ }
- /* TODO: njs_value_release(vm, value) in buf completion */
+ if (s.length == 0) {
+ continue;
+ }
- b = ngx_calloc_buf(r->pool);
- if (b == NULL) {
- return NJS_ERROR;
- }
+ b = ngx_calloc_buf(r->pool);
+ if (b == NULL) {
+ return NJS_ERROR;
+ }
- b->start = s.start;
- b->pos = b->start;
- b->end = s.start + s.length;
- b->last = b->end;
- b->memory = 1;
+ b->start = s.start;
+ b->pos = b->start;
+ b->end = s.start + s.length;
+ b->last = b->end;
+ b->memory = 1;
- cl = ngx_alloc_chain_link(r->pool);
- if (cl == NULL) {
- return NJS_ERROR;
- }
+ cl = ngx_alloc_chain_link(r->pool);
+ if (cl == NULL) {
+ return NJS_ERROR;
+ }
- cl->buf = b;
+ cl->buf = b;
- *ll = cl;
- ll = &cl->next;
- }
+ *ll = cl;
+ ll = &cl->next;
}
*ll = NULL;