'crypto.createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding)' results in an abort

  • Version: v12.16.0
  • Platform: Linux vul337 4.15.0-91-generic new design of error handling #92-Ubuntu SMP Fri Feb 28 11:09:48 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
  • Subsystem: crypto

What steps will reproduce the bug?

Directly run the following code snippet using node:

require('crypto').createDiffieHellman('str', 3.14);

How often does it reproduce? Is there a required condition?

No. This potential bug can always be reproduced.

What is the expected behavior?

The second argument to 'crypto.createDiffieHellman(prime: string, prime_encoding: HexBase64Latin1Encoding)' should be a 'HexBase64Latin1Encoding' value as the encoding of the first argument, but we passed a float pointer value into it. The function should throw an exception or other similar error-reporting stuff rather than crash the whole nodejs process.

What do you see instead?

This is the stack dump produced during abort:

./node[36752]: ../src/util-inl.h:495:node::ArrayBufferViewContents<char, 64>::ArrayBufferViewContents(v8::Local<v8::Value>) [T = char, kStackStorageSize = 64]: Assertion `value->IsArrayBufferView()' failed.
 1: 0x13f9b30 node::Abort() [./node]
 2: 0x13f9709  [./node]
 3: 0x160c480 node::crypto::DiffieHellman::DiffieHellmanGroup(v8::FunctionCallbackInfo<v8::Value> const&) [./node]
 4: 0x17b379c v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo) [./node]
 5: 0x17b1c91  [./node]
 6: 0x17b104c  [./node]
 7: 0x2717a59  [./node]
[1]    36752 abort      ./node

Additional information