From 64577463dfbc7ebe646c6c5a06e4b309b2757205 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Fri, 7 Aug 2015 23:03:00 +0200 Subject: src: plug memory leaks In a few places dynamic memory was passed to the Buffer::New() overload that makes a copy of the input, not the one that takes ownership. This commit is a band-aid to fix the memory leaks. Longer term, we should look into using C++11 move semantics more effectively. Fixes: https://github.com/nodejs/node/issues/2308 PR-URL: https://github.com/nodejs/node/pull/2352 Reviewed-By: Fedor Indutny Reviewed-By: Trevor Norris --- src/node_buffer.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/node_buffer.h') diff --git a/src/node_buffer.h b/src/node_buffer.h index 5b935b8c063..f7c88f60e03 100644 --- a/src/node_buffer.h +++ b/src/node_buffer.h @@ -67,12 +67,17 @@ static inline bool IsWithinBounds(size_t off, size_t len, size_t max) { // in src/node_internals.h because of a circular dependency. #if defined(NODE_WANT_INTERNALS) v8::MaybeLocal New(Environment* env, size_t size); +// Makes a copy of |data|. v8::MaybeLocal New(Environment* env, const char* data, size_t len); +// Takes ownership of |data|. v8::MaybeLocal 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 Use(Environment* env, char* data, size_t length); #endif // defined(NODE_WANT_INTERNALS) -- cgit v1.2.3