fix private key export without cipher crash by panva · Pull Request #27041 · nodejs/node (original) (raw)
Fixes the following by type checking the cipher before sending of to node_crypto.cc
const { generateKeyPairSync } = require('crypto') const { privateKey } = generateKeyPairSync('rsa', { modulusLength: 2048 }) privateKey.export({ format: 'pem', type: 'pkcs8', passphrase: 'super-secret' })
node[13162]: ../src/node_crypto.cc:3096:NonCopyableMaybe<node::crypto::PrivateKeyEncodingConfig> node::crypto::GetPrivateKeyEncodingFromJs(const FunctionCallbackInfo<v8::Value> &, unsigned int *, node::crypto::KeyEncodingContext): Assertion `!(context != kKeyContextInput) || (result.cipher_ != nullptr)' failed.
1: 0x10006778e node::Abort() [/.nvm/versions/node/v11.13.0/bin/node]
2: 0x1000676c0 node::PrintErrorString(char const*, ...) [/.nvm/versions/node/v11.13.0/bin/node]
3: 0x10011f2d8 node::crypto::KeyObject::ExportPrivateKey(node::crypto::PrivateKeyEncodingConfig const&) const [/.nvm/versions/node/v11.13.0/bin/node]
4: 0x10011e16f node::crypto::KeyObject::Export(v8::FunctionCallbackInfo<v8::Value> const&) [/.nvm/versions/node/v11.13.0/bin/node]
5: 0x10023f927 v8::internal::FunctionCallbackArguments::Call(v8::internal::CallHandlerInfo*) [/.nvm/versions/node/v11.13.0/bin/node]
6: 0x10023eef6 v8::internal::MaybeHandle<v8::internal::Object> v8::internal::(anonymous namespace)::HandleApiCallHelper<false>(v8::internal::Isolate*, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::Handle<v8::internal::FunctionTemplateInfo>, v8::internal::Handle<v8::internal::Object>, v8::internal::BuiltinArguments) [/.nvm/versions/node/v11.13.0/bin/node]
7: 0x10023e5f0 v8::internal::Builtin_Impl_HandleApiCall(v8::internal::BuiltinArguments, v8::internal::Isolate*) [/.nvm/versions/node/v11.13.0/bin/node]
8: 0xd92061cfc7d
9: 0xd920618e458
10: 0xd920618e458
11: 0xd920618ba89
[1] 13162 abort node