diff options
author | Dmitry Volyntsev <xeioex@nginx.com> | 2024-04-08 22:47:28 -0700 |
---|---|---|
committer | Dmitry Volyntsev <xeioex@nginx.com> | 2024-04-08 22:47:28 -0700 |
commit | 8d578cfbc8796740c565179f1ac4dc806b3e37b2 (patch) | |
tree | 5105719cd2fa257b123328408292e7a79f27ad40 /nginx/ngx_http_js_module.c | |
parent | 35ee442e9666cc8729839ee6f4cc064a29c8282c (diff) | |
download | njs-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.c | 59 |
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; |