// in src/node_internals.h because of a circular dependency.
#if defined(NODE_WANT_INTERNALS)
v8::MaybeLocal<v8::Object> New(Environment* env, size_t size);
+// Makes a copy of |data|.
v8::MaybeLocal<v8::Object> New(Environment* env, const char* data, size_t len);
+// Takes ownership of |data|.
v8::MaybeLocal<v8::Object> New(Environment* env,
char* data,
size_t length,
FreeCallback callback,
void* hint);
+// Takes ownership of |data|. Must allocate |data| with malloc() or realloc()
+// because ArrayBufferAllocator::Free() deallocates it again with free().
+// Mixing operator new and free() is undefined behavior so don't do that.
v8::MaybeLocal<v8::Object> Use(Environment* env, char* data, size_t length);
#endif // defined(NODE_WANT_INTERNALS)
return env->ThrowError("Failed to compute ECDH key");
}
- Local<Object> buf = Buffer::New(env, out, out_len).ToLocalChecked();
+ Local<Object> buf = Buffer::Use(env, out, out_len).ToLocalChecked();
args.GetReturnValue().Set(buf);
}
}
Local<Object> buf =
- Buffer::New(env, reinterpret_cast<char*>(out), size).ToLocalChecked();
+ Buffer::Use(env, reinterpret_cast<char*>(out), size).ToLocalChecked();
args.GetReturnValue().Set(buf);
}
size_t size;
req->return_memory(&data, &size);
argv[0] = Null(req->env()->isolate());
- argv[1] = Buffer::New(req->env(), data, size).ToLocalChecked();
+ argv[1] = Buffer::Use(req->env(), data, size).ToLocalChecked();
}
}
CHECK_EQ(pending, UV_UNKNOWN_HANDLE);
}
- Local<Object> obj = Buffer::New(env, base, nread).ToLocalChecked();
+ Local<Object> obj = Buffer::Use(env, base, nread).ToLocalChecked();
wrap->EmitData(nread, obj, pending_obj);
}
}
char* base = static_cast<char*>(realloc(buf->base, nread));
- argv[2] = Buffer::New(env, base, nread).ToLocalChecked();
+ argv[2] = Buffer::Use(env, base, nread).ToLocalChecked();
argv[3] = AddressToJS(env, addr);
wrap->MakeCallback(env->onmessage_string(), ARRAY_SIZE(argv), argv);
}