Skip to content

Commit faa447b

Browse files
committed
src: allow ArrayBufferView as instance of Buffer
PR-URL: #12223 Reviewed-By: Matteo Collina <[email protected]> Reviewed-By: James M Snell <[email protected]> Reviewed-By: Anna Henningsen <[email protected]>
1 parent ec53921 commit faa447b

File tree

3 files changed

+15
-14
lines changed

3 files changed

+15
-14
lines changed

src/node_buffer.cc

+12-11
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ namespace Buffer {
7070

7171
using v8::ArrayBuffer;
7272
using v8::ArrayBufferCreationMode;
73+
using v8::ArrayBufferView;
7374
using v8::Context;
7475
using v8::EscapableHandleScope;
7576
using v8::FunctionCallbackInfo;
@@ -195,41 +196,41 @@ inline MUST_USE_RESULT bool ParseArrayIndex(Local<Value> arg,
195196
// Buffer methods
196197

197198
bool HasInstance(Local<Value> val) {
198-
return val->IsUint8Array();
199+
return val->IsArrayBufferView();
199200
}
200201

201202

202203
bool HasInstance(Local<Object> obj) {
203-
return obj->IsUint8Array();
204+
return obj->IsArrayBufferView();
204205
}
205206

206207

207208
char* Data(Local<Value> val) {
208-
CHECK(val->IsUint8Array());
209-
Local<Uint8Array> ui = val.As<Uint8Array>();
209+
CHECK(val->IsArrayBufferView());
210+
Local<ArrayBufferView> ui = val.As<ArrayBufferView>();
210211
ArrayBuffer::Contents ab_c = ui->Buffer()->GetContents();
211212
return static_cast<char*>(ab_c.Data()) + ui->ByteOffset();
212213
}
213214

214215

215216
char* Data(Local<Object> obj) {
216-
CHECK(obj->IsUint8Array());
217-
Local<Uint8Array> ui = obj.As<Uint8Array>();
217+
CHECK(obj->IsArrayBufferView());
218+
Local<ArrayBufferView> ui = obj.As<ArrayBufferView>();
218219
ArrayBuffer::Contents ab_c = ui->Buffer()->GetContents();
219220
return static_cast<char*>(ab_c.Data()) + ui->ByteOffset();
220221
}
221222

222223

223224
size_t Length(Local<Value> val) {
224-
CHECK(val->IsUint8Array());
225-
Local<Uint8Array> ui = val.As<Uint8Array>();
225+
CHECK(val->IsArrayBufferView());
226+
Local<ArrayBufferView> ui = val.As<ArrayBufferView>();
226227
return ui->ByteLength();
227228
}
228229

229230

230231
size_t Length(Local<Object> obj) {
231-
CHECK(obj->IsUint8Array());
232-
Local<Uint8Array> ui = obj.As<Uint8Array>();
232+
CHECK(obj->IsArrayBufferView());
233+
Local<ArrayBufferView> ui = obj.As<ArrayBufferView>();
233234
return ui->ByteLength();
234235
}
235236

@@ -800,7 +801,7 @@ void WriteFloatGeneric(const FunctionCallbackInfo<Value>& args) {
800801
THROW_AND_RETURN_UNLESS_BUFFER(env, args[0]);
801802
}
802803

803-
Local<Uint8Array> ts_obj = args[0].As<Uint8Array>();
804+
Local<ArrayBufferView> ts_obj = args[0].As<ArrayBufferView>();
804805
ArrayBuffer::Contents ts_obj_c = ts_obj->Buffer()->GetContents();
805806
const size_t ts_obj_offset = ts_obj->ByteOffset();
806807
const size_t ts_obj_length = ts_obj->ByteLength();

src/util.h

+2-2
Original file line numberDiff line numberDiff line change
@@ -439,8 +439,8 @@ class BufferValue : public MaybeStackBuffer<char> {
439439
} while (0)
440440

441441
#define SPREAD_BUFFER_ARG(val, name) \
442-
CHECK((val)->IsUint8Array()); \
443-
v8::Local<v8::Uint8Array> name = (val).As<v8::Uint8Array>(); \
442+
CHECK((val)->IsArrayBufferView()); \
443+
v8::Local<v8::ArrayBufferView> name = (val).As<v8::ArrayBufferView>(); \
444444
v8::ArrayBuffer::Contents name##_c = name->Buffer()->GetContents(); \
445445
const size_t name##_offset = name->ByteOffset(); \
446446
const size_t name##_length = name->ByteLength(); \

test/parallel/test-buffer-write-noassert.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ function write(funx, args, result, res) {
1818

1919
if (!/Int/.test(funx)) {
2020
assert.throws(
21-
() => Buffer.alloc(9)[funx].apply(new Uint32Array(1), args),
21+
() => Buffer.alloc(9)[funx].apply(new Map(), args),
2222
/^TypeError: argument should be a Buffer$/
2323
);
2424
}

0 commit comments

Comments
 (0)