diff --git a/src/util-inl.h b/src/util-inl.h index 76c249a7c92b32..834771f5ee996d 100644 --- a/src/util-inl.h +++ b/src/util-inl.h @@ -234,11 +234,13 @@ void* Realloc(void* pointer, size_t size) { // As per spec realloc behaves like malloc if passed nullptr. void* Malloc(size_t size) { + if (size == 0) size = 1; return Realloc(nullptr, size); } void* Calloc(size_t n, size_t size) { - if ((n == 0) || (size == 0)) return nullptr; + if (n == 0) n = 1; + if (size == 0) size = 1; CHECK_GE(n * size, n); // Overflow guard. return calloc(n, size); } diff --git a/test/cctest/util.cc b/test/cctest/util.cc index 37133aca562b72..1f1584fa72124a 100644 --- a/test/cctest/util.cc +++ b/test/cctest/util.cc @@ -74,3 +74,17 @@ TEST(UtilTest, ToLower) { EXPECT_EQ('a', ToLower('a')); EXPECT_EQ('a', ToLower('A')); } + +TEST(UtilTest, Malloc) { + using node::Malloc; + EXPECT_NE(nullptr, Malloc(0)); + EXPECT_NE(nullptr, Malloc(1)); +} + +TEST(UtilTest, Calloc) { + using node::Calloc; + EXPECT_NE(nullptr, Calloc(0, 0)); + EXPECT_NE(nullptr, Calloc(1, 0)); + EXPECT_NE(nullptr, Calloc(0, 1)); + EXPECT_NE(nullptr, Calloc(1, 1)); +} \ No newline at end of file diff --git a/test/parallel/test-crypto-pbkdf2.js b/test/parallel/test-crypto-pbkdf2.js index 0b0ab13cbbfc5d..41940af4b91690 100644 --- a/test/parallel/test-crypto-pbkdf2.js +++ b/test/parallel/test-crypto-pbkdf2.js @@ -79,3 +79,11 @@ assert.throws(function() { assert.throws(function() { crypto.pbkdf2('password', 'salt', 1, -1, common.fail); }, /Bad key length/); + +// Should not get FATAL ERROR with empty password and salt +// https://github.com/nodejs/node/issues/8571 +assert.doesNotThrow(() => { + crypto.pbkdf2('', '', 1, 32, 'sha256', common.mustCall((e) => { + assert.ifError(e); + })); +});