From 7c1caf6b2f6c6a5870d86c9b1ec7704585b4276b Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Tue, 13 Jul 2021 15:22:24 +0000 Subject: [PATCH] Added support for ArrayBuffer in njs_vm_value_to_bytes(). --- src/njs_vm.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/njs_vm.c b/src/njs_vm.c index f1c8b211..4ccc5771 100644 --- a/src/njs_vm.c +++ b/src/njs_vm.c @@ -1131,7 +1131,7 @@ njs_int_t njs_vm_value_to_bytes(njs_vm_t *vm, njs_str_t *dst, njs_value_t *src) { u_char *start; - size_t size; + size_t size, length, offset; njs_int_t ret; njs_value_t value; njs_typed_array_t *array; @@ -1147,15 +1147,27 @@ njs_vm_value_to_bytes(njs_vm_t *vm, njs_str_t *dst, njs_value_t *src) switch (value.type) { case NJS_TYPED_ARRAY: case NJS_DATA_VIEW: - array = njs_typed_array(&value); - buffer = njs_typed_array_buffer(array); + case NJS_ARRAY_BUFFER: + + if (value.type != NJS_ARRAY_BUFFER) { + array = njs_typed_array(&value); + buffer = njs_typed_array_buffer(array); + offset = array->offset; + length = array->byte_length; + + } else { + buffer = njs_array_buffer(&value); + offset = 0; + length = buffer->size; + } + if (njs_slow_path(njs_is_detached_buffer(buffer))) { njs_type_error(vm, "detached buffer"); return NJS_ERROR; } - dst->start = &buffer->u.u8[array->offset]; - dst->length = array->byte_length; + dst->start = &buffer->u.u8[offset]; + dst->length = length; break; default: -- 2.47.3