Skip to content

Commit 96882e1

Browse files
bnoordhuisevanlucas
authored andcommitted
src: fix handle leak in Buffer::New()
Fix handle leaks in Buffer::New() and Buffer::Copy() by creating the handle scope before looking up the env with Environment::GetCurrent(). Environment::GetCurrent() calls v8::Isolate::GetCurrentContext(), which creates a handle in the current scope, i.e., the scope created by the caller of Buffer::New() or Buffer::Copy(). PR-URL: #7711 Reviewed-By: Anna Henningsen <[email protected]> Reviewed-By: Colin Ihrig <[email protected]> Reviewed-By: Trevor Norris <[email protected]>
1 parent 9847f84 commit 96882e1

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

src/node_buffer.cc

+3-3
Original file line numberDiff line numberDiff line change
@@ -320,8 +320,8 @@ MaybeLocal<Object> New(Environment* env, size_t length) {
320320

321321

322322
MaybeLocal<Object> Copy(Isolate* isolate, const char* data, size_t length) {
323+
EscapableHandleScope handle_scope(isolate);
323324
Environment* env = Environment::GetCurrent(isolate);
324-
EscapableHandleScope handle_scope(env->isolate());
325325
Local<Object> obj;
326326
if (Buffer::Copy(env, data, length).ToLocal(&obj))
327327
return handle_scope.Escape(obj);
@@ -370,8 +370,8 @@ MaybeLocal<Object> New(Isolate* isolate,
370370
size_t length,
371371
FreeCallback callback,
372372
void* hint) {
373+
EscapableHandleScope handle_scope(isolate);
373374
Environment* env = Environment::GetCurrent(isolate);
374-
EscapableHandleScope handle_scope(env->isolate());
375375
Local<Object> obj;
376376
if (Buffer::New(env, data, length, callback, hint).ToLocal(&obj))
377377
return handle_scope.Escape(obj);
@@ -409,8 +409,8 @@ MaybeLocal<Object> New(Environment* env,
409409

410410

411411
MaybeLocal<Object> New(Isolate* isolate, char* data, size_t length) {
412+
EscapableHandleScope handle_scope(isolate);
412413
Environment* env = Environment::GetCurrent(isolate);
413-
EscapableHandleScope handle_scope(env->isolate());
414414
Local<Object> obj;
415415
if (Buffer::New(env, data, length).ToLocal(&obj))
416416
return handle_scope.Escape(obj);

0 commit comments

Comments
 (0)